文章目录
概要
理解传输层服务的基本理论和基本机制
- 复用 / 分用
- 可靠数据传输机制
- 流量控制机制
- 拥塞控制机制
掌握 Internet 的传输层协议
- UDP:无连接传输服务
- TCP:面向连接的传输服务
- TCP 拥塞控制
传输层服务和协议
-
传输层协议为运行在不同主机上的应用进程提供了一种逻辑通信机制。
-
端系统运行传输层协议
- 发送方:将应用递交的消息分成一个或多个 Segment,并向下传给网络层
- 接收方:将接收到的 Segment 组装成消息,并向上交给应用层。
-
传输层可以为应用提供多种协议:TCP,UDP
-
传输层与网络层
- 网络层:提供主机之间的逻辑通信机制
- 传输层:提供应用进程之间的逻辑通信机制
- 位于网络层之上
- 依赖于网络层服务
- 对网络层服务可进行增强
-
Internet 传输层协议
-
可靠、按序的交付服务(TCP)
- 拥塞控制
- 流量控制
- 连接建立
-
不可靠的交付服务(UDP)
- 基于尽力而为的网络层,没有做可靠性方面的扩展
-
两种服务均不保证
- 延迟
- 带宽
-
多路复用和多路分用(分解)
分用
-
主机收到 IP 数据报
- 每个数据报携带源 IP 地址、目的 IP 地址。
- 每个数据报携带一个传输层的段
- 每个段携带源端口号和目的端口号
-
主机收到 Segment 之后,传输层协议提取 IP 地址和端口号信息,将 Segment 导向相应的 Socket ,TCP 做更多处理
无连接分用
- 利用端口号创建Socket
DatagramSocket mySocket1 = new DatagramSocket(99111);
DatagramSocket mySocket2 = new DatagramSocket(99222);
-
UDP的 Socket 用二元组标识 (目的IP地址,目的端口号)
-
主机收到UDP段后
- 检查段中的目的端口号
- 将UDP段导向绑定在该端口号的Socket
-
来自不同源IP地址和/或源端口号的IP数据包被导向同一个Socket
源端口:SP,目的端口:DP
面向连接的分用
TCP的 Socket 用四元组标识
-
源IP地址
-
源端口号
-
目的IP地址
-
目的端口号
-
接收端利用所有的四个值将Segment导向合适的 Socket
-
服务器可能同时支持多个 TCP Socket
- 每个Socket用自己的四元组标识
-
Web 服务器为每个客户端开不同的Socket
多线程 Web 服务器:与上图不同的是,Server C 中只有一个进程 P4,其中有多个Socket分配给多个线程
UDP
-
基于 Internet IP 协议
- 复用 / 分用
- 简单的错误校验
-
“Best effort”(尽力而为)服务,UDP段可能:
- 丢失
- 非按序到达
-
无连接
- UDP 发送方和接收方之间不需要握手
- 每次UDP 段得处理独立于其他段
-
UDP为什么存在?
- 无需建立连接(减少延迟)
- 实现简单,无需维护连接状态
- 头部开销少
- 没有拥塞控制:应用可更好的控制发送时间和速率。
-
常用于流媒体应用
- 容忍丢失
- 速率敏感
-
还用于 DNS, SNMP
-
在 UDP 上实现可靠数据传输
- 在应用层增加可靠性机制
- 应用特定得错误恢复机制
-
UDP 报文段结构:
UDP 校验和
目的:检测 UDP 段在传输中是否发生错误
- 发送方:
- 将段的内容视为 16-bit 整数
- 校验和计算:计算所有整数的和,进位加在和的后面,将得到的值按位求反,得到校验和
- 发送方将校验和放入校验和字段
- 接收方:
- 计算所收到段的校验和
- 将其与校验和字段进行对比
- 不相等:检测出错误
- 相等:没有检测出错误(但可能有错误)
可靠数据传输原理
什么是可靠:不错,不丢,不乱
可靠数据传输协议
- 可靠数据传输对应用层、传输层、链路层都很重要
- 网络中最为重要的前十个问题之一
- 信道的不可靠特性决定了可靠数据传输协议的复杂性
服务模型与服务实现:
为上层实体提供的服务抽象是:数据可以通过一条可靠的信道进行传输。见左图。
实现这种服务抽象是可靠数据传输协议(rdt) 的责任。见右图。
-
可靠数据传输协议基本结构:接口
rdt_send()
:被上层应用调用,将数据交给 rdt 以发送给对方。udt_send()
:被 rdt 调用,在不可靠信道上向接收方传输数据。rdt_rcv()
:当数据包到达接收方信道时被调用。deliver_data
:被 rdt 调用,向上层应用交付数据。
-
渐进地设计可靠传输协议发送方和接收方
-
只考虑单向数据传输(数据传输是从发送端到接收端的),但控制信息双向流动。
rdt 1.0:可靠信道上的可靠数据传输
- 底层信道完全可靠
- 不会发生错误
- 不会丢弃分组
FSM:有限状态自动机
横线上方是引起变迁的事件,横线下方是事件发生时的动作。
rdt 2.0:产生位错误的信道
- 底层信道可能反转分组中的位(bit)
- 利用校验和检测位错误
- 如何从错误中恢复?
- 确认机制(ACK):接收方显式地告诉发送方分组已正确接收
- NAK:接收方显式地告知发送方分组有错误
- 发送方收到 NAK后,重传分组
- 基于这种重传机制的 rdt 协议称为 ARQ 协议
- rdt 2.0 中引入的新机制:
- 差错检测
- 接收方反馈控制消息:ACK / NAK
- 重传