TCP头部格式
字段名称 | 长度(比特) | 含义 | |
TCP头部(20字节~) | 发送方端口号 | 16 | 发送网络包的程序的端口号 |
接收方端口号 | 16 | 网络包的接收方程序的端口号 | |
序号(发送数据的顺序编号) | 32 | 发送方告知接收方该网络包发送的数据相当于所有发送数据的第几个字节 | |
ACK号(接收数据的顺序编号) | 32 | 接收方告知发送方接收方已经收到了所有数据的第几个字节。其中ACK是acknowledge的缩写 | |
数据偏移量 | 4 | 表示数据部分的起始位置,也可以认为表示头部的长度 | |
保留 | 6 | 该字段为保留,现在未使用 | |
控制位 | 6 | 该字段中的每个比特分别表示以下通信控制含义。 URG:表示紧急指针字段有效 ACK:表示接收数据序号字段有效,一般表示数据已被接收方接收 PSH:表示通过flush操作发送的数据 RST:强制断开连接,用于异常中断的情况 SYN:发送方和接收方相互确认序号,表示连接操作 FIN:表示断开连接 | |
窗口 | 16 | 接收方告知发送方窗口大小(即无需等待确认可一起发送的数据量) | |
校验和 | 16 | 用来检查是否出现错误 | |
紧急指针 | 16 | 表示应紧急处理的数据位置 | |
可选字段 | 可变长度 | 除了上面的固定头部字段之外,还可以添加可选字段,但除了连接操作之外,很少使用可选字段 |
IP头部格式
字段名称 | 长度(比特) | 含义 | |
IP头部(20字节~) | 版本号 | 4 | IP协议版本号,目前使用的版本是4 |
头部长度(IHL) | 4 | IP头部的长度。可选字段可导致头部长度变化,因此这里需要指定头部的长度 | |
服务类型(ToS) | 8 | 表示包传输优先级。 | |
总长度 | 16 | 表示IP消息的总长度 | |
ID号 | 16 | 用于识别包的编号,一般为包的序列号。如果一个包被IP分片,则所有分片都拥有相同的ID | |
标志(Flag) | 3 | 该字段有3个比特,其中2个比特有效,分别代表是否允许分片,以及当前包是否为分片包 | |
分片偏移量 | 13 | 表示当前包的内容为整个IP信息的第几个字节开始的内容 | |
生存时间(TTL) | 8 | 表示包的生存时间,这是为了避免网络出现回环时一个包永远在网络中打转。每经过一个路由器,这个值就会减1,减到0时这个包就会被丢弃 | |
协议号 | 8 | 协议号表示协议的类型(以下均为十六机制)。 TCP:06 UDP:11 ICMP:01 | |
头部校验和 | 16 | 用于检查错误,现在已不使用 | |
发送方IP地址 | 32 | 网络包发送方的IP地址 | |
接收方IP地址 | 32 | 网络包接收方的IP地址 | |
可选字段 | 可变长度 | 除了上面的固定头部字段之外,还可以添加可选字段,但除了连接操作之外,很少使用可选字段 |
MAC头部的字段
字段名称 | 长度(比特) | 含义 | |
MAC头部(14字节) | 接收方MAC地址 | 48 | 网络包接收方的MAC地址,在局域网中使用这一地址来传输网络包 |
发送方MAC地址 | 48 | 网络包发送方的MAC地址,接收方通过它来判断是谁发送了这个包 | |
以太类型 | 16 | 使用的协议类型。以下是一些常见的类型,一般在TCP/IP通信中只使用0800和0806这两种。 0000-05DC:IEEE 802.3 0800 :IP协议 0806 :ARP协议 86DD :IPv6 |
UDP头部中的控制信息
字段名称 | 长度(比特) | 含义 | |
UDP头部(8字节) | 发送方端口号 | 16 | 网络包发送方的端口号 |
接收方端口号 | 16 | 网络包接收方的端口号 | |
数据长度 | 16 | UDP头部后面数据的长度 | |
校验和 | 16 | 用于校验错误 |