计网复习笔记【附思维导图】——【3】运输层
计网 运输层
运输层位于应用层和网络层之间。
3.1 概述和运输层服务
运输层
- 功能
- 运输层协议为运行在不同主机上的应用进程之间提供逻辑通信功能,属于端到端传输。
- 1.发送方:将应用层报文切分为为较小的块,再加上运输层首部形成报文段,然后交给网络层。
- 2.接收方:将报文段重组为应用层报文,然后上交给对应的应用程序。
- 位置:运输层位于端系统。
- 数据单元:报文段。
- 概述
- 应用层
- 因特网是一个TCP/IP网络,为应用层提供两种运输层协议,UDP(用户数据报协议)和TCP(传输控制协议)。
- 应用程序开发人员在创建套接字时必须指定选择运输层的UDP还是TCP。
- 运输层
- UDP与TCP基本任务是,将两个端系统间的IP交付服务扩展为运行在两个端系统上的进程之间的交付服务。
- UDP只提供差错检测和数据交付,不可靠。
- TCP提供可靠数据传输,保证正确、按序地交付数据;拥塞控制。
- 面向连接
- 可靠传输
- 流量控制
- 拥塞控制
- 网络层
- 因特网网络层IP协议,服务模型时尽力而为交付服务,IP协议被称为不可靠协议。
- IP协议不保证报文段交付,不保证按序交付,不保证数据完整性。
- 应用层
运输层与网络层
- 运输层
- 运输层为运行在不同主机上的进程之间提供了逻辑通信。
- 运输层协议只运行在端系统,将应用进程的报文推到网络边缘,不关心网络核心。
- 网络层
- 网络层提供了主机之间的逻辑通信。
- 网络层在网络核心中传递报文。
3.2 多路复用与多路分解
背景
- 进程有一个或多个套接字(socket),套接字相当于从网络向进程传递数据和从进程向网络传递数据的门户。
- 接收主机的运输层实际上通过中间套接字把数据交付给不同进程。
- 每个套接字有唯一的标识符。
概念
- 将网络层所提供的主机到主机交付服务扩展到为在主机上运行的应用程序所提供的进程到进程交付服务。
- 多路复用
- 上到下
- 从源主机的不同套接字收集数据块,并为每个数据块封装上首部信息生成报文段,然后将报文段传递到网络层。
- 多路分解
- 下到上
- 将运输层报文段数据交付到正确的套接字。
条件
- 1.每个套接字有唯一的标识符。
- 2.每个报文段有特殊字段指示该报文段所要交付的套接字。
- 运输层报文段首部字段<源端口16bits,目的端口16bits>
- 16bits可表示0-65535个端口号,0-1023范围为周知端口号。
无连接的多路复用和多路分解:UDP
- UDP socket 标识:<目的IP,目的端口号>
- 两个不同源IP的UDP报文,若目的IP与目的端口号相同,这两个报文段将通过相同的目的套接字定向到相同的目的进程。
面向连接的多路复用和多路分解:TCP
- TCP socket 标识:<源IP,源端口号,目的IP,目的端口号>
- 两个具有不同源IP地址或源端口号的到达的TCP报文段将被定向到两个不同的套接字,除非TCP携带了初始创建连接的请求。
- 一个进程可以对应多个socket通信。
3.3 无连接用户数据报协议UDP
UDP
-
无连接
- 在发送报文段之前,发送方和接收方的运输层实体之间没有进行握手。
- 对于每个报文段都需要单独处理。
-
不可靠
-
报文格式
-
UDP首部8字节
- 1.源端口号2字节
- 2.目的端口号2字节
- 3.长度2字节:指明了包括首部在内的UDP报文段长度。
- 4.校验和2字节:差错检测,确定比特在传输过程中是否发生了改变。
-
UDP报文段结构
-
-
UDP校验和16bits
- 校验和:差错检测,确定比特在传输过程中是否发生了改变。
- UDP校验和计算
- 发送方的UDP 对报文段中的所有16 比特字(包括首部)的和进行反码运算,求和时遇到的任何溢出都被回卷。
- 回卷:如果有溢出,比如溢出1,则把溢出的1加到求和结果。
- 接收方将受到的全部的3 个16 比特字(包括校验和)一起相加。如果分组中无差错,则显然在接收方这个和将是1111 1111 1111 1111;如果有1 个比特是0,则说明分组中出现了差错。
- 示例:计算校验和
- 发送方的UDP 对报文段中的所有16 比特字(包括首部)的和进行反码运算,求和时遇到的任何溢出都被回卷。
- UDP校验和机制只能进行差错检测,而不能进行差错恢复
-
UDP优势
- 1.应用层能更好地控制要发送的数据和发送时间:最快发送,容许少量丢失。
- 2.无需连接建立:无连接建立时延。
- 3.无连接状态:TCP需要维护连接状态,如接受和发送缓存、拥塞控制参数、序号和确认号的参数。
- 4.分组首部开销小:每个TCP报文段都有20字节的首部,而UDP报文段只需8字节首部开销。
-
UDP特征
- UDP只做了运输层最少的工作,除了多路复用/多路分解功能及少量的差错检测外,它几乎没有对IP 增加别的东西:丢包、乱序。
TCP与UDP的使用
- UDP使用场景
- 名字转换:应用层协议DNS使用运输层UDP协议
- 选路协议:UDP可用于RIP选路表的更新
- 网络管理:承载网络管理数据SNMP
- TCP使用场景
- HTTP协议
- 电子邮件
- 远程终端访问
- Web及文件传输
- 因特网应用及其采用的运输层协议
应用 | 应用层协议 | 下面的运输层协议 |
---|---|---|
电子邮件 | SMTP | TCP |
远程终端控制 | Telnet | TCP |
Web | HTTP | TCP |
文件传输 | FTP | TCP |
远程文件服务器 | NFS | 常用UDP |
流式多媒体 | 通常专用 | TCP或UDP |
因特网电话 | 通常专用 | TCP或UDP |
网络管理 | SNMP | 常用UDP |
选路协议 | RIP | 常用UDP |
名字转换 | DNS | 常用UDP |
3.4 可靠数据传输机制
概述
-
可靠数据传输原理
- 考虑一般情况下的可靠传输问题,计算机网络中最重要的问题之一。为了简化,只考虑单向数据传输的情况,即数据传输是从发送方到接收方的,全双工 (双向数据传输)原理上是一样的。控制信息会双向传播
- 底层信道不可靠。
-
可靠数据传输模型
- rdt_send()
可靠数据传输协议rdt
send表明rdt的发送方正在被调用- udt_send()
udt表示不可靠数据传输- rdt_rcv()
当包到达信道的rcv端时调用,接收方从底层信道接收分组- deliver_data()
供rdt调用向应用层交付数据
构建可靠数据传输协议
1.完全可靠信道上的可靠数据传输(rdt 1.0)
- 假设
- 1.没有比特错误
- 2.没有丢包
- 3.假定接收方接收速率和发送方发送速率一致
- 有限状态机FSM
- rdt1.0发送方
- rdt1.0接收方
2.具有比特差错信道上的可靠数据传输(rdt 2.0)
- 假设
- 1.没有丢包
- 2.存在比特差错
- 特征
- 通过校验和检测比特差错;出错返回NAK报文;用重传来解决比特差错。
- 是一种停等协议:发送方将不会发送新数据,直到确认接收方已正确接收到当前分组。
- 采用的新机制
- 自动重传请求协议ARQ
- 1.差错检测-校验和:通过校验和进行差错检测。
- 2.接收方反馈ACK/NAK:否定确认NAK,肯定确认ACK。
- 3.重传:发送方收到NAK响应后重传。
- 自动重传请求协议ARQ
- 有限状态机FSM
- rdt2.0发送方
- rdt2.0接收方
2.1确认信息ACK/NAK本身出错 (rdt 2.1)
- 简单思路
- 如果ACK/NAK 出错,那么发送者直接重传当前的分组。
- 问题:引入冗余分组接收方不知发送方是否接受到了它的ACK或NAK,所以不知道这次到来的是重传还是新的分组。
- 改进方案
- 对于冗余分组
- 序号
- 为分组添加新的序号字段,接收方收到相同序号的分组认为是重传,抛弃重复分组。
- 对于停等协议,使用1bit的序号字段已经足够。
- 序号
- 对于冗余分组
2.2无NAK的可靠数据传输(rdt 2.2)
- 改进方案
- ACK带序号:表示对对应分组的确认。
- 冗余ACK
- 如果发送方收到的是对上一个分组的ACK,则表示接收方没有正确接收当前分组,需要进行重传。
- 现在假设情景发送方向接收方发送0号数据包,如果接收方接收到0号数据包,返回(ACK,1),发送方接着发送1号数据包。
- 如果接收方接收到0号数据包出现错误,返回(ACK,0),发送方重传0号数据包。
3.具有比特差错的丢包信道上的可靠数据传输(rdt3.0)
- 假设
- 1.存在丢包
- 2.存在比特差错
- 引入机制
- 对于丢包
- 定时器:如果在RTT时间段内,发送方没有接收到反馈信息,那么发送方默认分组已经丢失了,会自动重传。
- 对于比特差错
- 序号:处理冗余数据分组。
- 校验和:差错检测。
- ACK
- 重传(基于时间)
- 对于丢包
- rdt3.0也被称为比特交替协议:分组序号在0和1之间交替。
- rdt3.0性能分析
- rdt3.0功能正确,但性能比较差:停等协议。
4.流水线可靠数据传输协议
- 特征:允许发送方发送多个分组而无需等待确认。
- 新要求
- 1.必须增加序号范围:因为每个传输的分组(不计算重传的)必须有一个唯一的序号,而且也许有多个在传输中的未确认的分组。
- 2.协议的发送方和接收方必须缓存多个分组
- 发送方最低限度应当能缓冲那些已发送但没有确认的分组。接收方也需要缓存那些正确接收的分组。
- 所需序号范围和对缓冲的要求取决于数据传输协议处理丢失、损坏及过度延时分组的方式。
- 解决流水线的差错恢复方法
1.回退N步(Go-back-N,GBN)
- 机制:校验和、序号、累积确认、倒数定时器、重传、滑动窗口。
- 特征
- 允许发送方发送多个分组(当有多个分组可用时)而不需等待确认。
- 受限于在流水线中未确认的分组数不能超过某个最大允许数N。
- 实现原理
- 概述
- 已被发送但还未被确认的分组的许可序号范围可以被看成是一个在序号范围内长度为N的窗口。随着协议的运行,该窗口在序号空间内向前滑动。
- 后退N步(GBN)协议常被称为滑动窗口协议
- 发送方
- 1.响应上层调用:当上层调用时,发送方检查窗口是否已满。
- 2.响应累计确认ACK
- 3.响应超时事件:重传
- 当有超时事件发生,出现丢失和过度时延分组时,发送方将重传所有已发送但还未被确认的分组。
- 发送方对最久未确认的数据报进行计时。
- 接收方
- 1.采用累积确认
- 对正确按序接收的序号最高的分组进行ACK。
- 对于乱序分组,丢弃并重发对当前按序收到的序号最高的分组的ACK。
- 即对n个分组整体发送1个ACK
- 2.接收方只需要维护下一个按序接收的分组的序号
- 1.采用累积确认
- 概述
2.选择重传(Selective Repeat,SR)
- 机制:校验和、序号、ACK、倒数定时器(每个分组一个定时器)、重传、滑动窗口。
- 实现原理
- 发送方
- 在流水线中最多有N个未确认的数据报。
- 发送方对每一个未确认的数据报进行计时。
- 接收方
- 接收方单独确认所有正确接收的数据报。
- 对于按正确顺序到来的数据报直接交付所有已缓冲且顺序正确的分组;对于顺序不正确的进行缓冲。
- 发送方
- 选择重传存在的问题
- 窗口大小过大会导致无法区分是新的分组还是重传的分组。
- 窗口大小必须小于等于序号空间的一半。
3.5 面向连接传输控制协议TCP
概述
- 面向连接
- 位置:TCP连接状态完全保留在两个端系统中,与中间路由器和链路层交换机无关。
- 概念:两个进程发送数据之前,必须相互发送某些预备报文段(三次握手)以建立连接(实质是双方都初始化与连接相关的发送/接收缓冲区,以及许多TCP 状态变量)。
- 连接服务
- 全双工:主机进程A与另一台主机进程B建立一条TCP连接,应用层数据可以在从B流向A的同时从A流向B。
- 点对点:指在单个发送方与单个接收方的连接,不支持“多播”。
- TCP面向连接特征:全双工、点对点、流水线、面向字节流、可靠传输、流量控制、拥塞控制。
- TCP最大报文段长 MSS
- 最大报文段长MSS指报文段中应用层数据的最大长度,不包含TCP首部长度。
- MSS是根据最大传输单元MTU(最大长度帧的负载)来进行设置。
- 往返时延
- TCP 将超时间隔设置成大于等于估计RTT 值和4倍的RTT 偏差值。
- TimeoutInterval = EstimatedRTT + 4*DevRTT。
TCP报文段结构
-
TCP与UDP
- TCP首部20字节
- UDP首部8字节
-
TCP报文段结构
-
源端口号16bits和目的端口号16bits:用于支持多路复用与多路分解。
-
序号字段32bits和确认号字段32bits
- 序号Seq_num:一个报文段的序号是该报文段首字节在有序的字节流中的编号。
- 确认号ACK_num:期望从对方收到的下一个报文段首字节的序号。
- 累积确认:对于失序的报文段,TCP只确认数据流中至第一个丢失字节为止的字节。
-
首部长度字段4bits:指示TCP首部长度,因为首部中选项字段可有可无,所以TCP首部长度不固定。
-
6bits保留字段
-
6bits标志字段
- ACK用于指示确认字段中的值是有效的。
- RST、SYN和FIN用于连接建立和拆除。
- RST用于复位由于主机崩溃或其他原因而出现错误的连接。还可用于拒绝非法的报文段和拒绝连接请求。若收到RST为1的报文,一定发生了某些问题。
- SYN同步序号,为1表示连接请求,用于建立连接和使顺序号同步。
- FIN用于释放连接,为1表示发送方已经没有数据需要发送,即关闭本方数据流。
- PSH指示接收方应立即将数据交给应用层而不用等待缓冲区装满。
- URG指示“紧急”数据。
-
16 bits接收窗口字段
- 用于流量控制
- 指示接收方愿意接受的字节数量
-
16bits校验和字段
-
16bits紧急数据指针
-
可选与变长的选项字段
TCP可靠数据传输工作原理
- 提供服务:确保接收数据流是非损坏、无间隔、非冗余、按序的。
- 机制:滑动窗口、累计确认、单一的重传定时器
- 触发重传:超时或冗余的ACK
场景1:高度简化TCP发送者——仅在超时时重传
- 3个与发送和重传相关的事件
- 1.从上层应用程序接收数据
- 封装(序号)、启动定时器(若定时器未启动),设置时间间隔。
- 2.定时器超时
- 重传引起超时的报文段(最早发出未确认),重启定时器。
- 3.收到确认ACK
- 将ACK 的值y与SendBase比较,若y>SendBase,则更新SendBase=y;若此时仍有未确认的报文段,则重启定时器。
- 1.从上层应用程序接收数据
- 超时后如何设置新的超时时间间隔
- 1.加倍:比如超时前0.75,超时重传后新的时间间隔为1.5
- 2.当收到上层应用数据或ACK时,重新按照公式计算。
- 优点:提供了一个有限形式的拥塞控制
场景2:快速重传——超时或冗余ACK引发重传
- 1.超时触发重传:超时周期可能相对较长,增加端到端时延。
- 2.冗余ACK :接收方再次确认某个报文段的ACK,而发送方先前已经收到对该报文段的确认。
- 处理方案
- 快速重传:收到3个冗余ACK,TCP就快速重传,不等超时。
流量控制
- 功能:流量控制是一个速度匹配服务,即发送方的发送速率与接收方应用程序的读速率相匹配。
- 特征:TCP是全双工服务,在发送方和接收方各维护一个接收窗口。
- 工作原理
- 1.接收方维护变量接收窗口(rwnd),用于告诉发送方,该接收方当前还有多少可用的缓存空间。
- 2.接收方把当前的空闲缓存大小值放入发给对方的报文接收窗口字段中,通知对方它在该连接的缓存中还有多少可用空间。
- 3.发送方已发送未确认的数据量必须小于等于接收方当前的接收窗口。
流量控制VS拥塞控制
- 流量控制是为了消除发送方使接收方缓存溢出的可能性。
- 拥塞控制是因为IP网络拥塞而对发送方进行控制。
TCP连接管理
- TCP连接管理特征
- 数据交换之前,需要“握手”
- 双方同意建立连接
- 协商连接参数
- 为什么需要“三次握手”
- 网络通信:延迟、丢包重传、乱序、双方并不知道对方的情况。
- 关闭TCP连接
- 客户端和服务器都可以主动发起关闭连接。
- 数据交换之前,需要“握手”
- 连接建立过程(3次握手)
-
TCP三次握手图解:
-
1.客户端TCP向服务端TCP发送一个特殊的TCP报文段(SYN报文段),SYN置1。
- <起始序号Seq=x,SYNbit=1>
-
2.服务器提取出TCP SYN报文段,为该TCP连接分配TCP缓存和变量,并向客户机TCP发送允许连接的报文段(SYNACK报文段),SYN置1。
- <起始序号Seq=y,SYNbit=1,确认序号ACKnum=x+1,ACKbit=1>
-
3.客户端收到SYNACK报文段后,客户机为该连接分配缓存和变量;向服务器发送确认连接报文段,SYN置0。
- <ACKbit=1,SYNbit=0,ACKnum=y+1>
-
- 连接释放过程(4次挥手)
-
TCP四次挥手图解:
-
1.客户机向服务器发送关闭连接的TCP报文段,FIN置1
- <FINbit=1,seq=x>
-
2.服务器向客户机发送一个确认报文段
- <ACKbit=1,ACKnum=x+1>
-
3.服务器释放资源,向客户机发送终止报文段,FIN置1
- <FINbit=1,seq=y>
-
4.客户机向服务器的终止报文段进行确认
- <ACKbit=1,ACKnum=y+1>
-
3.6 拥塞控制原理
拥塞原因与开销
- 网络拥塞开销
- 场景1:两个发送方和一个具有无穷大缓存的路由器
- 网络拥塞开销1:当分组到达速率接近链路容量时,分组将经历较长的排队时延。
- 场景2:两个发送方和一个具有有限缓存的路由器
- 网络拥塞开销2:发送方必须执行重传以补偿因为缓存溢出而丢弃的分组。
- 网络拥塞开销3:发送方在遇到大时延时所进行的不必要重传,导致路由器需要利用其链路带宽来转发不必要的分组。
- 场景3:四个发送方、具有有限缓存的多台路由器和多跳路径
- 网络拥塞开销4:当一个分组沿一条路径被丢弃时每个上游路由器用于转发该分组而使用的传输容量最终被浪费掉了(前面的路由器做了无用功)。
- 场景1:两个发送方和一个具有无穷大缓存的路由器
- 拥塞控制原因:太多数据被发送到网络中,网络来不及处理。
- 流量控制原因:发送方发送速度太快淹没接收方。
- 拥塞控制外部表现
- 丢包(路由器缓存溢出)
- 延迟(路由器排队)
拥塞控制方法
- 方法分类依据:根据网络层是否为传输层拥塞控制提供了帮助来区分。
- 1.端到端拥塞控制(TCP)
- 核心思想:端系统必须通过对网络行为的观察(如分组丢失与时延)来推断拥塞的发生。
- 概述:网络层没有为运输层拥塞控制提供显性支持。
- 应用
- TCP必须通过端到端方法处理拥塞控制,因为IP层不会向端系统提供拥塞反馈信息。
- TCP以报文段丢失判断网络拥塞。
- 2.网络辅助的拥塞控制
- 核心思想:网络层设备件(即路由器)向发送方提供关于网络中拥塞状态的显式反馈信息。
- 概述
- 显式反馈信息可以仅用1个比特来指示链路中拥塞情况。
- 分组的某个比特指示拥塞(SNA,DEC,TCP/IP,ECN,ATM)。
- 拥塞信息反馈的两种方式
- 1.阻塞分组:直接反馈信息由网络路由器发给发送方。
- 2.路由器标记或更新从发送方流向接收方的分组中某个字段来指示拥塞的产生;一旦接收方收到了这个有拥塞标记的分组,就会通知发送方网络拥塞。
- 至少要经过一个完整的往返时间
TCP拥塞控制算法
- 端到端拥塞控制
- 实现原理
- 让发送方根据所感知到的网络拥塞,来限制其向一个TCP 连接发送数据的速率。如果一个TCP 发送方没有感知到拥塞,它就会增加其发送速率;如果感知到拥塞,则降低其发送速率。
- 涉及问题
- ①发送方如何感知网络拥塞?
- 拥塞:丢包事件(超时或3个冗余ACK)
- 正常:收到未确认报文段的ACK
- ②发送方如何限制其发送速率?
- 维护一个变量拥塞窗口CongWin(以MSS字节为单位进行调整)来表征网络的拥塞情况。
- 发送方未确认的数据量不会超过CongWin与RcvWindow中的最小值。
- LastByteSent-LastByteAcked≤ min{CongWin, RcvWindow}}
- ③当感知到拥塞时,发送发采用何种算法来改变其发送速率?
- TCP拥塞控制算法
- ①发送方如何感知网络拥塞?
- 实现原理
- TCP拥塞控制算法基本思想:发送方不断增加发送速率以探测网络带宽,如果出现丢包事件,则从该速率后退,然后再次开始探测(ACK和丢包事件充当了网络拥塞的隐式信号)。
- TCP拥塞控制算法
-
1.加性增、乘性减AIMD
- 加性增:每经过一轮RTT,拥塞窗口值加1 (MSS),直到发生丢包事件。
- 乘性减:每发生一次丢包事件就将当前的拥塞窗口值减半。
-
2.慢启动
- 以慢速率开始,但以指数级增长
- CongWin 的值初始值置为1 个MSS,但以指数级增长;
- 直到遇到一次丢包,CongWin乘性减降为原来一半,开始加性增的线性增长。
- 慢启动结束的3个触发条件
- ① 超时:慢启动阈值ssthresh=cwnd/2, cwnd=1 MSS,然后重新进入慢启动(指数增长)。
- ② cwnd到达慢启动阈值:转入拥塞避免模式(cwnd从指数增长转为线性增长)。
- ③收到3个冗余ACK:慢启动阈值ssthresh=cwnd/2,cwnd=ssthresh+3(加3是因为收到3个重复的ACK),转入快速恢复模式。
- 以慢速率开始,但以指数级增长
-
3.对超时事件作出反应(报文段丢失)
- TCP发送方感知拥塞
- 3个冗余ACKs(表示网络能够传输数据报)
- CongWin减半
- 进入拥塞避免(线性增长)
- 超时事件(表示网络拥塞)
- CongWin置为1 MSS
- 进入慢启动
- 达到阈值(threshold),进入拥塞避免
- 阈值Threshold 初始化时被设置为一个很大值。每当发生一个丢包事件时,Threshold 值就会被设置为当前CongWin 值的一半。
- 3个冗余ACKs(表示网络能够传输数据报)
- TCP发送方感知拥塞
-
4.拥塞避免:加性增
- 指加性增的线性增长阶段
- 过程
- 1.当进入拥塞避免模式的时候,cwnd的值约为上次发生拥塞时值的一半,此时还没有发生拥塞,TCP缓慢地增大cwnd的值。
- 2.每经过1个RTT,cwnd=cwnd+1(单位为MSS字节),即每收到一个非冗余ACK,cwnd增加 MSS*(MSS/cwnd) 字节。
- 拥塞避免结束的2个触发条件
- ①超时:慢启动阈值ssthresh=cwnd/2, cwnd=1 MSS,然后重新进入慢启动。
- ②收到3个冗余ACK:慢启动阈值ssthresh=cwnd/2,cwnd=ssthresh+3,进入快速恢复模式。
-
5.快速恢复
- 指在收到3个冗余ACK后取消慢启动阶段;使阈值变为滑动窗口的一半,滑动窗口变为阈值加3(MSS)。
- 基本思想
- “报文段守恒”原则,即同一个时刻在网络中的报文段数量是恒定的,只有当“老”报文段被端系统接收后,才能向网络中发送一个“新“报文段。
- 每收到一个冗余ACK(说明有一个报文段被端系统接收了),cwnd+1。
- 快速恢复结束的2种触发条件
- ① 超时:慢启动阈值ssthresh=cwnd/2, cwnd=1 MSS,然后进入慢启动模式(指数增长)。
- ②收到新的ACK:cwnd=ssthresh,进入拥塞避免模式。
-
总结:TCP拥塞控制算法转换流程图
-
【思维导图】
0 概览
1 概述和运输层服务
2 多路复用与多路分解
3 无连接用户数据报协议UDP
4 可靠数据传输机制
5 面向连接传输控制协议TCP
6 拥塞控制原理
参考资料
《计算机网络自顶向下方法》(第4版)James F.Kurose,Keith W.Ross