- 传输层服务和协议
- 多路复用和多路分解
- UDP
- 可靠数据传输
- 可靠数据传输原理
- Rdt1.0:底层信道完全可靠
- Rdt 2.0: 产生位错误的信道
- Rdt2.1
- Rdt 2.2: 无NAK消息协议
- Rdt3.0
- 流水线机制与滑动窗口协议
- Go-Back-N协议
- Selective Repeat协议
- 练习
- 题1 可靠数据传输
- 题2 rdt2.1,2.2
- 题3 rdt3.0
- 题4 滑动窗口
- 题5 GBN协议
- ">题6 R考虑在rdt2.2接收方,在状态“等待来自下层的0”和状态“等待来自下层的1”中的自转换(即从某状态转换回自身)中生成一个新分组:sndpk=make_pkt(ACK,1,checksum)和sndpk=make_pkt(ACK,0,checksum)。如果这个动作从状态“等待来自下层的1”中的自转换中删除,该协议将正确工作吗?评估你的答案。在状态“等待来自下层的0”中的自转换中删除这个事件将会怎样?[提示:在后一种情况下,考虑如果第一个发送方到接收方的分组损坏的话,将会发生什么情况?]

- 题7 在我们的 rdt 协议中, 为什么需要引入序号? 如果不引入序号会有什么问题?
- 题 8 在我们的rdt协议中,为什么要引入定时器?
- 题9 考虑显示在图3-17中的网络跨越国家的例子,窗口长度设置成多少时,才能使信道的利用率超过90%?假设分组的长度为1500字节(包括首部字段和数据):
- 题10 在TCP/IP协议中,滑动窗口协议的研究内容应用于(A)协议
- 题11 假定发送方和接收方之间的往返时延是固定的并且为发送方所知。假设分组能够丢失的话,在协议rdt3.0中,一个定时器仍是必须的吗?试解释之。
- 题12 在3.4.4节我们学习的一般性SR协议中,只要报文可用(如果报文在窗口中),发送方就会不等待确认而传输报文。假设现在我们要求一个SR协议,一次发出一对报文,而且只有在知道第一对报文中的两个报文都正确到达后才发送第二对报文。
- 题13 在配套网站上使用Go Back-N (回退N步) Java小程序。
- 题14 重复习题13 但是现在使用SR Java小程序,SR和GBN有啥不同。
- 题15 在GBN协议的滑动窗口中,若发送窗口大小为8,在发送3号帧并收到2号帧的确认帧后,发送方还可发几帧?请给出可发帧的序号并说明理由(设帧序号从0开始)。
- 题16 假设主机A向主机B发送5个连续的报文段,主机B对每个报文段进行确认,其中第二个报文段丢失,其余报文段以及重传的第二个报文段均被主机B正确接收,主机A正确接收所有ACK报文段;报文段从1开始依次连续编号(即1、2、3……),主机A的超时时间足够长。请回答下列问题:
- TCP
- TCP拥塞控制
- 基本原理
- 加性增—乘性减: AIMD
- TCP慢启动: SS
- Threshold变量(阈值)
- LOSS事件的处理
- 练习
- 例题
- 题1 拥塞控制
- 题2 在TCP的拥塞控制中,乘法减小和加法增大各用在什么情况?
- 题3 一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的6个RTT(往返时间)内的TCP段的传输都是成功的,那么当第6个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小时多少?请分别列出每一个RTT对应的拥塞窗口和窗口门限(threshold)的值。
- 题4 假设A、B两个端系统通过唯一的一条8Mbps链路连接(M=10^6),该链路的双向传播时延是150ms(RTT);A通过一个TCP连接向B发送一个大文件,B的接收缓存足够大,每个TCP段最大段长度(MSS)为1500字节,TCP采用Reno版本,且总是处于拥塞避免阶段(即忽略慢启动)。请回答下列问题:
- TCP性能分析
传输层服务和协议
传输层 vs. 网络层
Internet传输层协议
练习
题1 传输层概念

- 答案为ABD
多路复用和多路分解

将传输层报文段中的数据放置到正确的套接字**的工作称为多路分解,确切地说,多路分解其实是多路分发,或者说是数据流的分解。数据交付到特定套接字的工作也就是将数据放到正确的存储位置的过程。从源主机的不同套接字中收集数据块,井为每个数据块封装上首部信息(在多路分解时使用)从而生成报文段,然后将报文段传递到网络层的工作称为多路复用。**
分用如何工作?
无连接分用
面向连接的分用
UDP
基本概念
UDP校验和(checksum)
校验和计算示例
练习
题1 udp和tcp

-
题2 以下应用(D)不采用TCP作为运输层协议。
A.电子邮件 B.远程终端访问
C.Web D.DNS
解:TCP(传输控制协议)是面向连接的协议,它提供双向、可靠、有流量控制的字节流的服务。字节流服务的意思是,在一个TCP连接中,源节点发送一连串的字节给目的节点。可靠服务是指数据有保证的传递、按序、没有重复。
UDP(用户数据报协议)是一个无连接服务的协议。它提供多路复用和差错检测功能,但不保证数据的正确传送和重复出现。应用是可以实现可靠数据传输的,这可以通过在应用程序自身中建立可靠性机制来完成的。但是,UDP没有提供拥塞控制。
可靠数据传输
可靠数据传输原理
什么是可靠?
可靠数据传输协议基本结构:接口
利用状态机(Finite State Machine, FSM)刻画传输协议
Rdt1.0:底层信道完全可靠
Rdt 2.0: 产生位错误的信道
FSM规约
无错误场景
有错误场景
Rdt 2.0有什么缺陷?
Rdt2.1
发送方, 应对ACK/NAK破坏
接收方, 应对ACK/NAK破坏
Rdt 2.1 vs. Rdt 2.0
Rdt 2.2: 无NAK消息协议
Rdt 2.2 FSM片段
发送方
接收方
Rdt3.0
发送方
接收方
无丢包操作
分组丢失
丢失ACK
过早超时
Rdt 3.0性能分析
停等操作
流水线机制与滑动窗口协议
流水线机制:提高资源利用率
流水线协议
滑动窗口协议
Go-Back-N协议
发送方
发送方FSM
接收方扩展FSM
GBN示例
Selective Repeat协议
发送方/接收方窗口
SR协议示例
SR协议:困境
练习
题1 可靠数据传输

-
题2 rdt2.1,2.2

-
题3 rdt3.0

-
题4 滑动窗口

-
题5 GBN协议
题6 R考虑在rdt2.2接收方,在状态“等待来自下层的0”和状态“等待来自下层的1”中的自转换(即从某状态转换回自身)中生成一个新分组:sndpk=make_pkt(ACK,1,checksum)和sndpk=make_pkt(ACK,0,checksum)。如果这个动作从状态“等待来自下层的1”中的自转换中删除,该协议将正确工作吗?评估你的答案。在状态“等待来自下层的0”中的自转换中删除这个事件将会怎样?[提示:在后一种情况下,考虑如果第一个发送方到接收方的分组损坏的话,将会发生什么情况?]

如果删除了该消息的发送,发送和接收方将发生死锁,等待永远不会发生的事件。例,在状态“等待来自下层的0”中的自转换中删除这个事件:发送方发送数据包pKT0,进入“等待Ack 0状态”,等待数据包返回来自接收机。接收器处于“从下面等待0”状态,接收到损坏的数据包来自发送方。因为它不发送任何信息,只是重新进入“等待来自下层的0”的状态。现在,发送方正在等待来自接收方的某种类型的ACK,并且接收方等待来自接收方的数据包——死锁。同理,如果在状态“等待来自下层的1”中的自转换中删除这个事件,也会发生死锁。
题7 在我们的 rdt 协议中, 为什么需要引入序号? 如果不引入序号会有什么问题?
描述: 一个初始的rdt停等协议是这样的: 发送方发送一个分组, 发送方进入等待状态,不能从上层接收分组, 接收方接收到分组后如果分组正常则回复ACK, 否则回复NAK, 发送方接收到ACK则回到初始状态等待上层调用, 如果收到NAK则重传该分组继续等待.
- 问题来了: 如果接收方的ACK, NAK分组在传输过程中受损, 发送方该如何处理? 最简单实用的方法就是重传了, 也就是当发送方不确定接收方是否收到分组就把分组重新发送一遍.
- 但是重发分组会带来新的问题, 接收方在接收到重发的分组时, 它并不知道这是一个新的分组还是一个重传的分组(对上一个分组已经确认过了).
于是便引入序号, 这里的序号用一个比特位表示0和1就能解决. 加入当前发送方发送带有0序号的分组, 那么接收方会进行响应. 发送方如果接收到损坏的确认分组, 那么它重传一次带有0序号的分组. 否则传送带1序号的下一个分组. 接收方根据分组的序号进行判断, 如果当前分组的序号和上一个接受到的分组的序号相同, 说明这是一次重传, 如果不相同说明是一个新的分组.
题 8 在我们的rdt协议中,为什么要引入定时器?
解:引入定时器,实现基于时间的重传机制,可以解决怎样检测丢包的问题。如果发送方的数据包定时器在一段时间内没有收到该数据包的ACK,则判断该数据包丢失,重新发送。检验和、序号、ACK分组和重传,都只能解决丢包后该如何做的问题。引入定时器,让发送方负责检测和恢复丢包工作,如果发送方愿意等待足够长时间以便确定分组已丢失,那么只需要重传该数据分组即可。
题9 考虑显示在图3-17中的网络跨越国家的例子,窗口长度设置成多少时,才能使信道的利用率超过90%?假设分组的长度为1500字节(包括首部字段和数据):

解:Rtt=30ms
发送速率R=1Gbps=10^9bit/s
分组长度L=1500byte=12000bit
发送数据包的时间t=L/R=12000/10^9=12us/pkt
假设窗口长度为n,则:
(n*t)/(rtt+t)>90%
n>2550.9
得到窗口长度设置为大于2251时,利用率可以超过90%题10 在TCP/IP协议中,滑动窗口协议的研究内容应用于(A)协议
A.TCP B.UDP
C.IEEE 802.3 D.IP
滑动窗口协议主要用于流量控制,协议内容应用于TCP协议。题11 假定发送方和接收方之间的往返时延是固定的并且为发送方所知。假设分组能够丢失的话,在协议rdt3.0中,一个定时器仍是必须的吗?试解释之。
解:3.0同时考虑到丢包与丢失分组的情形,除了使用ACK机制,另外在传送端多了倒数计时器,封包送出去如果超过时间仍未收到ACK或是收到不正确编号的ACK,则再发送分组一次。
计时器应该必要;往返时间是已知就是发送方可以准确判断ACK或NACK丢失时间。计时器就是用于计时,如果没有计时器,假如数据包丢失,就算过了固定时间,接收方接收不到发送方数据包就会一直等待不返回信息。题12 在3.4.4节我们学习的一般性SR协议中,只要报文可用(如果报文在窗口中),发送方就会不等待确认而传输报文。假设现在我们要求一个SR协议,一次发出一对报文,而且只有在知道第一对报文中的两个报文都正确到达后才发送第二对报文。
假设该信道中可能会丢失报文,但报文不会发生损坏和失序。试为报文的单向可靠传输而设计一个差错控制协议。画出发送方和接收方的FSM描述。描述在发送方和接收方之间两个方向发送的报文格式。如果你使用了不同于3.4节(例如udt_send()、start_timer()、 rdt_rev()等)中的任何其他过程调用,详细地阐述这些动作。举例说明(用发送方和接收方的时序踪迹图)你的协议是如何恢复报文丢失的。
解:发送方将等待接收到一对消息(seqnum0和seqnum 1)的ACK,然后再转到下一对消息。数据包有一个数据字段,并携带两位序列号,也就是说,有效序列号为0、1、2和3。ACK消息携带他们正在确认的数据包的序列号。
- 发送方和接收方的FSM如图。发送方状态记录:当前对未收到ACK;接收到用于seqnum的ACK;或接收到用于seqnum 1的ACK。在这个图中,我们假设seqnum最初为0,并且发送者已经发送了第一个两个数据消息(获取要进行的事情)。
题13 在配套网站上使用Go Back-N (回退N步) Java小程序。
a. 让源发送5个分组,在这5个分组的任何一个到达目的地之前暂停该动画。然后毁掉第一个分组并继续该动画。试描述发生的情况。
b.重复该实验,只是现在让第一个分组到达目的地并毁掉第一个确认。再次描述发生的情况。
c.最后,尝试发送6个分组。发生了什么情况?
解:a) 丢包造成⼀段时间后, 所有五个包都被重传。 b) 由于Go-Back-N使⽤累积数据, ACK的丢失没有触发任何重传承认。 c) 发送⽅⽆法发送第六个分组, 因为发送窗⼝⼤⼩固定为5。
题14 重复习题13 但是现在使用SR Java小程序,SR和GBN有啥不同。
解:a) 当分组丢失时, 接收的4个分组被缓冲接收器。 完成后超时, 发送⽅重新发送丢失的数据包, 接收⽅传送缓冲的数据包数据包以正确的顺序应⽤。 
b) 接收器为丢失的ACK发送了重复ACK。
c) 发送窗⼝⼤⼩固定为5时, 发送方无法发送第六数据包当分组丢失时, 返回-N重传所有的分组, 而选择性地重传所有的分组。 仅重发丢失的数据包。 在丢失确认的情况下, 选择性重复发送重复ACK, 并作为返回-N使⽤的累积确认, 不需要重复ACK。
题15 在GBN协议的滑动窗口中,若发送窗口大小为8,在发送3号帧并收到2号帧的确认帧后,发送方还可发几帧?请给出可发帧的序号并说明理由(设帧序号从0开始)。
答:对于滑动窗口的机制,发送方可连续发送K帧而无需对方应答,但需要将已发出但尚未收到确认的帧保存在发送窗口中,以备由于出错或丢失而准备重发。接收方按正确的次序接受和递交数据帧,并返回确认信息。接收方可能因为一帧出错,不能正确接受并递交主机,对后面连续发送来的n帧均丢失。
在题中,发送窗口大小为8,在发送3号帧并收到2号帧的确认帧后,即0,1,2号帧已经正确接受,因此窗口向右移动3个帧,目前已经发送了3号帧,因此可连续发送的帧数是窗口大小-已经发送的帧数,即故还可以发送 8-1 = 7 帧。 为{4、5、6、7、8、9、10 }
题16 假设主机A向主机B发送5个连续的报文段,主机B对每个报文段进行确认,其中第二个报文段丢失,其余报文段以及重传的第二个报文段均被主机B正确接收,主机A正确接收所有ACK报文段;报文段从1开始依次连续编号(即1、2、3……),主机A的超时时间足够长。请回答下列问题:
1)如果分别采用GBN、SR和TCP协议,则对应这三个协议,主机A分别总共发了多少个报文段?主机B分别总共发送了多少个ACK?它们的序号是什么?(针对3个协议分别给出解答)
答:①GBN协议:
- A共发送9个报文段;首先发送1,2,3,4,5,后来重发2,3,4,5。
- B共发送8个ACK;先是4个ACK1,然后是ACK2, ACK3, ACK4, ACK5。
②SR协议:
- A共发送6个报文段;首先发送1,2,3,4,5,后来重发2。
- B共发送5个ACK;先是ACK1,ACK3, ACK4, ACK5,然后是ACK2。
③TCP协议
- A共发送6个报文段;首先发送1,2,3,4,5,然后重发2。
- B共发送5个ACK;先发送4个ACK2,然后发送1个ACK6。
2)如果对上述三个协议,超时时间比5RTT长得多,那么哪个协议将在最短的时间间隔内成功交付5个报文段?
答:TCP协议;因为TCP有快速重传机制(即在未超时情况下就开始重传丢失的2号报文段)。
TCP
TCP概述
特点
TCP报文段结构
序列号和ACK
TCP可靠数据传输概述
RTT和超时
TCP发送方事件
TCP发送端程序
NextSeqNum = InitialSeqNum SendBase = InitialSeqNumTCP发送端程序loop (forever) {switch(event)event: data received from application abovecreate TCP segment with sequence number NextSeqNumif (timer currently not running)start timerpass segment to IPNextSeqNum = NextSeqNum + length(data)event: timer timeoutretransmit not-yet-acknowledged segment with smallest sequence numberstart timerevent: ACK received, with ACK field value of yif (y > SendBase) {SendBase = yif (there are currently not-yet-acknowledged segments)start timer}} /* end of loop forever */
TCP重传示例
快速重传机制
快速重传算法
TCP流量控制
概述
控制
TCP连接管理
三次握手
TCP连接管理:建立
TCP连接管理:关闭
练习
题1 tcp1

-
题2 tcp2

-
题3 tcp3

答案为AC;在第三次握手中,因为连接已经建立了,所以该SYN比特被置为0
题4 设a=7/8,在RTT= 5.0ms时发出的三个数据报的实际往返时间分别为5.5,6.2,7.5,则发出3个数据报后最后的RTT=( ) (四舍五入精确到小数点后1位)。
A. 4.8ms
B. 5.0ms
C. 5.5ms
D. 7.5ms
解析:第一次测得RTT样本时,RTTs取值为该RTT样本值,因此,
RTTs = 5ms, a = 7/8 = 0.875, 1 – a = 0.125。
根据公式:新的RTTs=a x (旧的RTTs) + (1 – a) x(新的RTT样本)
第一次算出: RTTs = 0.875 x 5 + 0.125 x 5.5 =5.0625ms
第二次算出: RTTs = 0.875 x 5.0625 + 0.125 x 6.2= 5.20468ms
第三次算出: RTTs = 0.875 x 5.20468 + 0.125 x7.5 = 5.49ms
故 C 5.5 ms。题5 为什么TCP协议建立连接时需要采用三次握手?在下图所示的三次握手过程中,请给出用问好标示的SYN,SEQ,ACK的值。

解:TCP的三次握手过程:主机A向B发送连接请求;主机B对收到主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
为了实现可靠数据传输, TCP 协议的通信双方, 都必须维护一个序列号, 以标识发送出去的数据包中, 哪些是已经被对方收到的。 三次握手的过程即是通信双方相互告知序列号起始值, 并确认对方已经收到了序列号起始值的必经步骤。如果只是两次握手, 至多只有连接发起方的起始序列号能被确认, 另一方选择的序列号则得不到确认
(1) SYN=1 (2)SYN=1, SEQ=2001, ACK=1001 (3)SYN=0, SEQ=1001题6 TCP传输为什么是可靠的?
答:(1)TCP协议采用发送应答机制,即发送端发送的每个TCP报文段都必须得到接收方的应答,才能认为这个TCP报文段传输成功。
(2)TCP协议采用超时重传机制,发送端在发送出一个TCP报文段之后启动定时器,如果在定时时间内未收到应答,它将重新发送该报文段。
(3)由于TCP报文段最终是以IP数据报发送的,而IP数据报到达接收端可能乱序、重复、所以TCP协议还会将接收到的TCP报文段重排、整理、再交付给应用层。题7 下图描述了TCP基于端口的应用多路复用情形,请说明:
1)图中的服务器是什么服务器?(1分)
- 2)主机A和C与服务器之间的应用?(2分)
- 3)针对主机C与服务器B之间的连接,说明如何基于端口完成应用多路复用?(2分)

解:1)80端口属于HTTP,故图中的服务器为Web服务器。
2)主机A访问一台Web服务器;另一台主机C通过两个浏览器进程访问同一台Web服务器。
3)在主机C端通过两个不同的端口号X和Y表示该主机上的两个不同应用进程,目的端口号80表示要访问的是Web服务器。
拥塞的成因和代价
场景1
场景2
场景3
拥塞控制方法
端到端的拥塞控制
TCP拥塞控制
基本原理
加性增—乘性减: AIMD
TCP慢启动: SS
Threshold变量(阈值)
LOSS事件的处理
练习
例题
题1 拥塞控制

- 答案为ABCD
题2 在TCP的拥塞控制中,乘法减小和加法增大各用在什么情况?
答:“乘法减小”是指不论在慢开始阶段还是拥塞避免阶段,只要出现一次超时(即出现一次网络拥塞),就把慢开始门限值ssthresh 设置为当前的拥塞窗口值乘以 0.5。当网络频繁出现拥塞时,ssthresh 值就下降得很快,以大大减少注入到网络中的分组数。“加法增大”是指执行拥塞避免算法后,当收到对所有报文段的确认就将拥塞窗口 cwnd增加一个 MSS 大小,使拥塞窗口缓慢增大,以防止网络过早出现拥塞。题3 一个TCP连接总是以1KB的最大段长发送TCP段,发送方有足够多的数据要发送。当拥塞窗口为16KB时发生了超时,如果接下来的6个RTT(往返时间)内的TCP段的传输都是成功的,那么当第6个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小时多少?请分别列出每一个RTT对应的拥塞窗口和窗口门限(threshold)的值。
解:trheshold=16KB/2=8KB;第1个RTT:cwnd=2KB;第二个RTT:cwnd=4KB;第3个RTT:cwnd=8KB;第4个RTT:cwnd=9KB;第5个RTT:cwnd=10KB;第6个RTT:cwnd=11KB。题4 假设A、B两个端系统通过唯一的一条8Mbps链路连接(M=10^6),该链路的双向传播时延是150ms(RTT);A通过一个TCP连接向B发送一个大文件,B的接收缓存足够大,每个TCP段最大段长度(MSS)为1500字节,TCP采用Reno版本,且总是处于拥塞避免阶段(即忽略慢启动)。请回答下列问题:
1)该TCP连接能够获得的最大窗口尺寸(以TCP段数计)是多少?
解:设W是最大窗口尺寸,当最大发送速率超过链路带宽时会发生丢包,因此:WMSS/RTT=8Mbps,于是W = 8 10^6 150 10^(-3) / (1500 8) = 100。
2)该TCP连接的平均窗口尺寸(以TCP段数计)和平均吞吐量(以bps计)是多少?
解:拥塞窗口从W/2到W之间变化,平均窗口尺寸:We=0.75W=75;因此平均吞吐量为:We MSS / RTT =7515008/0.15=6Mbps
3)该TCP连接的拥塞窗口从发生丢包到恢复到最大窗口尺寸要经历多长时间?
解:T = 100 / 2 RTT=0.15100/2=7.5秒,因为每个RTT窗口尺寸增加1个MSS。TCP性能分析
TCP throughput: 吞吐率
TCP的公平性

















