你在家里用手机连Wi-Fi看视频,或者在公司通过远程桌面操作内网电脑,这些操作背后都离不开网络通信。而数据能准确送达目标设备,传输层起了关键作用。说到传输层,很多人听说过TCP和UDP,但你有没有想过,它们的头部到底装了啥?
传输层头部是干啥的
你可以把网络传输想象成寄快递。IP层负责写清楚发件人和收件人的地址(IP地址),而传输层则决定这个包裹是普通包裹(UDP)还是保价签收件(TCP)。它加上的头部信息,就是贴在包裹上的那张单子,告诉对方怎么处理这份数据。
TCP头部包含的信息
TCP是面向连接的协议,讲究可靠传输。它的头部比UDP复杂,通常有20字节(不含选项):
- 源端口号:发送方使用的端口,比如你的浏览器可能用了54321
- 目的端口号:接收方的服务端口,比如HTTP服务默认是80
- 序列号:标识本次传输的数据序号,确保对方能按顺序重组
- 确认号:告诉对方“我已收到你第X之前的所有数据”
- 头部长度:说明TCP头有多少个32位字,因为可能带选项
- 标志位:像SYN、ACK、FIN这些,用来建立或断开连接
- 窗口大小:用于流量控制,告诉对方还能接收多少数据
- 校验和:检查数据是否出错
- 紧急指针:如果有紧急数据,指出从哪开始算
- 选项字段:可选扩展,比如最大段大小MSS
比如你在用远程桌面连接家里的电脑,建立连接时会发SYN包,这时候序列号就派上用场了;传文件过程中,确认号和窗口大小帮你稳住速度不丢包。
UDP头部有哪些内容
UDP走的是极简风,头部只有8字节,适合对实时性要求高的场景,比如视频通话或在线游戏:
- 源端口号:可选,有些情况下可以省略
- 目的端口号:必须的,不然不知道发给谁
- 长度:整个UDP数据报的长度,包括头和数据
- 校验和:也是用来检错的,但IPv4下可选,IPv6强制启用
你看直播的时候卡了一下,可能就是因为UDP不重传丢包,但它快啊,总不能为了一个画面卡顿让声音延迟半分钟吧?
实际抓包长啥样
如果你用Wireshark抓个包,看到的一条TCP请求,展开后能看到类似这样的结构:
源端口: 54321
目的端口: 80
序列号: 1000
确认号: 0
数据偏移: 5 (即20字节头)
标志位: SYN
窗口大小: 64240
校验和: 0xabcd
紧急指针: 0
而UDP的就简单多了:
源端口: 12345
目的端口: 53
长度: 28
校验和: 0xef01
这些字段不是随便写的,操作系统内核在网络协议栈里自动填充。你打开网页、上传文件、远程控制另一台机器,全靠这些头部信息精准协作。
做内网穿透时,工具比如frp或ZeroTier,其实就是在公网中搭桥,让外部请求能正确命中你内网服务的IP+端口组合。这时候如果用TCP,就得处理好三次握手;用UDP,则要考虑如何应对可能的丢包。理解传输层头部,才能更好调优穿透方案。