欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

你真的懂“抓包”吗?

来源:本站整理 作者:佚名 时间:2019-05-14 TAG: 我要投稿

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就像在班级里传小纸条。如果你和想要拿到小纸条的人不坐在一起,这个小纸条将在其他人之间传递过去。小纸条可能无法到达目的地,并且可能会在到达目的地时被修改过。另一种两款,如果将两个小纸条传递给同一个人,两个小纸条可能不会按照我们需要的顺序到达,因为小纸条们通过教室的路线可能不一样,一个人可能不会像另一个那样快速传递小纸条,等等会有很多因素影响到小纸条的传递。
尽管大多数网络通信都使用stream,但所有Internet传输都采用datagram的形式,实际上是通过TCP协议使用datagram来模拟Internet stream。而为了诊断因特网故障,可以使用诸如TCPdump这类packet decoder来查看各个packet。
0×05 区别Packet和frame

为了简化问题,我们将frame和packet想象为将要从一个人发送到另一个人的信息的信封。 frame和packet之间的关键区别在于它们如何封装信息,而这取决于信息在哪儿被发送。
想象一下,一家公司有跨部门邮件,一个人可以将文档发送给其本地组织中的另一个人。内容放在内部信封中,发送者在“发件人”字段中写下他们的姓名和部门,然后在“收件人”字段中写下收件人的姓名和部门。发送信封时,邮件室识别内部使用信封,读取目的地名称和部门,使用目录将该信息转换为物理位置(办公室)并将其传递给收件人。信封永远不会离开本地组织,信封的所有传递行为都由本地处理。

[1] [2]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载