04-TCP协议头部

155 阅读3分钟

TCP 协议头部

TCP头部

Source Port(源端口)/Destination Port(目标端口)

  • 16bit,所以端口数量为 216=655362^{16} = 65536 ,范围为 0655350 – 65535

  • 发送端的端口号,这个也是本地的端口号。

  • 接收端的端口号,这个也是远程端口号。

  • 在 TCP 协议层,只有端口号没有 IP 地址。

TCP 四元组(源 IP、源端口、目标 IP、目标端口)可唯一确定网络中每个 TCP 连接的双方。

TCP头部-端口

上图中,圈出来 的在 TCP 层的即为端口号。在与服务器建立 TCP 连接的时候,服务器的 IP地址和端口号基本不会变化,但是客户端的会变化。我们的四元组(源 IP、源端口、目标 IP、目标端口)中有两个变化,所以建立客户端与服务器每次都是建立的不同的连接。

端口号分类

端口号在 IANA 分为三类:

  • System Ports:系统端口号,范围 0-1023
  • User Ports:用户端口号,范围 1024-49151
  • Dynamic and/or Private Ports:动态或私有端口号,范围 49152-65535

常见的端口号都在 IANA 登记,IANA连接

Sequence Number(发送序列号)

  • 32bit

  • TCP 通过 序列号 来标识从 TCP 发送端到接收端的数据字节流。

  • 在进行三次握手时,会交换初始序列号(ISN),然后每次传输完数据进行 ACK 确认。

Acknowledgment Number(应答序列号)

  • 32bit

  • 当数据接收端收到数据发送端建立握的 sync 数据包里,会给对方回复一个 ack 。同时会回复一个 acknowledgment numberack号 ,意思是:你可以从 ack number 后面开始传输数据了。

  • ack number 代表的含义以,这个数字以前的包都已经收到了。

tcp_ack_number

上图中的1并不是真正的 ack number ,这只是抓包软件 Wireshark 为了便于分析而生成的一个相对序列号,从 1 开始编号 。图中的 2 才是真正在网络中传输的 ack number,但是这个不便于我们做分析。

Data Offset(数据长度)

  • 4bit

Reserved(保留字段)

  • 4bit

  • 保留以供将来使用,这里的内容必须为 0

TCP Flags(TCP控制标记)

CWR

  • 拥塞窗口控制(非常用)

ECE

  • 非常用

UGR

  • 紧急指针

ACK

  • 应答字段,设置了该字段,标识这是一个 TCP 应答的包。
  • TCP 三次握手以后,连接建立成功,发送包的 ACK 标识都是被设置为 1。

PSH

  • 接收方应立即将这个数据包交给应用层,而不是自己缓存。

RST

  • Reset,复位。代表的含义是:断开这个 TCP 连接。

SYN

  • 在建立连接,三次握手时,会将该字段设置为 1 。

FIN

  • 连接完成,断开这个 TCP 连接。

Window(窗口大小)

  • 16bit,标识 TCP 窗口大小。不过有例外情况,配合选项可以开启『TCP 窗口缩放』

Checksum(校验和)

  • 16 bit,TCP 对传输的数据包进行校验,如果校验和不一致,会丢弃。

Urgent Point(紧急指针)

  • 非常用

Options(选项)

  • TCP 传输时,额外的选项。后面单独介绍。