欢迎光临散文网 会员登陆 & 注册

TCP 数据包及连接建立过程分析-计算机网络

2022-08-03 15:57 作者:老师-忘记密码  | 我要投稿

一、 实验目的

1.1  学习并分析 TCP 数据包的结构、含义

1.2 分析 TCP 连接的建立过程和数据传输过程。

二、 实验环境

2.1  Wireshark 网络分析软件  

2.2  实验文件“计算机网络实验.cap”

三、 实验内容

3.1 TCP 数据包的结构和含义分析

打开文件“计算机网络实验.cap”,这是一个包括 204 个分组的网络通信记录,详细记录了分组的序号、相对时间、源地址、目标地址、协议类型、内容,如图 1 是对第 29 个分组的详细信息。

图 1 第 29 个分组的 TCP 数据包的解析


观察文件内第 29 个分组的 TCP 数据包详细信息,见图 1。

l 它的前 16 位是 1668,表示源端口是 1668,是客户端的一般端口,(本机是客户端)

l 它的目的端口是 0050(H)=8080,表明是访问服务器端的 HTTP 应用。

l 当前发送的数据首字节是 0(相对值),表示为首发字节。它携带的数据包长度是 0 字节,64(IP 包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-44(TCP 首部长度)=0 字节,该 TCP 数据包未携带数据。

l 确认号字段为 0,结合后面的 ACK=0,表明未携带确认信息。

l TCP 首部的固定长度部分是 20 字节; b002(H)=1011 0000 0000 0010 (B),其中表示 TCP

首部长度长度.是前 4 位,即 1011(B)=11,以 4 个字节为 1 个单位,因此该 TCP 首部总长度是 11×4 字节=44 字节,其中包含选项字段 24 字节。

l 同步比特 SYN=1,表明它是一个 TCP 连接相关的数据包

l 其它:ACK =0,确认比特 ACK —— 只有当 ACK =1时确认号字段才有效。当 ACK

=0 时,确认号无效。

l 推送比特 PSH (PuSH) —— 接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

l 窗口字段大小 524280 字节,当前可以接收对方发送 524280 字节。

l 校验和=a4ff,正确。

l 紧急指针字段=0,因为紧急 URG=0

l 头部选项字段:给出了最大报文段长度 MMX=1460 字节,注意 MAC 帧携带的数据范围是 46-1500 字节,1500-20(IP 头长)-20(TCP 长)=1460。

观察文件内第 34 个分组的 TCP 数据包详细信息,见图 2。

图 2 第 34 个分组的 TCP 数据包的解析


l 它的源端口是 0050(H)=80,是服务器端的 HTTP 应用服务。

l 它的目的端口是 1668,是客户端的一般端口号。

l 当前发送的数据首字节是 1449(相对值)。它携带的数据包长度是 357 字节,409(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=357字节,该 TCP 数据包携带 357 字节数据,因此下一个 TCP 数据包携带数据的首字节是1449+357=1806。

l 确认号字段为 875,结合后面的 ACK =1,表明已经正确接收对方发送的 875 字节前的

数据。

l TCP 首部长度;8018(H)=1000 0000 0001 1000 (B),其中表示 TCP 首部长度长度是前

4 位,即 1000(B)=8,因此该 TCP 首部长度是 8×4 字节=32 字节,包含选项字段 12

字节。

l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包

l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。

l 推送比特 PSH (PuSH)=1,接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

l 窗口字段大小 64661 字节,当前可以接收对方发送 64661 字节。

l 校验和=d169,正确。

l 紧急指针字段=0,因为紧急 URG=0

l 头部选项字段:给出了时间戳 Time stamp。

数据被分片,1805 字节的数据被分为第 33 个分组的 1448 字节和第 34 个分组的 357 字

节.

4.2 TCP 连接的建立和释放过程

选择“flow graph” 观察 TCP 连接的建立过程。

 

图 3 选择“flow graph” 观察 TCP 连接的建立过程


 

图 4 选择“flow graph”参数 观察 TCP 流


 

图 5 TCP 流


客户端进程(IP 地址:219.222.170.14,端口 1668)与服务器端进程(IP 地址:172.30.0.19端口 80)建立连接的 3 次握手过程,对应的分别是第 29、30、31 数据分组。它们分别完成的是:

第 29 数据分组:客户端 的 TCP(SYN=8a42cdc9,这是客户端为了防范某些安全性攻击而选择的起始序号,相对序号是 1)向服务器端发出连接请求报文段;注意该分组的Option 字段内容,给出了 MSS=1460 字节,Sack Permitted 等协商内容。该连接请求报文不携带数据(Len=0),但消耗一个序号。为了防止 TCP syn攻击,该分组选择的初始化序号是8a42cdc9,当然相对序号是 1。

第 30 数据分组:服务器端 的 TCP 收到连接请求报文段后,同意,发回确认(确认报文段中将 SYN 置为 1,ACK=1);注意该分组的 Option 字段内容,给出了 MSS=1460 字节. 该连接请求确认报文不携带数据(Len=0),但消耗一个序号。同时初始窗口值为 32768字节。为了防止 TCP syn 攻击,该分组选择的初始化序号是 27f5bf03,当然相对序号是 1, 对29 数据分组的确认是 8a42cdca(8a42cdc9+1).

第 31 数据分组:客户端收到此报文段后,向服务器端 给出确认(ACK=1)。连接建立完成。

客户端进程(IP 地址:219.222.170.14,端口 1669)与服务器端进程(IP 地址:172.30.0.19端口 80)释放连接的过程,对应的分别是第 47、48、49、50 数据分组。它们分别完成的是:

第 47 数据分组:219.222.170.14 端 的 TCP(FIN 置为 1)向 172.30.0.19 端发出连接释放请求报文段,该释放请求报文未携带数据(Len=0),但消耗一个序号。

第 48 数据分组:服务器端的 TCP 收到连接释放请求报文段后,发回确认(确认报文段中将 ACK 置为 1);窗口值为 64167 字节;注意该分组的 Option 字段内容,时间戳 Timestamp。

第 49 数据分组:172.30.0.19 端也不再需要发送数据,发出连接释放请求报文段(FIN置为 1),未携带数据(Len=0)。

第 50 数据分组:收到第 49 数据分组后,219.222.170.14 端发出确认(ACK=1)。

至此,连接释放的协商过程完毕,收到第 50 数据分组后,172.30.0.19 会释放与219.222.170.14 端 1669 的连接;219.222.170.14 端在 2MSL 后,释放连接。

 

四、 实验问题

问题一:什么是 TCP 协议?TCP 数据包的结构和含义是怎样的?

答: 

传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。

TCP数据包结构:


1-1.源始端口16位,范围是0-65535

1-2.目的端口,同上。

2-1.数据序号32位,TCP为发送的每个字节都编一个号码,这里存储当前数据包数据第一个字节的序号。

3-1.确认序号32位,为了安全,TCP告诉接受者希望他下次接到数据包的第一个字节的序号。

4-1.偏移4位,类似IP,表明数据距包头有多少个32位。

4-2.保留6位,未使用,应置零。

4-3.紧急比特URG—当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

4-3.确认比特ACK—只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

4-4.复位比特RST(Reset) —当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

4-5.同步比特SYN—同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。

4-6.终止比特FIN(FINal)—用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

4-7.窗口字段16位,窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

5-1.包校验和16位,包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

5-2.紧急指针16位,紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

6-1.可选选项24位,类似IP,是可选选项。

6-2.填充8位,使选项凑足32位。

7-1.用户数据

 

问题二: TCP 协议建立连接的过程是怎样的?

答:

       如图:初始时候,客户端和服务端都处于CLOSED(关闭)状态。当客户端需要给服务端发送数据包的时候,客户端主动打开连接。这个时候应该是通知了服务端,让服务端也打开连接,所以服务端是被动打开连接。打开连接之后,分别开始创建传输控制模块TCB,接着服务端进入LISTEN(监听)状态,等待客户端的连接请求。客户端也开始准备连接请求数据包,开始发送。客户端发送的第一个数据包是一个连接请求报文段,这个报文的内容如图,是一个同步位SYN=1,另一个是一个初始序号seq=x。TCP规定,SYN=1的报文段不能携带数据,但是消耗一个序列号。客户端发送了这个报文之后,进入SYN-SENT(同步已发送)状态。

      服务端己收到这个数据包之后,知道有客户端请求连接。如果当前有资源,可以同意连接,则给客户端发送确认报文。这个确认报文的内容有:SYN=1(没有变化),seq=y(变成了服务端的序列号),新增ACK=1,ack=x+1(客户端序列号+1)。这里SYN=1,所以报文不能携带数据,同样消耗了服务端的一个序列号。然后服务端进入了SYN-RCVD(同步收到)状态。

     客户端收到服务端的确认报文之后,还需要给客户端发送一个客户端的确认报文。这个报文的内容是ACK=1,seq=x+1,ack=y+1。这里没有了SYN这个字段,所以这个报文可以携带数据。这个客户端确认报文发送出去之后,客户端进入ESTABLISHED(已建立连接)状态。

     服务端接收到这个数据包之后,也进入了ESTABLISHED(已建立连接)状态。

     上面的三个过程就是TCP建立连接的三次握手。

 

问题三:根据文件“计算机网络实验.cap”,参照实验 3.1 回答以下问题:

1.分析第 44 个分组 TCP 数据包的结构和含义?

答:

l 它的源端口是 0685(H)=1669,是客户端的一般端口号。

l 它的目的端口是 80,是服务器端的 HTTP 应用服务。

l 当前发送的数据首字节是 769(相对值)。它携带的数据包长度是 600字节,652(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=600字节,该 TCP 数据包携带 600字节数据,因此下一个 TCP 数据包携带数据的首字节是769+600=1369。

l 确认号字段为 1,结合后面的 ACK =1,表明已经正确接收对方发送的首字节的数据。

l TCP 首部长度:0800(H)=0000 1000 0000 0000(B),其中表示 TCP 首部长度长度是前4位,即 1000(B)=8,因此该 TCP 首部长度是 8×4 字节=32 字节,包含选项字段12字节。

l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包。

l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。

l 推送比特 PSH (PuSH)=1,接收 TCP 收到推送比特置 1 的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。

l 窗口字段大小 32850 字节,当前可以接收对方发送32850字节。

l 校验和=64f6,正确。

l 紧急指针字段=0,因为紧急 URG=0

l 头部选项字段:给出了时间戳 Time stamp。

数据被分片,1368 字节的数据被分为第 43 个分组的 768 字节和第 44 个分组的 600 字节.

 

2.分析第 127 个分组 TCP 数据包的结构和含义?

答:

l 它的源端口是 0050(H)=80,是服务器端的 HTTP 应用服务。

l 它的目的端口是 1655,是客户端的一般端口号。

l 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是 0 字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。

l 确认号字段为 1,结合后面的 ACK=1,表明已经正确接收对方发送的首字节的数据。

l TCP 首部长度8×4 字节=32 字节,包含选项字段 12 字节。

l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包

l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。

l 推送比特 PSH (PuSH)=0,接收 TCP 等到整个缓存都填满了后再向上交付。

l 窗口字段大小 64917 字节,当前可以接收对方发送 64917 字节。

l 校验和=3dda,未验证。

l 紧急指针字段=0,因为紧急 URG=0

l 头部选项字段:给出了时间戳 Time stamp,显示重传时间。

3.分析第 75 个分组 TCP 数据包的结构和含义?

答:

l 它的源端口是 0050(H)=80,是服务器端的 HTTP 应用服务。

l 它的目的端口是 1672,是客户端的一般端口号。

l 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是 0 字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,该 TCP 数据包携带 0 字节数据,因此该 TCP 数据包未携带数据。  

l 确认号字段为 619,结合后面的 ACK =1,表明已经正确接收对方发送的 619 字节前的数据。

l TCP 首部长度: 8×4 字节=32 字节,包含选项字段 12字节。

l 同步比特 SYN=0,表明它不是一个 TCP 连接相关的数据包

l 确认比特 ACK=1 ,确认号字段才有效。当 ACK =0 时,确认号无效。

l 推送比特 PSH (PuSH)=0,接收 TCP 等到整个缓存都填满了后再向上交付。

l 窗口字段大小 64917 字节,当前可以接收对方发送 64917 字节。

l 校验和=da9c,未验证。

l 紧急指针字段=0,因为紧急 URG=0

l 头部选项字段:给出了时间戳 Time stamp。  

 

问题四:根据文件“计算机网络实验.cap”,参照实验 3.2 回答以下问题:

1. 219.222.170.14 端进程(端口 1672)与服务器端进程(端口 80)建立连接的 3 次握手过

程?该服务器的 IP 地址是?

答:

客户端进程(IP 地址:219.222.170.14,端口 1672)与服务器端进程(IP 地址:172.30.0.19

端口 80)建立连接的 3 次握手过程,对应的分别是第 707172 数据分组。它们分别完成的是:

70 数据分组:客户端的TCP(SYN=68f7ed0c,这是客户端为了防范某些安全性攻击而选择的起始序号,相对序号是 1)向服务器端发出连接请求报文段;注意该分组的Option 字段内容,给出了 MSS=1460 字节,Sack Permitted 等协商内容。该连接请求报文不携带数据(Len=0),但消耗一个序号。为了防止 TCP syn 攻击,该分组选择的初始化序号是 68f7ed0c,当然相对序号是 1。

71 数据分组:服务器端 的 TCP 收到连接请求报文段后,同意,发回确认(确认报文段中将 SYN 置为 1,ACK=1);注意该分组的 Option 字段内容,给出了 MSS=1460 字节. 该连接请求确认报文不携带数据(Len=0),但消耗一个序号。同时初始窗口值为 32768字节。为了防止 TCP syn 攻击,该分组选择的初始化序号是 36b4fc4e,当然相对序号是 1, 对29 数据分组的确认是 68f7ed0d68f7ed0c+1).

72 数据分组:客户端收到此报文段后,向服务器端给出确认(ACK=1)。连接建立完成。

该服务器的 IP 地址是172.30.0.19。


TCP 数据包及连接建立过程分析-计算机网络的评论 (共 条)

分享到微博请遵守国家法律