TCP 协议头部

Source Port(源端口)/Destination Port(目标端口)
-
16bit,所以端口数量为 ,范围为 。
-
发送端的端口号,这个也是本地的端口号。
-
接收端的端口号,这个也是远程端口号。
-
在 TCP 协议层,只有端口号没有 IP 地址。
TCP 四元组(源 IP、源端口、目标 IP、目标端口)可唯一确定网络中每个 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 number即ack号,意思是:你可以从ack number后面开始传输数据了。 -
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 传输时,额外的选项。后面单独介绍。