TCP协议包头入门

TCP协议数据包头部结构

这里写图片描述

下面我通过一抓取一个redis请求的数据包来说明:

TCP固定头示意:

16进制10进制头部信息备注
0xcd8e5262216位源端口号 
0x18ed637916位目的端口号 
0x3210 6019 32位序号 
0x0000 0000 32位确认号这里因为是syn包,所以为0
0xb114位头部长度(32bit) 
0x002 syn

① URG: 表示紧急指针是否有效

② ACK: 表示确认号是否有效(携带ACK标志的TCP报文段称为确认报文段)

③ PSH: 提示接收端应用程序要立即从TCP接收缓冲区读走数据,以腾出空间接收后续的数据。(若应用程序不读走数据,数据会一直留在TCP模块的接收缓冲区)  

④ RST: 表示要求对方重新建立连接(携带RST标志的TCP报文段为复位报文段)  

⑤ SYN: 表示请求建立一个连接(携带SYN标志的TCP报文段称为同步报文段)  

⑥ FIN: 表示通知对方要关闭连接(携带FIN标志的TCP报文段为结束报文段)

0xffff 16位窗口大小 
0xfe34 16位校验和 
0x0000 16位紧急指针因为SYN包,所以紧急指针为0

可选包头结构及示意:

可选项类型表

16进制10进制TCP头部选项备注
0x0204 设置kind值和最大segment长度 
0x3fd816344设置最大报文段长度 
0x01 空操作 
0x0303 设置kind值和窗口扩大因子

kind=3,窗口扩大因子选项,TCP连接初始化时,通信双发使用该协议来协商接受通告窗口的扩大因子。在TCP的头部中,接受通告窗口大小是

使用16位来表示的,故最大为65535字节,但实际上TCP模块允许的接受通告大小远不止这个数。窗口扩大因子解决了这个问题。

假设TCP头部中的接受通告窗口大小是N,窗口扩大因子是M,那么实际的接受通告窗口大小为N左移M位。

0x066扩大因子为6 
0x0101 空操作 
0x080a 时间戳选项kind和长度 
0x69ad 9cc61772985542时间戳 
0x0000 00000回显应答时间戳 
0x0402 允许SACK操作

kind=4,选择性确认。为了提高TCP丢包重传的效率,SACK是用来只传输丢掉的数据包,而不是传输从丢弃包开始后的所有包。这个选项

用来表示是否支持SACK技术。

0x0000 空操作,补位 
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值