什么是抓包?如何抓包?看完本文,你就懂了

0×01 前言

在平时和其他大佬交流时,总会出现这么些话,“抓个包看看就知道哪出问题了”,“抓流量啊,payload都在里面”,“这数据流怎么这么奇怪” 。这里出现的名词,都是差不多的意思吗?packet,frame,flow,session区别是什么,你真的分的清楚吗?
平时关系还不大,这几个名词随便用,大家也都知道指什么,这段时间在分析协议类型的漏洞,终于意识到基础知识的浅薄,才知道自己根本没分清这几个基础概念,看国外一些技术文档不明所以,于是查了大量资料,写出了本文 。
什么是抓包?如何抓包?看完本文,你就懂了

文章插图
 
0×02 区分control plane和data plane
什么是抓包?如何抓包?看完本文,你就懂了

文章插图
 
control plane, data plane是实现网络设备所需要理解的两个基本的概念 。data plane一般用于快速转发,而control plane是为快速转发准备必要的信息 。control plane包括路由协议,设备管理,命令行,ARP,IGMP等;而data plane一般是转发包 。这样的划分,目的是把系统的主要工作和次要工作分离开,避免不同类型的处理相互干扰 。在一个网络设备里面,转发无疑是最主要的工作,它具有最高的优先级,而路由协议,由于并不需要在短时间内处理大量的包,所以可以把它放到次一级的优先级里面 。data plane可以借助asic或者NP等优化,可以达到很高的速度,而control plane,则可以借助于通用的库,或者系统,以达到更好的保护 。
control plane的os和data plane的os,作用完全不同 。data plane的os需要实时响应,并且需要更快速,高效的内存管理,队列管理,定时器管理等;而control plane的os则倾向于更好的保护,更简便的编程方式,以及快速移植等 。当然,哪些任务放到control plane,哪些任务放到data plane,是需要在实践中去选择 。举个例子,由于arp学习和应答的时间是不确定的,而mac learning则是立即生效的 。所以arp学习和应答一般放在control plane;而mac learning则放在data plane 。
就data plane来说,又可分control path和data path 。control path同样是为data path准备必要的信息 。有时为了更快的速度,避免control plane和data plane过多的交互,把control plane的某些工作拿到data plane上来做,比如ICMP的应答等 。
0×03 区分session和flow
什么是抓包?如何抓包?看完本文,你就懂了

文章插图
 
flow是发送方和接收方之间的数据包中的data plane stream,其共享关键IP报头信息 。例如,10.1.1.1端口12398处的客户端与用于SSH的192.168.1.1端口22处的服务器通信是specific stream,可以在关键字段不更改时捕获该特定stream 。
session是发送方和接收方之间的control plane通信 。TCP 3次握手创建会话,在发送方的源端口和接收方的目标侦听端口之间建立连接 。TCP窗口大小,初始序列和确认值以及keepalive是作为构建session的一部分进行协商的 。
简单地说,flow代表了data plane,而session代表了control plane 。
0×04 区分datagram和stream
什么是抓包?如何抓包?看完本文,你就懂了

文章插图
 
stream是我们通常认为的通信渠道 。比如远程登录,文件传输,邮件传递,这个都是使用stream 。Strean就像管道一样 。它有两个端点 。数据从一端放入,另一端出来 。没有任何数据以任何方式被复制,丢弃或重组 。两个流可以组合在一起形成全双工连接 。
datagram(通常称为packet)本质上更具原子性 。它是一小段数据,通常要求小于最大长度(通常在256到2000字节范围内) 。datagram是完全自包含的,有源和目的地,但不能被称为connection 。数据报与之前或之后的任何其他数据都没有任何关系 。
很难理解吗?
我们再打个比方 。
stream就像打电话- 一方拨打电话,另一方接听,你们互相打招呼(TCP中的SYN / ACK),然后交换信息 。一旦完成,你就说再见(TCP中的FIN / ACK) 。如果一方没有听到再见,他们通常会打电话给另一方,因为这是一个意想不到的事件; 也就是说通常客户端将重新连接到服务器 。这样可以保证数据不会以与我们发送的顺序不同的顺序到达,并且可以保证数据不会被损坏 。
datagram就像在班级里传小纸条 。如果你和想要拿到小纸条的人不坐在一起,这个小纸条将在其他人之间传递过去 。小纸条可能无法到达目的地,并且可能会在到达目的地时被修改过 。另一种两款,如果将两个小纸条传递给同一个人,两个小纸条可能不会按照我们需要的顺序到达,因为小纸条们通过教室的路线可能不一样,一个人可能不会像另一个那样快速传递小纸条,等等会有很多因素影响到小纸条的传递 。


推荐阅读