TCP/IP包头结构

TCP(Transmission Control Protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议

TCP/IP包头结构

文章插图
   端口号取值范围0~6535 因为十六位二进制构成 2^16 第一行 四层协议必须干的活 传输层 把端口号封装到数据里 第二行 序号: 保证数据的顺序  第三行 确认序号:去要下一个序号同时代表我已经收到了 第四行 首部长度 数据前面的称之为头部 6位标记位 每一个标记位占一位 URG紧急标记位 ACK确认标记位 PSH若置为1这一数据段不在缓存区里等待 , 直接优先处理 RST断开连接标记位 SYN请求标记位 置一建立连接的过程 FIN结束标记位 置一释放连接的过程 第五行 校验和 , 目的是保证数据完整性   二层使用的循环冗余算法 CRC算法 四层使用的是反码相加法 强度较强 四层伪头部校验 --- 12个字节的内容 , 32源IP , 32目标IP , 8位保留 , 8位协议 , 16位总长度     注意:不要将确认序号Ack与标志位中的ACK搞混了 。确认方Ack=发起方Seq+1 , 两端配对 TCP报文各段详细说明:
  • 源端口和目的端口:各占 2 字节.端口是传输层与应用层的服务接口.传输层的复用和分用功能都要通过端口才能实现
  • 序号:占 4 字节.TCP 连接中传送的数据流中的每一个字节都编上一个序号.序号字段的值则指的是本报文段所发送的数据的第一个字节的序号
  • 确认号:占 4 字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
  • 数据偏移/首部长度:占 4 位,它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远.“数据偏移”的单位是 32 位字(以 4 字节为计算单位)
  • 保留:占 6 位,保留为今后使用,但目前应置为 0
  • 紧急URG:当 URG=1 时,表明紧急指针字段有效.它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)
  • 确认ACK:只有当 ACK=1 时确认号字段才有效.当 ACK=0 时,确认号无效
  • PSH(PuSH):接收 TCP 收到 PSH = 1 的报文段,就尽快地交付接收应用进程,而不再等到整个缓存都填满了后再向上交付
  • RST (ReSeT):当 RST=1 时,表明 TCP 连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接
  • 同步 SYN:同步 SYN = 1 表示这是一个连接请求或连接接受报文
  • 终止 FIN:用来释放一个连接.FIN=1 表明此报文段的发送端的数据已发送完毕,并要求释放运输连接
  • 检验和:占 2 字节.检验和字段检验的范围包括首部和数据这两部分.在计算检验和时,要在 TCP 报文段的前面加上 12 字节的伪首部
  • 紧急指针:占 16 位,指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)
  • 选项:长度可变.TCP 最初只规定了一种选项,即最大报文段长度 MSS.MSS 告诉对方 TCP:“我的缓存所能接收的报文段的数据字段的最大长度是 MSS 个字节.” [MSS(Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度.数据字段加上 TCP 首部才等于整个的 TCP 报文段]
  • 填充:这是为了使整个首部长度是 4 字节的整数倍
IP包头结构
TCP/IP包头结构

文章插图
版本号(Version):
长度4比特 。标识目前采用的IP协议的版本号 。一般的值为0100(IPv4) , 0110(IPv6)IP包头长度(Header Length):
   长度4比特 。这个字段的作用是为了描述IP包头的长度 , 因为在IP包头中有变长的可选部分 。 该部分占4个bit位 , 单位为32bit(4个字节) , 即本区域值= IP头部长度(单位为bit)/(8*4) ,  因此 , 一个IP包头的长度最长为“1111” , 即15*4=60个字节 。IP包头最小长度为20字节 。 服务类型(Type of Service):
   长度8比特 。8位 按位被如下定义 PPP DTRC0   PPP:定义包的优先级 , 取值越大数据越重要   000 普通 (Routine)   001 优先的 (Priority)


推荐阅读