【计算机网络】实验五 TCP数据包及连接建立过程分析

发布于:2024-06-28 ⋅ 阅读:(153) ⋅ 点赞:(0)

计算机科学与技术学院实验报告

课程名称

计算机网络

实验类型

综合

实验名称

实验五 TCP数据包及连接建立过程分析

重点难点

重点:TCP 数据包格式; 难点:探索TCP数据包格式各字段具体的物理意义,熟悉TCP连接的建立过程和数据传输过程

实验目的

1. 学习并分析TCP数据包的结构、含义;

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

实验环境

WireShark、IE等软件;实验文件“计算机网络实验.cap”

实验步骤

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

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

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

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

  1. 它的前 16位是1668,表示源端口是1668,是客户端的一般端口,(本机是客户端)
  2. 它的目的端口是 0050(H)=80,表明是访问服务器端的HTTP应用。
  3. 当前发送的数据首字节是 0(相对值),表示为首发字节。它携带的数据包长度是0字节,64(IP包全长,见IP包头的长度字段值)-20(IP首部长度)-44(TCP首部长度)=0字节,该TCP数据包未携带数据。
  4. 确认号字段为 0,结合后面的ACK  0,表明未携带确认信息。
  5. TCP首部的固定长度部分是20字节; b002(H)=1011 0000 0000 0010(B),其中表示TCP首部长度长度.是前4位,即1011(B)=11,以4个字节为1个单位,因此该TCP首部总长度是11×4字节=44字节,其中包含选项字段24字节。
  6. 同步比特 SYN=1,表明它是一个TCP连接相关的数据包
  7. 其它:ACK  0,确认比特ACK —— 只有当 ACK  1 时确认号字段才有效。当 ACK  0 时,确认号无效。
  8. 推送比特 PSH (PuSH) ——接收 TCP收到推送比特置 1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  9. 窗口字段大小 524280字节,当前可以接收对方发送524280字节。
  10. 校验和=a4ff,正确。
  11. 紧急指针字段=0,因为紧急URG=0
  12. 头部选项字段:给出了最大报文段长度MMX=1460字节,注意MAC帧携带的数据范围是46-1500字节,1500-20(IP头长)-20(TCP长)=1460。

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

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

  1. 它的源端口是 0050(H)=80,是服务器端的HTTP应用服务。
  2. 它的目的端口是 1668,是客户端的一般端口号。
  3. 当前发送的数据首字节是 1449(相对值)。它携带的数据包长度是357字节,409(IP包全长,见IP包头的长度字段值)-20(IP首部长度)-32(TCP首部长度)=357字节,该TCP数据包携带357字节数据,因此下一个TCP数据包携带数据的首字节是1449+357=1806。
  4. 确认号字段为 875,结合后面的ACK 1,表明已经正确接收对方发送的875字节前的数据。
  5. TCP首部长度; 8018(H)=1000 0000 0001 1000(B),其中表示TCP首部长度长度是前4位,即1000(B)=8,因此该TCP首部长度是8×4字节=32字节,包含选项字段12字节。
  6. 同步比特 SYN=0,表明它不是一个TCP连接相关的数据包。
  7. 确认比特 ACK  1 ,确认号字段才有效。当 ACK  0 时,确认号无效。
  8. 推送比特 PSH (PuSH)=1,接收 TCP收到推送比特置 1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  9. 窗口字段大小 64661字节,当前可以接收对方发送64661字节。
  10. 校验和=d169,正确。
  11. 紧急指针字段=0,因为紧急URG=0。
  12. 头部选项字段:给出了时间戳 Time stamp。
  13. 数据被分片,1805字节的数据被分为第33个分组的1448字节和第34个分组的357字节.

2. TCP连接的建立和释放过程

选择“统计-流量图”观察TCP连接的建立过程。

图3 选择“统计-流量图”观察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。

图 4 “统计-流量图”选择观察TCP流

图5 TCP流

第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字段内容,时间戳Time stamp。

第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后,释放连接。

问题一

1. 什么是TCP协议?TCP数据包的结构和含义是怎样的?

回答

TCP(Transmission Control Protocol,传输控制协议)是因特网协议簇中的核心协议之一,主要用于在计算机网络中实现可靠、顺序和无差错的数据传输。它是一种面向连接的协议,主要特点包括:

  1. 可靠性:通过序列号、确认应答和超时重传等机制,保证数据包可靠到达。
  2. 面向连接:在数据传输之前,通信双方需要建立连接(三次握手),在传输结束后,释放连接(四次挥手)。
  3. 流量控制:通过滑动窗口机制,控制数据发送速率,防止拥塞。
  4. 拥塞控制:采用算法(如慢启动、拥塞避免等)来防止网络拥塞。

TCP各字段含义如下:

  1. 源端口(Source Port,16位):发送端口号。
  2. 目的端口(Destination Port,16位):接收端口号。
  3. 序列号(Sequence Number,32位):发送方给数据段编号,用于确保数据包顺序。
  4. 确认号(Acknowledgment Number,32位):接收方确认已经收到的数据段的下一个字节的序号。
  5. 数据偏移(Data Offset,4位):TCP报头长度,表示TCP报头占用的32位字(4字节)数。
  6. 保留(Reserved,6位):保留位,通常设为0。
  7. 控制位(Control Flags,6位):包括以下标志:
  1. URG:紧急指针有效。
  2. ACK:确认号有效。
  3. PSH:提示接收端立即交付给应用层。
  4. RST:重置连接。
  5. SYN:同步序号用于建立连接。
  6. FIN:表示发送方完成发送任务。
  1. 窗口大小(Window Size,16位):流量控制,用于告诉发送方接收方的缓冲区大小。
  2. 校验和(Checksum,16位):校验TCP头部和数据部分,以检测传输中的错误。
  3. 紧急指针(Urgent Pointer,16位):当URG标志为1时有效,指出紧急数据的末尾。
  4. 选项(Options,变长):用于各种TCP扩展功能,如最大报文段长度(MSS)、时间戳等。
  5. 数据(Data,变长):实际传输的数据。数据包的结构和含义:

问题二

2. TCP协议建立连接的过程是怎样的?

回答

TCP协议建立连接需要三次握手,示意图如下:

图片来源:TCP连接的建立和释放过程详解(三次握手、四次挥手)_画图(使用word或wps)说明tcp连接的建立过程和释放过程。-CSDN博客

在握手之前,主动打开连接的客户端结束CLOSE阶段,被动打开的服务器也结束CLOSE阶段,并进入LISTEN阶段。随后进入三次握手阶段:

1)第一次握手(SYN):

  1. 客户端发送一个SYN(同步序列编号)报文段给服务器,表示请求建立连接。这个报文段中包含一个初始序列号(Sequence Number,简写为Seq=x)。
  2. 此时,客户端进入SYN_SENT状态。

2)第二次握手(SYN-ACK):

  1. 服务器接收到SYN报文段后,响应一个SYN-ACK(同步-确认)报文段。该报文段中包含服务器的初始序列号(Seq=y)和对客户端SYN报文段的确认号(Acknowledgment Number,简写为Ack=x+1)。
  2. 此时,服务器进入SYN_RCVD状态。

3)第三次握手(ACK):

  1. 客户端接收到SYN-ACK报文段后,发送一个ACK(确认)报文段给服务器。该报文段中包含客户端的序列号(Seq=x+1)和对服务器SYN报文段的确认号(Ack=y+1)。
  2. 此时,客户端进入ESTABLISHED状态,表示连接已建立。
  3. 服务器接收到ACK报文段后,也进入ESTABLISHED状态,连接建立完成。

问题三

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

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

回答

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

  1. 它的前 16位是1669,表示源端口是1669,是客户端的一般端口,(本机是客户端)
  2. 它的目的端口是 0050(H)=80,表明是访问服务器端的HTTP应用。
  3. 当前发送的数据首字节是 769(相对值)。它携带的数据包长度是600字节,652(IP包全长,见IP包头的长度字段值)-20(IP首部长度)-32(TCP首部长度)=600字节,该TCP数据包携带357字节数据,因此下一个TCP数据包携带数据的首字节是769+600=1369。
  4. 确认号字段为 1,结合后面的ACK = 1,表明已经正确接收对方发送的1字节前的数据。
  5. TCP首部长度; 8018(H)=1000 0000 0001 1000(B),其中表示TCP首部长度长度是前4位,即1000(B)=8,因此该TCP首部长度是8×4字节=32字节,包含选项字段12字节。
  6. 同步比特 SYN=0,表明它不是一个TCP连接相关的数据包。
  7. 确认比特 ACK = 1 ,确认号字段才有效。当 ACK = 0 时,确认号无效。
  8. 推送比特 PSH (PuSH)=1,接收 TCP收到推送比特置 1的报文段,就尽快地交付给接收应用进程,而不再等到整个缓存都填满了后再向上交付。
  9. 窗口字段大小 32850字节,当前可以接收对方发送32850字节。
  10. 校验和=64f6,正确。
  11. 紧急指针字段=0,因为紧急URG=0。
  12. 头部选项字段:给出了时间戳 Time stamp。
  13. 数据被分片,1368字节的数据被分为第43个分组的768字节和第44个分组的600字节.

问题四

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

回答

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

  1. 它的前 16位是80,表示源端口是80,表明是访问服务器端的HTTP应用。
  2. 它的目的端口是1655,是客户端的一般端口(本机是客户端)。
  3. 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是0字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。
  4. 确认号字段为 1,结合后面的ACK = 1,表明已经正确接收对方发送的1字节前的数据。
  5. TCP首部长度; 8011(H)=1000 0000 0001 0001(B),其中表示TCP首部长度长度是前4位,即1000(B)=8,因此该TCP首部长度是8×4字节=32字节,包含选项字段12字节。
  6. 同步比特 SYN=0,表明它不是一个TCP连接相关的数据包。
  7. 确认比特 ACK = 1 ,确认号字段才有效。当 ACK = 0 时,确认号无效。
  8. 推送比特 PSH (PuSH)=0,接收 TCP 等到整个缓存都填满了后再向上交付。
  9. 窗口字段大小64917字节,当前可以接收对方发送64917字节。
  10. 校验和=3dda,未校验。
  11. 紧急指针字段=0,因为紧急URG=0。
  12. 头部选项字段:给出了时间戳 Time stamp,显示重传时间。

问题五

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

回答

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

  1. 它的前 16位是80,表示源端口是80,表明是访问服务器端的HTTP应用。
  2. 它的目的端口是1672,是客户端的一般端口(本机是客户端)。
  3. 当前发送的数据首字节是 1(相对值)。它携带的数据包长度是0字节,52(IP包全长,见 IP 包头的长度字段值)-20(IP 首部长度)-32(TCP 首部长度)=0字节,因此该 TCP 数据包未携带数据。
  4. 确认号字段为 619,结合后面的ACK = 1,表明已经正确接收对方发送的619字节前的数据。
  5. TCP首部长度; 8010(H)=1000 0000 0001 0000(B),其中表示TCP首部长度长度是前4位,即1000(B)=8,因此该TCP首部长度是8×4字节=32字节,包含选项字段12字节。
  6. 同步比特 SYN=0,表明它不是一个TCP连接相关的数据包。
  7. 确认比特 ACK = 1 ,确认号字段才有效。当 ACK = 0 时,确认号无效。
  8. 推送比特 PSH (PuSH)=0,接收 TCP 等到整个缓存都填满了后再向上交付。
  9. 窗口字段大小64917字节,当前可以接收对方发送64917字节。
  10. 校验和=da9c,未校验。
  11. 紧急指针字段=0,因为紧急URG=0。
  12. 头部选项字段:给出了时间戳 Time stamp。

问题六

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

6.219.222.170.14端进程(端口1672)与服务器端进程(端口80)建立连接的3次握手过程?该服务器的IP地址是?

回答

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

第 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 数据分组的确认是 68f7ed0d(68f7ed0c+1)。

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

该服务器的 IP 地址是172.30.0.19。