Misc 总结 ----流量分析 TCP协议的认识

网络协议——TCP报文

实验目的

掌握TCP建立连接的方式
了解TCP报文中不同字段的作用
了解TCP报文中标志位的作用
掌握使用wireshark分析数据包的基本方法

实验环境

  • 操作机:Windows 7
    • 实验工具:
      • Wireshark2.2
        ## 实验内容

  从网络协议最基本的TCP开始讲起。TCP是基于连接的,一种可靠的通信方式。TCP连接的建立必须经过三次握手,建立连接之后才开始发送数据,且可以保证数据的完整性,利用重传机制防止数据传输过程中的丢失。

  序号为多少的包里传输了"endendend"结尾的文件最后一部分?

了解TCP三次握手建立连接的具体过程。

首先,先具体了解TCP三次握手建立的过程,以及判别TCP三次握手

方法一 观察标志位

  • 操作步骤详解

我们首先要理解的是TCP连接三次握手,如下图,A主动打开本地一个端口,向B发送一个SYN标志位为1,seq=x的包。B在监听一个端口,当这个端口收到A发送的第一个包带有SYN标志位,B会向A返回一个SYN,ACK标志位均为1,且seq=y,ack=x+1的数据包,当A收到这个包时,A向B发送确认ACK为1,seq=x+1,ack=y+1。然后TCP连接建立双方可以通信。

image

我们先通过TCP连接建立的过程,理解一下ACK,SYN,标志位的作用。

使用wireshark载入TCP.pcapng流量包,wireshark分三栏,会很直观的呈现给我们数据包的分组列表,分组详情和分组字节流。我们从第一个数据包开始看。Source源IP地址,192.168.233.128,Destination目的IP地址,192.168.233.129,协议TCP,在后面的Info中,我们可以看到[SYN],Seq= ,等等:

image

上图当前选中的第二个数据包,我们打开了分组详情,并打开了Flags这个字段。我们可以看到在这个字段中,SYN和ACK(Acknowledgment)是置为1的。同理我们看第一个数据包只有SYN标志位为1,第三个数据包只有ACK标志位为1,我们可以意识到这是一个TCP连接的建立过程。在wireshark分组详情中,我们通过查看Transmission Control Protocol的详细信息,包含Source Port和Destination Port字段,分别为2333和47638,我们可以得到第二个数据包是192.168.233.129从2333端口向192.168.233.128的47638端口发送的连接建立的确认信息,即第二个握手包

注释

方法二 通过seq和ack的值了解建立过程

我们刚才只了解了标志位,现在了解一下TCP连接中,数据包是如何计数的,并确认完整性。

image
上图中可以看出,wireshark在分组列表中info字段为我们呈现了一个seq的值,为0,分组详情中也呈现出来。但是0如分组详情中括号内容解释的一样,是一个相对的值。在真正连接建立过程中,A发送的第一个请求建立TCP连接的数据包中,seq是一个随机的值,同理B也是。但是连接过程中及数据传输中,seq只是一个逐渐增大的过程,显示相对的数值并不影响我们的分析。如果想了解seq详细的数值我们可以在分组字节流中找到它,我们点击分组详情中的Sequence number字段,响应位置的信息会在分组字节流中显示出来,我们就可以看到seq这个随机数了:

image

紧接着往下,在A发送了seq为0(相对)的建立连接请求后,B同样发送了一个含有seq的包,这个seq就是B端对于TCP数据包的计数,并且在ack number给A回复了A发送的seq,表示A发送的第seq个数据包已经收到:

image

思考

  1. 如果A发送的seq没有收到对应的ack会怎样呢?(触发重传机制)
  2. 如果建立连接的时候,A直接发送了一个ACK标志位为1的数据包没有SYN的过程,又会怎样?(连接建立失败)

实验二

TCP连接的数据传输过程

方法 根据标志位进行判断

TCP还有有一个名叫Push(PSH)的标志位,我们观察载入的流量包分组列表,在info列我们可以看到有两个包是含有PSH标志位的:

image

注意序号为5和13的数据包。详情可以通过上面的,展开对应数据包的Flags字段,可以看到Push标志位被置为1。当PSH标志位为1时意味着有数据的传输,我们可以通过分组详情中注意到TCP层下面还有一个Data字段,Data字段就是这个数据包所包含的数据,在下面的课程我们会介绍如何提取这些数据。

实验三

TCP连接的断开过程

方法 根据标志位判断

同样涉及到seq和ack number的变化,连接释放(断开)的过程涉及到FIN标志位。TCP连接释放过程如下图:

image

TCP连接释放的过程可以由A或B主动断开连接均可,上图我们展示的是A(主动建立连接的一方)主动断开TCP连接。A发送一个FIN标志位置为1,seq=u的数据包,并进入FIN-wait状态,此时仍可以接收B尚未传输结束的数据。B接受到之后发送FIN,ACK,标志知道连接即将释放,并进入CLOSE-wait状态,A接受到B的FIN,向B发送一个ACK,确认连接断开,A在等待极短的时间后断开连接。B接受到ACK之后断开连接。下面通过数据包进行分析TCP连接断开的过程:

image

序号为17的数据包是192.168.233.128向192.168.233.129发送的TCP连接关闭请求。我们注意到这个数据包的FIN字段为1同时ACK字段也为1,这个数据包的目的在于告知对方我要关闭连接,并且收到了对方上次发来的数据包。然后同理192.168.233.129发送了一个FIN,ACK表示连接可以关闭,最终192.168.233.128发送了ACK,释放了这个TCP连接。

思考

  1. 主动释放连接的一方发送了最后的一个ACK之后,还要等待一个极短的时间是什么目的?(保证报文到达;防止已失效的连接请求报文段出现在当前连接中)
  2. 被动建立连接的一方(B)主动关闭连接又会是什么样的情况?

根据PSH标志位,定位到序号为5和13的两个数据包,查看分组字节流即可得到答案。
答案:13


原文链接: xianzhi.aliyun.com