菜鸟笔记
提升您的技术认知

tcp/ip 报文头部结构-ag真人游戏

阅读 : 4309

tcp(transmission control protocol)传输控制协议是一种面向连接的、可靠的、基于字节流的传输层协议

tcp报文格式:

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 字节的整数倍
  • 其他选项:
  1. 窗口扩大:  占 3 字节,其中有一个字节表示移位值 s.新的窗口值等于tcp 首部中的窗口位数增大到(16 s),相当于把窗口值向左移动 s 位后获得实际的窗口大小
  2. 时间戳:  占10 字节,其中最主要的字段时间戳值字段(4字节)和时间戳回送回答字段(4字节)
  3. 选择确认:  接收方收到了和前面的字节流不连续的两2字节.如果这些字节的序号都在接收窗口之内,那么接收方就先收下这些数据,但要把这些信息准确地告诉发送方,使发送方不要再重复发送这些已收到的数据

上图中有几个字段需要重点介绍下:

(1)序号:seq序号,占32位,用来标识从tcp源端向目的端发送的字节流,发起方发送数据时对此进行标记。

(2)确认序号:ack序号,占32位,只有ack标志位为1时,确认序号字段才有效,ack=seq 1。

(3)标志位:共6个,即urg、ack、psh、rst、syn、fin等,具体含义如下:

ack:确认序号有效。
fin:释放一个连接。
psh:接收方应该尽快将这个报文交给应用层。
rst:重置连接。
syn:发起一个新连接。
urg:紧急指针(urgent pointer)有效。
需要注意的是:

不要将确认序号ack与标志位中的ack搞混了。
确认方ack=发起方seq 1,两端配对。

网站地图