知识点:TCP、UDP 通信协议与格式 测试分析工具:wireshark/tcpdump 的使用与传输说明 文章内容以 TCP 与 wireshark 示例

TCP 协议特点

TCP 是面向连接的稳定可靠的传输协议。重要的特性如 面向流的处理、重新排序(避免乱序)、流控制(数据段大小、拥塞控制、超时重传)等

  1. TCP发送的数据段是不定长的。在一个数据段里,每字节数据都被分配一个序列号。接收计算机必须为
  2. 接收到的每个字节数据都发送一个确认信号。该序列号并不是在数据段里为每个字节都单独编号,而是
  3. 在头里的序列号字段指定了数据段第一个字节的序列号。
  4. 例外的是如果数据段是连接初期使用的,序列号字段里包含的是 ISN,它的值比数据段里第一个字节的
  5. 序列号小 1(也就是说,第一个字节的序列号是 ISN+1)。
  6. TCP 支持两种打开状态
  7. 被动打开:某个应用程序进程通知 TCP 准备通过 TCP 端口接受连接
  8. 主动打开:程序要求 TCP 初始化与另一台计算机的连接

TCP 协议格式

之前已经提到了 TCP 协议的差错控制能力,主要是因在 TCP 的头部中有滑动窗口、MSS、MTU、校验和、序列号等能力

网络通信之socket质量分析 - 图1

连接建立(三次握手)

网络通信之socket质量分析 - 图2

wireshark 监测

image.png
图 1
image.png
图 2

查看图1中某次TCP的Info:
44768 > http [SYN] Seq=0 Win=65535 Len=0 MSS=1460 SACK_PERM=1 TSV=176577 TSER=0 WS=6

这正是某端口首次建立连接的过程,Seq[uence]=0已经表明;
Win[dow]:字段表示窗口大小,即TCP的滑动窗口大小;
Len[gth]:表示其传输大小,单位是字节;
MSS:Maximum Segment Size最大报文长度;
TSV:TimeStamp Value 表示发送该报文时虚拟时钟的时间戳;
TSER:TimeStamp Echo Reply 该值会记录最近一次收到的报文中TSV的值,用以判断RTT;
RTT:Round Time Trip,网络往返时延。表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认),总共经历的时延。

图2中所示为丢包重传的信息,截取一段

  1. [TCP Retransmission] 37118 > 15060 [PSH, ACK] Seq=341 Ack=2176 Win=17936 Len=23 TSV=3239579 TSER=2927263553
  2. //重传失败后,在RTT(Round-trip time一次往返传输的时间)时间内未收到server端的ACK,认为1876发送失败,开始自动Retransmission过程。
  3. [TCP Dup ACK 143#1] 15060 > 37118 [ACK] Seq=2430 Ack=364 Win=14592 Len=0 TSV=2927268021 TSER=3239579 SLE=341 SRE=364
  4. //TCP Dup xxxx#x 表示出现丢包,其中xxxx表示所丢包的序号,x表示该包第几次丢。发现丢包后TCP会自动重发该包。