#网络通信 #传输层 #TCP协议
前言 本篇总结起点为文档中「网络抓包工具」章节,记为第 1 点,后续知识点按文档出现顺序依次编号,梳理传输层 UDP、TCP 全部核心内容,涵盖工具实操、协议原理、编程接口、报文格式、核心机制,可用于课程复习、实验预习。
1、网络抓包工具 wireshark
- Linux 安装命令:
sudo apt‑get install wireshark - 启动命令:
sudo wireshark - 抓包操作步骤:选择网卡;设置过滤条件(示例:
udp.port == 50000);运行网络通信程序抓取数据包,用于分析网络问题。
2、UDP 协议(传输层)
2.1 UDP 协议特点
- 无连接;
- 面向数据报;
- 尽最大努力交付,不可靠,存在丢包、乱序现象;
- 内部机制简单,实时性好、传输效率高;典型应用场景:直播、游戏画面传输。
2.2 两种软件架构模型
- B/S(浏览器 / 服务器):使用通用浏览器作为客户端;只需要开发服务端;资源主要保存在服务端。
- C/S(客户端 / 服务端):专用客户端程序;客户端、服务端都需要开发;两端均可保存业务资源。
2.3 UDP 通信 API 流程
- 服务端流程:
socket()→bind()→recvfrom()→sendto()→close() - 客户端流程:
socket()→sendto()→recvfrom()→close()
核心函数说明
socket():创建套接字;参数AF_INET代表 IPv4 协议族;SOCK_DGRAM指定 UDP;返回套接字文件描述符。sendto():发送 UDP 数据报,需要传入对端 IP 端口地址结构体。recvfrom():接收 UDP 报文,可以获取发送方的地址信息。bind():服务端绑定本机 IP 地址与端口号。- 地址结构体
struct sockaddr_in:sin_family协议族,sin_port端口(必须网络字节序),sin_addr存储 IP。
2.4 主机字节序与网络字节序转换函数
htons:short 类型,主机字节序转网络字节序htonl:long 类型,主机字节序转网络字节序ntohs:short 类型,网络字节序转主机字节序ntohl:long 类型,网络字节序转主机字节序inet_addr():点分十进制字符串 IP 转换为 32 位二进制 IPinet_ntoa():IP 结构体二进制转换成点分十进制字符串 IP
2.5 UDP 报文头部结构
源端口 (2 字节)|目的端口 (2 字节)|数据包长度 (2 字节)|校验和 (2 字节)
3、TCP 协议(传输层)
3.1 TCP 协议特点
- 面向连接;
- 面向字节流;
- 可靠传输;依靠三次握手、四次挥手、应答确认、超时重传等机制保障数据可靠;
- 内部机制复杂,实时性、传输效率弱于 UDP;典型场景:HTTPS、FTP、MQTT。
3.2 三次握手(建立连接,客户端发起)
- 客户端发送
SYN报文,请求建立连接; - 服务端回复
SYN+ACK报文,同意建立连接; - 客户端回复
ACK报文,三次握手完成,连接建立。
3.3 数据传输
报文标志位PSH:表示报文携带上层应用数据;接收方收到数据后回复ACK完成确认。
3.4 四次挥手(断开连接)
- 通信一方发送
FIN报文,表示本方不再发送数据; - 对方回复
ACK确认收到关闭请求; - 对方发送
FIN报文,表示对方也不再发送数据; - 本方回复
ACK,四次挥手完成,连接释放。
3.5 TCP 编程流程
服务端:
socket()→bind()→listen()→accept()→recv()/send()→close()客户端:socket()→connect()→send()/recv()→close()
API 说明
connect():客户端调用,向服务端发起 TCP 连接请求。listen():开启监听;参数 backlog 表示未完成三次握手队列最大数量。accept():取出完成三次握手的客户端连接,返回通信套接字;原有 socket 继续充当监听套接字。recv():接收 TCP 数据;返回值 > 0 读到数据;返回 0 代表对方关闭连接;返回‑1 代表出错。
3.6 TCP 报文头部
固定头部 20 字节:源端口、目的端口、序列号、确认号;数据偏移;标志位;窗口;校验和;紧急指针;可选字段。
头部标志位
SYN:请求建立连接ACK:应答确认PSH:携带应用层数据FIN:请求断开连接URG:紧急数据RST:重置连接
3.7 TCP 可靠传输核心机制
- 应答确认机制:每个发送报文分配序列号;接收方返回确认号 = 收到最后一个字节编号 +1。
- 超时重传机制:发送报文后等待 ACK 应答;超时未收到应答,自动重传该报文。
- 滑动窗口机制:设置缓冲区,区分已发送已确认、已发送未确认、待发送数据,提升吞吐量。
- 流量控制机制:依靠 ACK 报文中窗口值动态调整发送速率,防止接收方缓冲区溢出。
- 捎带应答机制:ACK 应答可以跟随业务数据报文一起发送。
- 延迟应答机制:可以合并多条应答,减少报文数量。
小结
- Wireshark 抓包工具用于网络数据包观测调试,通过过滤条件可以只抓取指定端口报文。
- UDP 无连接面向数据报,实时高效但不可靠;TCP 面向连接面向字节流,依靠握手挥手、确认重传等机制实现可靠传输。
- UDP 使用
sendto/recvfrom收发;TCP 区分监听套接字和通信套接字,使用send/recv收发;网络编程必须注意主机字节序与网络字节序转换。 - TCP 的三次握手负责建立连接,四次挥手负责断开连接;多种内部机制共同保障 TCP 可靠传输。