传输层头部都装了啥
平时上网刷视频、打游戏、传文件,数据能在网络里跑来跑去,靠的不只是网线和Wi-Fi,背后还有协议在默默干活。传输层就是其中关键一环,它负责端到端的数据传递。而传输层头部,就像快递单,贴在每个数据包前面,告诉网络这包裹该发到哪、怎么收、有没有丢。
TCP 头部里都有啥
TCP 是最常见的传输层协议,用在需要可靠传输的场景,比如网页浏览、文件下载。它的头部信息比较全,通常有20字节基础长度,最多可以扩展到60字节。
主要字段包括:
- 源端口号(16位):发送方的程序端口,比如浏览器可能用50432
- 目的端口号(16位):接收方的端口,比如Web服务默认是80
- 序列号(32位):当前数据第一个字节的编号,用来保证顺序
- 确认号(32位):期望收到的下一个序列号,用于确认机制
- 数据偏移(4位):表示头部占多少个32位字,其实就是头部长度
- 标志位(6位):常见的有SYN、ACK、FIN、RST,控制连接建立、断开、重置
- 窗口大小(16位):接收方还能处理多少数据,用于流量控制
- 校验和(16位):检查头部和数据有没有出错
- 紧急指针(16位):只有URG置位时才有效,指向紧急数据末尾
- 选项字段(可变):比如最大段大小(MSS)、时间戳等
举个例子,你在手机上提交一个登录请求,TCP会把你的账号密码分段,每段加上头部,序列号递增。服务器收到后按序列号拼好,再通过确认号告诉你“第100字节我收到了”,没收到就会要求重传。
UDP 头部简单多了
UDP 用在对速度要求高、允许少量丢包的场景,比如在线语音、直播、游戏。它的头部只有8字节,结构简单。
字段就四个:
- 源端口号(16位):发送端的应用端口
- 目的端口号(16位):接收端的应用端口
- 长度(16位):整个UDP数据报的长度,包括头部和数据
- 校验和(16位):可选,用于检测错误
比如你玩一款射击游戏,客户端不断发送“我在A点,朝B方向开枪”这种消息,用UDP发出去。即使偶尔丢一两个包,游戏画面也不会明显卡顿,毕竟下一秒位置又变了。这种场景不需要像TCP那样反复确认,省时间。
实际排查中怎么看头部信息
遇到网络延迟、连接失败的问题,抓包分析是常用手段。用Wireshark这类工具,就能看到传输层头部的具体内容。
比如发现大量重传(Retransmission),可能是网络不稳定,也可能是接收方窗口太小导致发送方卡住。如果看到很多SYN但没有ACK,可能是防火墙拦了连接,或者目标服务根本没开。
再比如某个应用一直连不上服务器,抓包发现UDP包发出去了但没响应,那问题可能出在对方没监听对应端口,或者中间路由器丢包严重。
看懂头部字段,能帮你快速定位是连接问题、丢包问题,还是配置错误。比如确认号没更新,说明接收方没正确回包;窗口为0,说明接收方处理不过来,得查本地资源占用。
<tcp src="50432" dst="80" seq="100" ack="200" flags="ACK,PSH" window="64240"></tcp>这样的结构在抓包软件里很常见,每个字段都能对应到实际行为。端口号不对,服务就找不到;序列号乱了,数据就拼不起来;标志位错了,连接状态就混乱。