传输层基本概念:
传输层负责端与端之间的数据传,主要有两大知识点:TCP和UDP
五元组
在TCP/IP协议中, 用 “源IP”, “源端口号”, “目的IP”, “目的端口号”, “协议号” 这样一个五元组来标识一个通信(可以通过netstat -n查看);
端口号范围
0 - 1023: 知名端⼝口号, HTTP, FTP, SSH等这些广为使⽤用的应⽤用层协议, 他们的端⼝口号都是固定的
1024 - 65535: 操作系统动态分配的端⼝口号. 客户端程序的端口号, 就是由操作系统从这个范围分配的。
UDP(无连接不可靠面向数据报)
UDP协议格式
源端口、目的端口、数据报长度、校验和
检验和:二进制反码求和
最大长度
UDP数据包最大长度64K(包含报头),如果用户发送的长度大于64K-8就会报错,因为UDP在传输层不会自动进行数据分段,这就意味着如果传输的数据大于64K,就需要用户在应用层就进行数据的分段,但是因为传输层UDP并不保证数据的有序到达,就需要用户在应用层进行包序的管理
UDP缓冲区
UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;
UDP具有接收缓冲区,但是这个接收缓冲区不能保证收到的UDP报的顺序和发送UDP报的顺序一致; 如果缓冲区满了, 再到达的UDP数据就会被丢弃;
UDP粘包问题
面向数据报不会产生粘包问题,因为UDP数据包中定义了数据包的长度
基于UDP的应用层协议
- NFS: 网络文件系统
- TFTP: 简单文件传输协议
- DHCP: 动态主机配置协议
- BOOTP: 启动协议(用于无盘设备启动)
- DNS:域名解析协议