网络传输(TCP)

前言

我们tcpdump抓包时会看到除报文数据外,前面还有一段其他的数据,这段数据分为两部分,ip包头(一般20字节)和tcp包头(一般20字节),一般这两个头长度和为40,我们直接跳过抓取的数据前40字节及为我们需要分析的有效数据。

测试环境为centos7,以下截图使用netcat(yum -y install nc安装)进行测试,服务端192.168.11.19监听9999端口,客户端192.168.17.143。服务端执行nc -l 9999,客户端执行nc 192.168.11.19 9999,直接再终端打字回车键发送。(注:netcat工具发送的tcp包头带有套接字选项,头长度为32字节)

一、以太网帧(64-1518字节,Ethernet II,链路层协议)

1.1 字段分布

  • 目标端MAC:6字节
  • 源端MAC:6字节
  • IP协议类型:2字节(0x0800代表IPv4协议,0x86DD代表IPv6协议)
  • 数据:46-1500字节
  • CRC校验码:4字节

1.2 示例解析(tcpdump 加上-XX选项可打印帧头的14字节)

1.3 依据帧大小限制的补位和切片

因为Ethernet II协议的最小长度为64,最大长度为1518,抛开帧头和帧尾的18字节,最小传输单元为46,最大传输单元(MTU)值为1500。通常IP包头长20字节,TCP包头也为20字节,则一般的最小报文段长度为6、最大报文段长度(MSS)为1460。以IP包头20字节TCP包头20字节为例,即当我们发送一个空报文是,协议会自动补6字节空数据(如下图),而当我们发送1MB的数据时协议则会将其切片分成1024*1024/1460=719个包逐个发送。

二、IP包头(IPv4为例,20-60字节)

2.1 字段分布

  • 版本号+头长度+服务类型:2字节(共计8位,前四位代表包头长度,单位为4字节)
  • 数据总长:2字节
  • 一些信息字段:8字节
  • 源端ip:4字节
  • 目标端ip:4字节
  • 可选项:0-40字节(可变,不足四字节倍数则进行填充)

2.2 示例解析(此处118f对应ip包头结束,后面为tcp包头)

三、 tcp包头(20-60字节,不设置sockopt时就为20字节)

3.1 字段分布

  • 源端口号:2字节
  • 目标端口号:2字节
  • 数据id:4字节
  • 确认id:4字节
  • 偏移位+保留域+控制位:2字节(共计16位,前四位代表包头长度,单位为4字节)
  • 窗口大小:2字节
  • 校验码:2字节
  • 紧急指针:2字节
  • 套接字选项:0-40字节(可变,不足四字节倍数则进行填充,setsockopt时该字段将被赋值)

3.2 示例解析

3.3 常见套接字选项

  • TCP_NODELAY:立即发送选项,tcp发送小报文是会根据Nagle算法等待缓存达到最大数据长度(MSS)满后或者超时200ms时才发送,使用该选项后小报文将即可发送不等待。
  • SO_REUSEADDR:服务端重启时原来监听的端口会在TIME_WAIT状态导致不能立马监听成功,需要等待TIME_WAIT结束(2MIN)才能冲新监听成功。为保证服务端重启时效性需要设置该选项。
  • TCP_MAXSEG:最大数据长度设置,一般以太网帧最大长度为1460,设置此选项可将此长度设小以此提高网络传输效率。

四、tcpdump捕获有效数据

4.1 命令:tcpdump -i ens192 -n -X host 192.168.11.19 and port 9999 -vvv -tttt (指定一个网卡、ip 和端口号进行转包) 注:此处只使用一个-X选项打印16进制,若使用-XX打印的话还会额外打出以太网帧的一些信息。

4.2 示例(只要读取sequence信息行的length字段,表示有效的数据长度,报文尾部开始读取该长度及为我们抓取的数据)

相关推荐
blasit1 天前
笔记:Qt C++建立子线程做一个socket TCP常连接通信
c++·qt·tcp/ip
DianSan_ERP6 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
呉師傅6 天前
火狐浏览器报错配置文件缺失如何解决#操作技巧#
运维·网络·windows·电脑
gihigo19986 天前
基于TCP协议实现视频采集与通信
网络协议·tcp/ip·音视频
2501_946205526 天前
晶圆机器人双臂怎么选型?适配2-12寸晶圆的末端效应器有哪些?
服务器·网络·机器人
linux kernel6 天前
第七部分:高级IO
服务器·网络
数字护盾(和中)6 天前
BAS+ATT&CK:企业主动防御的黄金组合
服务器·网络·数据库
~远在太平洋~6 天前
Debian系统如何删除多余的kernel
linux·网络·debian
龙仔7256 天前
在麒麟V10服务器安全加固,sshd防暴力破解加固,实现“密码错误3次封IP”的需求
服务器·tcp/ip·安全
unfeeling_6 天前
Keepalived实验
linux·服务器·网络