1 传输层
- 主要内容
- 理解传输层服务的基本理论和基本机制
- 多路复用/分用;
- 可靠数据传输机制;
- 流量控制机制;
- 拥塞控制机制;
- 掌握Internet的传输层协议
- UDP:无连接传输服务;
- TCP:面向连接的传输服务;
- TCP拥塞控制;
1.1 传输层服务
1.1.1 传输层服务概述
- 传输层协议为运行在不同Host上的进程提供了一种逻辑通信机制;
- 1、传输层 vs 网络层
- 传输层是应用进程之间,网络层是主机之间;
- 2、Internet传输层协议
1.1.2 多路复用和多路分用
- 传输层是应用进程之间的,一个主机会有多个进程;因此会需要多路复用和多路分用;
- 1、分用如何工作?
- 传输层根据端口号决定发送到哪一个socket
- 网络层不关心端口号信息;
- 2、无连接分用(UDP)
- UDP的socket使用二元组标识;此处有错误,应该是源端口号,目的端口号;
- SP是源端口号;DP是目的端口号;
- 3、面向连接的分用(TCP)
- 针对于
P2-P6
和P3-P5
,它们仅仅只有源端口号不同;
- 4、面向连接的分用:多线程Web服务器
- 服务器用一个进程创建多个线程;P4创建了3个线程;
1.2 UDP协议
- UDP:User Datagram Protocol [RFC 768],用户数据报协议
- 右侧就是多路复用的(源端口号,目的端口号),length是UDP段的长度(包含头部);
- checksum是UDP校验和(checksum);
- UDP校验和(checksum)
- 检测错误的能力有限;
- 校验和计算示例
1.3 可靠数据传输协议
1.3.1 可靠数据传输概述
- 1、可靠数据传输原理
- 2、可靠数据传输协议基本结构:接口
- rdt_send()和deliver_data()都是单向的;
- udt_send()和rdt_rcv()都是双向的,跟不可靠信道数据交互时,双向传送控制信息;
- 3、可靠数据传输协议
- 数据传输是单向的,控制信息是双向的;
1.3.2 Rdt 1.0:可靠信道上的数据传输
1.3.3 Rdt 2.0:产生位错误的信道
- 2.0增加的部分
- 1、校验和;
- 2、接收方返回发送方的控制确认消息ACK\NAK;
- 3、重传机制;
-
Rdt 2.0: 无错误场景
-
Rdt 2.0:有错误场景
1.3.4 Rdt 2.1 和 Rdt2.2:ACK错误
- 1、Rdt 2.0 缺陷
- NAK也可能会坏掉;
- 简单的重传,会产生重复分组;
- 1、Rdt 2.1 : 发送方,应对ACK/NAK破坏
- 2、Rdt 2.1 :接收方,应对ACK/NAK破坏
- 3、Rdt 2.1 vs Rdt 2.0
- 两个序列号足够,因为是停-等协议;
- 4、Rdt 2.2 :无NAK消息协议
- 5、Rdt 2.2 状态机(判断)
- Rdt2.0的ACK错误之后,无法处理,2.1和2.2就加入一个重要的序列号机制;
1.3.5 Rdt 3.0:丢失分组
- 1、Rdt 3.0 : 发送方FSM
- 2、Rdt 3.0 示例(1)
- 3、Rdt 3.0 示例(2)
- 设置这个时间
timeout
是关键;
- 4、Rdt 3.0 性能分析
- Rdt3.0能够正确工作,但性能很差;停-等协议;
- 网络协议与硬件配置要协同,软硬件协同设计,才能更好利用;
- 5、Rdt 3.0 :停等协议—限制性能
1.3.6 流水线机制与滑动窗口协议
- 以上停等协议造成了效率的降低,引入流水线机制;提升资源利用率;
- 1、流水线协议
- 序列号扩充,缓存扩充
- 2、滑动窗口协议(GBN,SR)
- 管理已经发出,但还没有确认的分组;
1.3.7 滑动窗口协议-GBN协议
- Go-Back-N(GBN)协议:发送方
- 1、绿色是已经发送并且成功确认的分组;
- 2、黄色是已经发送还没有确认的分组;
- 3、蓝色是可以使用用来发送的序列号;
- 4、不可以使用的序列号;
- GBN是一种累积确认的机制;
- 因为发生超时事件后,会重传所有序列号大于等于n的,因此存在资源浪费的情况;
- 1、GBN:发送方扩展FSM
- 所谓的窗口滑动,其实就是base变量+1;
- 2、GBN:接收方扩展FSM
- 接收方会维护一个变量,代表当前期望收到的序列号expectseqnum,并没有缓存;
- 3、GBN示例
- 2发生timeout事件后,会重新发送2之后的序列;
- 4、练习题–看接收确定的最大序列号3
1.3.8 滑动窗口协议-SR协议
- Selective Repeat协议
- GBN累积确认(确认以最后一个序列号为准),会造成很多重复的重传分组;
- SR单独确认,可以接收乱序到达的分组;
- 相比于SBN,SR多了一个接收方的窗口;
- 1、Selective Repeat:发送方/接收方窗口
- 下方为接收滑动窗口,
- 灰色表示目前期望收到的但还没有收到的序列分组;
- 红色表示已经到达,并返回ack的分组;
- 蓝色表示可以接收的窗口内的序列分组;
- 发送方与接受方的窗口并不是同步的;
- 2、SR协议
** 3、SR协议示例**
- 4、SR协议:困境
- 注意,右侧两种情况,可以成功区分吗?
- 因为序列号只有0123个状态,两次0状态不好区分;
- 解决方案:就是空间大小与窗口尺寸满足一定要求;
1.3.9 可靠数据传输原理与协议回顾
1.4 TCP协议
1.4.1 TCP概述
- 1、TCP段结构
- 2、TCP:序列号和ACK
- 序列号指的是segment中第一个字节的编号;
- 假如有1K的数据,拆分成两个segment,那么第二个segment的序号号通常是501或者500,是segment中第一个字节的编号;并不是segment个数的编号;
- ACKs:是希望接收的下一个字节的序列号;
- 累积确认像SBN协议;
- 右图中,段的序列号是42,期望收到的字节序列号为ACK=79;
1.4.2 TCP可靠数据传输
- 1、TCP RTT和超时
- 考虑历史信息与当前信息,动态更新RTT的时间设置阈值;
- 变化大的话,安全边界也设置增大;
- 2、TCP发送方事件
- 只会重传没有确认的那个;
- 3、TCP发送端程序
- 4、TCP重传示例
- 累积确认机制,第二次会返回ACK=120;
- 主机A虽然没有收到ACK=100,但是收到了ACK=120就会更新为120;
- 5、快速重传机制
- 利用发送方收到3个同一数据的ACK来开启重传机制
- 6、快速重传算法
1.4.3 TCP流量控制
- 由接收方通过头部字段告诉发送方,目前可用的buffer大小来限制发送;
- 即使是0,也可以发送很小的信息,以便响应信息携带信息告知;
1.4.4 TCP连接管理
- 三次握手:
- 1、发送方首先第一次请求,SYN标志位置一,发送初始自己的初始序列号;
- 2、接收方返回一个SYNACK,返回自己的初始序列号;
- 3、发送方(客户端)收到SYNACK,同时SYN不再置一,回复一个ACK;表示客户端收到了服务端允许建立连接的信息,可以包含信息;
- 1、TCP连接管理:建立
- 2、TCP连接管理:关闭
- 当服务器收到客户端的ACK才会真正关闭连接;
- 3、TCP连接管理
1.4.5 TCP拥塞控制原理
-
1、拥塞控制
-
2、拥塞的成因和代价:场景1,无限buffer
- 假设路由器有无线缓存,都可以逐渐发送,不会发生丢包和重传;
- 吞吐量与时延跟随输入速率的曲线图;
- 时延代价大;
3、拥塞的成因和代价:场景2,有限buffer
- 由于丢失和重传,造成了资源的浪费;
- 4、拥塞的成因和代价:场景3
- 4个路由器,有限缓存;
- A向C发送,要占用上右路由器,D向B发送,红色和蓝色线会发送竞争;拥塞后会发送丢包;加入R2拥塞丢失造成重传,那么上游的路由资源都被浪费了;
- 当更大,说明网络已经瘫痪了,都在发送数据,但是几乎没有被接收到;
- 5、拥塞控制的方法(两种)
- 重点:管制发送方的发送速度;
- 6、ATM ABR拥塞控制
- 信息经过的一路的路由转发,期间的路由器都可以改变状态,接收方就可以通过这个信息知道拥塞情况;
- 这个拥塞控制由接收方返回给发送方的;
- 还有一种是中间网络设备直接向发送方发送控制信息分组的;当前讨论是ATM ABR;
- 7、ATM ABR拥塞控制
- 红色就是资源管理的控制信息;
- 接收方返回红色块给发送方;
1.4.6 TCP拥塞控制
- 1、TCP拥塞控制的基本原理
- 控制发送方的发送速率
- 发生拥塞,就将发送窗口长度变小,来减小发送速率;
- 通过timeout或者3个重复ACK来判断感知网络拥塞;
- 2、加性增—乘性减:AIMD
- 线性加(一个一个的加),乘性减(直接减半,快速减);
- 3、TCP慢启动:SS
- 4、Threshold变量
- 线性增长与指数型增长的区别,以及何时使用切换?
- 以Threshold为界限,指数增长到Threshold后开始线性增长;
- Threshold当发生拥塞,阈值减少为原来的一般;蓝色窗口直接降为1;
- 改进:蓝色窗口也减少为一半,进入线性增长阶段;
- 5、Loss事件的处理
- 不同的事件处理不同
- timeout意味着更加严重的拥塞;直接减为1;
- 向上图减少一半,说明是3个ACK的Loss事件;
- 6、TCP拥塞控制算法
- 7、例题
1.4.7 TCP性能分析
- 1、TCP throughput:吞吐率
- 2、未来的TCP
- 目前是否适用;
- 3、TCP的公平性
- 横轴是连接1的,纵轴是连接2的,右上45度是公平的,
- 最终会收敛到45度公平性;
- 与UDP一起,就会差,不公平,UDP会一直发,TCP会控制;