概述
传输层的基本理论和基本机制
- 复用/分用
- 可靠数据传输机制
- 流量控制机制
- 拥塞控制机制
掌握Internet的传输层协议: UDP, TCP, TCP拥塞控制
传输层协议为运行在不同host上的进程提供了一种逻辑通信机制
网络层提供主机之间的逻辑通信机制, 传输层提供应用进程之间的逻辑通信机制, 位于网络层之上, 依赖于网络层服务, 对网络层服务进行增强
TCP: 可靠, 按序的交付服务, 拥塞控制, 流量控制, 连接建立
UDP: 不可靠的交付服务, 基于尽力而为的网络层, 没有做可靠性方面的扩展
两种服务均不保证 延迟和带宽
多路复用和多路分用
如果某层的一个协议对应直接上层的多个协议/实体, 则需要复用/分用
接收端进行多路分用, 传输层依据头部信息将收到的Segment交给正确的socket, 即不同的进程
发送端进行多路复用, 从多个socket接受数据, 为每块数据封装上头部信息, 生成segment交给网络层
分用: 主机接收到ip数据报(datagram), 每个数据报携带源ip地址, 目的ip地址, 携带一个传输层的段(Segment), 每个段携带源端口号和目的端口号, 主机收到segment之后, 传输层协议提取ip地址和端口号信息, 将segment导向相应的socket
UDP的无连接分用, 利用端口号创建Socket, UDP的socket用二元组标识(目的IP地址, 目的端口号), 主机收到UDP段后, 检查段中的目的端口号, 将UDP段导向绑定在该端口号的socket, 来自不同源ip地址和源端口号的ip数据报被导向同一个socket
TCP的面向连接的分用, TCP的socket用四元组标识, (源ip地址, 源端口号, 目的ip地址, 目的端口号), 接收端利用所有的四个值, 将segment导向合适的socket, 服务器可能同时支持多个tcp socket 每个socket用自己的四元组标识, web服务器为每个客户端开不同的socket
UDP(User Datagram Protocol)
- 基于internet IP协议, 复用/分用, 简单的错误校验
- best effort服务, UDP段可能丢失或非按序到达
- 无连接, UDP发送方和接收方之间不需要握手, 每个UDP段的处理独立于其他段
优点: 无需建立连接, 减少延迟, 实现简单, 无需维护连接状态, 头部开销少, 没有拥塞控制应用可更好的控制发送时间和速率
常用于流媒体应用, 容忍丢失, 速率敏感, 还用于DNS, SNMP
想在UDP上实现可靠数据传输, 需要在应用层增加可靠性机制, 或应用特定的错误恢复机制
UDP的校验和(checksum), 检测UDP段在传输中是否发生错误
可靠数据传输的基本原理
什么是可靠: 不错, 不丢, 不乱
可靠数据传输协议(rdt), 对应用层, 传输层, 链路层都很重要, 网络top10问题, 信道的不可靠特性决定了rdt的复杂性
渐进的设计可靠数据传输协议的发送方和接收方, 只考虑单向数据传输, 但控制信息双向流动, 利用状态机(Finite State Machine, FSM)刻画传输协议
Rdt1.0, 可靠信道上的可靠数据传输
底层信道完全可靠, 不会发生错误, 不会丢弃分组
发送方和接收方的FSM独立, 一个发送, 一个接收, 没有其他交集
Rdt2.0, 产生位错误的信道
底层信道可能翻转分组中的位, 利用校验和检测位错误
恢复机制
确认机制(Acknowledgements, ACK), 接收方显式的告知发送方分组已正确接收
NAK, 显式的告知分组有错误, 发送方收到NAK后重传分组
基于这种重传机制的rdt协议称为ARQ协议(Automatic Repeat reQuest)
该版本中引入的新机制, 差错检测, 接收方反馈控制消息, ACK/NAK, 重传
FSM使用停-等协议
Rdt2.1
上一个版本有缺陷, 如果ACK/NAK消息发生错误, 会死循环
所以, 为ACK/NAK增加校验和, 检错并纠错, 如果被破坏, 发送方重传, 发送方给每个分组添加序列号, 解决重复分组, 接收方丢弃重复分组