传输层服务的基本理论和基本机制
- 多路复用/分用
- 可靠数据传输机制
- 流量控制机制
- 拥塞控制机制
掌握Internet的传输层协议
- UDP:无连接传输服务
- TCP:面向连接的传输服务
- TCP拥塞控制
一、传输层服务和协议
传输层协议为运行不同Host上的进程提供了一种逻辑通信机制
端系统运行传输层协议
- 发送方:将应用递交的消息分成一个或多个的Segment,并向下传给网络层
- 接收方:将接收到的Segment组装成消息,并向上交给应用层
传输层可以为应用提供多种协议
- Internet上的TCP
- Internet上的UDP
传输层 V.s. 网络层
网络层:提供主机之间的逻辑通信机制
传输层:提供应用进程之间的逻辑通信机制
- 位于网络层之上
- 依赖于网络层服务
- 对网络层服务进行(可能的)增强
二、Internet传输层协议
可靠、按序的交付服务(TCP)
- 拥塞控制
- 流量控制
- 连接建立
不可靠的交付服务(UDP)
- 基于“尽力而为(Best-effort)”的网络层,没有做(可靠性方面的)扩展
两种服务均不保证:延迟、带宽
三、多路复用/分用
原因:如果某层的一个协议对应直接上层的多个协议/实体,则需要复用/分用。
- 接收端进行多路分用:传输层依据头部信息将收到的segment交给正确的socket,即不同的进程。
- 发送端进行多路复用:从多个Socket接收数据,为每块数据封装上头部信息,生成Segment,交给网络层
分用的基本原理
主机接收到IP数据报(datagram)
- 每个数据报携带源IP地址、目的IP地址
- 每个数据报携带一个传输层的段(Segment)
- 每个段携带源端口号和目的端口号
主机收到Segment之后,传输层协议提取IP地址和端口号信息,将Segment导向相应的Socket
- TCP做更多处理
无连接分用
-
利用端口号创建Socket
-
UDP的Socket用二元组标识
- 目的IP地址,目的端口号
-
主机收到UDP段后
-
检查段中的目的端口号
-
将UDP段导向绑定在该端口号的Socket
-
-
来自不同源IP地址和/或源端口号的IP数据包被导向同一个Socket
面向连接的分用
- TCP的socket用四元组标识
- 源IP地址
- 源端口号
- 目的IP地址
- 目的端口号
- 接收端利用所有的四个值将segment导向合适的socket
- 服务器可能同时支持多个TCP socket
- 每个socket用自己的四元组标识
- Web服务器为每个客户端开不同的socket
四、UDP:User Datagram Protocol
基于Internet IP协议
- 复用/分用
- 简单的错误校验
Best effort 服务,UDP段可能
- 丢失
- 非按序到达
无连接
- UDP发送方和接收方之间不需要握手
- 每个UDP段的处理独立于其他段
UDP为什么存在?
- 无需建立连接(减少延迟)
- 实现简单:无需维护连接状态
- 头部开销少
- 没有拥塞控制:应用可更好的控制发送时间和速率
UDP用途
常用于流媒体应用:容忍丢失,速率敏感
还用于:DNS,SNMP
如何在UDP上实现可靠数据传输
- 在应用层增加可靠性机制
- 应用特定的错误恢复机制
UDP校验和(checksum)
目的:检测UDP段在传输中是否发生错误(如位翻转)
发送方
- 将段的内容视为16-bit整数
- 校验和计算:计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和
- 发送方将校验和放入校验和字段
接收方
- 计算所收到段的校验和
- 将其预校验和字段进行对比
- 不相等:检测出错误
- 相等:没有检测出错误(但可能有错误)