0%

Lab6-TCP

华东师范大学软件工程学院实践报告

实验课程:计算机网络实践 姓名:刘佳奇 学号:10225101455
实验名称:Lab6 TCP 实验日期:2023/12/29 指导老师:刘献忠

实验目的

  • 学会通过Wireshark获取TCP消息
  • 掌握TCP数据包结构
  • 掌握TCP数据包各字段的含义
  • 掌握TCP连接建立和释放的步骤
  • 掌握TCP数据传输阶段的过程

实验内容与实验步骤

  1. 捕获tcp报文
    • 以https://v1.ax1x.com/2023/12/29/7BJvVb.jpg为例,用wget确认该链接有效
    • 启动wireshark,利用tcp and host pluseven-sechs.site过滤捕获
    • 主要观察客户端与服务器之间的tcp流
    • 捕获开始后,重复第一步,重新发送请求
    • wget结束后,停止wireshark捕获
  2. 分析tcp报文
  3. tcp连接的建立与释放
  4. tcp数据传输
  5. 问题与探索

实验环境

  • windows
  • wireshark
  • wget

实验过程与分析

  1. 捕获数据
    win + x 以管理员身份运行命令行,以 https://v1.ax1x.com/2023/12/29/7BJvVb.jpg 为例,用wget确认该链接有效
    wget确认 启动wireshark,利用tcp and host v1.ax1x.com过滤捕获,主要观察客户端与服务器之间的tcp流,捕获开始后,重复第一步,重新发送请求,wget结束后,停止wireshark捕获
    捕获的tcp
  2. 分析TCP报文
    选择一个数据帧,分析其TCP包头字段
    TCP数据帧
  1. Source Port:源端口号,2个字节。客户端通常使用系统自动选择的临时端口号
  2. Destination Port:目的端口号,2个字节。服务器的端口号
  3. Sequence Numbebr:序号,4个字节。A与B连接后发送第一个报文段,序号值被系统分配随机一个值S,后续报文段的序号值为S + 偏移值
  4. Acknowledgement Number:确认号,4个字节。用作对另一方发送来的TCP报文段的响应。其值是收到的TCP报文段的序号值加1
  5. Header Length:头部长度,表示有多少个32位字(4字节),4位最大值是15,所以头部最长60字节。
  6. ACK: 表示确认号是否有效
    PSH: 提示接收端应用程序应该立即从TCP接收缓冲区中读走数据
    RST: 表示要求对方重新建立连接
    SYN: 表示请求建立一个连接
    FIN:表示通知对方本端要关闭连接了
    URG(紧急位):设置为1时,首部中的紧急指针有效;为0时,紧急指针没有意义
  7. windows: 16位窗口大小,2个字节。告诉对方本端的TCP接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。最大位65535字节。窗口大小为0时候,说明数据被截断
  8. checksum: 校验和,2个字节。由发送端填充,接收端对TCP报文段执行CRC算法以检验TCP报文段在传输过程中是否损坏。注意,这个校验不仅包括TCP头部,也包括数据部分
  9. Urgent Pointer: 紧急指针,2个字节
    TCP报文结构 TCP报文结构
  1. TCP连接的建立和释放
  1. TCP的三次握手协议主要分为以下三个步骤:
    A. 客户端发送一个SYN包给服务器,然后等待应答
    B. 服务器端回应给客户端一个ACK=1、SYN=1的TCP数据段
    C. 客户必须再次回应服务器端一个ACK确认数据段
    三次握手 画出三次握手协议的步骤图
    三次握手 观察并分析TCP数据段中的option字段
    Option 最大段大小(Maximum Segment Size): 该选项告知对方TCP连接端点在一个TCP段中能够接受的最大数据量(1460字节)
    窗口缩放(Window Scale): 该选项指示TCP连接端点要对窗口字段进行缩放,乘以256,以便在高延迟网络中更好地利用带宽。在这里,Shift count为8,表示要将窗口值左移8位,相当于乘以256
    SACK允许(SACK Permitted): 该选项表示TCP连接端点支持选择性确认(SACK)。 SACK允许在TCP连接中使用选择性确认机制,以提高数据传输的效率
    这些TCP选项提供了有关TCP连接配置和支持特性的信息
  2. TCP的四次挥手主要分为以下四个步骤: A. 客户端进程发出断开连接指令,这将导致客户端的TCP程序创建一个特殊的TCP报文段,发送到服务器。这个报文段的FIN字段被置为1,表示这是一条断开连接的报文;
    B. 服务器接收到客户端发来的断开连接报文,向客户端回送这个报文的确认报文(ACK字段为1),告诉服务器已经接收到FIN报文,并允许断开连接;
    C. 服务器发送完确认报文后,服务器的TCP程序创建一条自己的断开连接报文,此报文的FIN字段被置为1,然后发往客户端;
    D. 客户端接收到服务器发来的FIN报文段,则产生一条确认报文(ACK为1),发送给服务器,告知服务器已经接收到了它的断开报文。服务器接收到这条ACK报文段后,释放TCP连接相关的资源(缓存和变量),而客户端等待一段时间后(半分钟、一分钟或两分钟),也释放处于客户端的缓存和变量
    四次挥手 TCP的三次握手完成了双方准备发送数据的工作,并协商了初始序列号。这确保了建立连接的可靠性和双方对连接参数的同意。而四次握手则涉及到TCP连接的半关闭,因为TCP连接是全双工的,每个方向都需要单独进行关闭。半关闭是指在连接关闭过程中,每个方向上的数据传输是独立的,一方完成数据传输后可以发送FIN通告另一方关闭该方向的连接。这样的设计允许在双方各自完成数据传输后独立关闭连接
    另外,服务端在LISTEN状态下收到建立请求时,可以将ACK和SYN放在同一个报文里发送,以提高效率。然而,在关闭连接时,接收到对方的FIN通知并不意味着对方已经完全发送了所有数据,所以可能需要一段时间继续传输数据,然后再发送FIN通告对方同意关闭连接。因此,ACK和FIN通常在关闭连接时是分开发送的,以确保数据传输的完整性
  1. TCP数据传输
  1. 观察wireshark生成的IO图表
    IO图表

  2. 实验中的下载速率是多少? Bits/s & packets/s
    750 packets/s

  3. 实验中的上传速率,即ACK消息的发送速率是多少?

  4. 观察数据传输过程中Acknowledgment number,sequence number以及Segment Len之间的变化
    如果最近从服务器收到的TCP数据段的序列号是X,那么下一个发送的ACK是X+1

实验结果总结

本次实验首先探讨了TCP包的结构,然后回顾了TCP三次握手和四次挥手的过程,最后通过wireshark获得了传输过程的IO图

“富哥vivo50看看实力”