第六章 传输层
6.1 概述和传输层服务
传输层位于应用层和网络层之间
6.2 套接字编程
网络应用
如何创建一个网络应用:编写一个分布式程序,使其运行在不同的端系统上,并通过网络通信
- 服务器体系结构(C/S)
- 有一台总是在线的主机,运行一个服务器程序(server),服务器主机具有永久的、众所周知的地址
- 用户终端上运行一个客户程序(client),需要时主动与服务器程序通信,请求服务
- 客户只与服务器通信,客户 之间不通信
进程如何标识自己:主机地址+主机上与该进程关联的端口号
应用编程接口:socket API
需显式地创建、使用和释放套接字,采用客户-服务器模式
- 应用可以通过socket API调用两种传输服务:
- 不可靠的数据报服务:由UDP协议实现
- 可靠的字节流服务:由TCP协议实现
应用例子:回音服务
- 客户程序从键盘读入一行字符(数据),发送给服务器
- 服务器接收数据,然后将收到的数据回送给客户
- 客户接收回送的数据,在屏幕上显示出来
6.3 传输层复用和分用
6.4 无连接传输:UDP
6.5 面向连接的传输:TCP
TCP概述
建立一条TCP连接需要确定两件事:
- 双方都同意建立连接(知晓另一方想建立连接)
- 初始化连接参数(序号,MSS等)
两次握手:
不一定总是成功:在一个不可靠的网络中,总会有一些意外发生(包传输延迟变化很大/存在重传的报文段/存在报文重排序)
失败情形:
为了防止以上情形 - PAWS (Protection Against Wrapped Sequence numbers)
- 为连接选取起始序号
- 必须避免新、旧连接上的序号产生重叠(如果重叠,会把旧连接上重传的报文段误以为是新连接上的报文段)
- 基于时钟的起始序号选取算法:
- 每个主机使用一个时钟,以二进制计数器的形式工作,每隔 ΔT 时间计数器加 1
- 新建一个连接时,以本地计数器值的最低 32 位作为起始序号
- 该方法确保连接的起始序号随时间单调增长
- T取较小的值(4微秒 )- 确保发送序号的增长速度,不会超过起始序号的增长速度
- 使用较长的字节序号(32位)- 确保序号回绕的时间远大于分组在网络中的最长寿命
TCP报文段结构
TCP可靠数据传输
TCP三次握手建立连接
- 客户TCP发送SYN报文段(SYN=1 , AC K=0)
- 给出客户选择的起始序号,不包含数据
- 服务器TCP发送SYNACK报文段(SYN=ACK=1)(服务器端分配缓存和变量)
- 给出服务器选择的起始序号
- 确认客户的起始序号
- 不包含数据
- 客户发送ACK报文段(SYN=0,ACK=1)(客户端分配缓存和变量)
- 确认服务器的起始序号
- 可能包含数据
TCP 四次挥手
TCP流量控制5.TCP连接管理
6.6 理解网络拥塞
网络拥塞:
- 起因:大量分组短时间内进入网络,超出网络的处理能力
- 表现:分组延迟增大,网络吞吐量下降,甚至降为 0
- 措施:减少分组进入网络(拥塞控制)
流量控制与拥塞控制的异同:
- 流量控制:限制发送速度,使不超过接收端的处理能力
- 拥塞控制:限制发送速度,使不超过网络的处理能力
网络拥塞的后果:
- 丢包:由路由器缓存溢出造成
- 分组延迟增大:链路接近满载造成
- 因此大量网络资源用于:
- 重传丢失的分组
- (不必要地)重传延迟过大的分组
- 转发最终被丢弃的分组
结果进入网络的负载很重,网络吞吐量却很低
拥塞控制的常用方法
- 网络辅助的拥塞控制
- 端到端拥塞控制(TCP 使用)
6.7 TCP拥塞控制
AIMD 策略
TCP 连接的吞吐量
- W = 发生丢包时的拥塞窗口
- throughput = W/RTT
- 发生丢包后调整 cwnd = W/2
- throughput = W/2RTT
- 假设 TCP 连接期间,RTT 和 W 基本不变
- throughput = 0.75W/RTT
TCP 的公平性
- 公平性目标 - 如果K条TCP连接共享某条带宽为R的瓶颈链路,每条连接应具有平均速度R/K
- 为什么 TCP 是公平的 - 考虑两条竞争的连接(各种参数相同)共享带宽为R的链路:
- 加性增:连接1和连接2按照相同的速率增大各自的拥塞窗口,得到斜率为1的直线
- 乘性减:连接1和连接2将各自的拥塞窗口减半
UDP 和 TCP
TCP futures: TCP over "long, fat pipes"
\(thoughput = \frac{1.22\times MSS}{RTT\sqrt{L}}\)
1500 byte segment, 100 ms RTT, want 10 Gbps throughput
according to the equation, L need to be very low
6.8 拥塞控制的发展
TCP-BIC 算法
- 思想:二分
CUBIC 算法
BBR
- 测量最大带宽,需要填满瓶颈链路
- 测量最低延迟,需要尽量排空
- 二者不能同时测得
BDP 检测
- START_UP - 经过三次测量发现投递率不再增长,说明到达瓶颈
- DRAIN - 指数降低发送速率
- PROBE_BW -
数据中心的性能问题
- Incast - 大量流量同时到达交换机的一个端口
解决方法:DCTCP
- 将队列长度稳定地维持在一个很低的水平
- 为什么奏效
- 较低的队列长度
- 激进的标签策略
6.9 传输层协议的发展
UDP 的问题和改进方案
- DCCP = UDP + 拥塞控制
TCP 的问题和改进方案
- 不能多路传输
- 多路 TCP - MPTCP
- 实现多子流传输
- TCP 在操作系统内核中实现
- 应用无法对 TCP 进行修改
- 握手时延大
QUIC - TCP 打补丁
- 实现在用户态中
- 连接加速:3RTT -> 1RTT
- 多流复用
- 易于部署、更新