四.TCP连接管理
TCP连接传输三个阶段:
TCP连接的建立采用客户服务器方式,主动发起连接建立的应用进程叫做客户,而被动等待连接建立的应用进程叫服务器。
1.TCP的连接建立
假设运行在一台主机(客户)上的一个进程想与另一台主机(服务器)上的一个进程建立一条连接,客户应用进程首先通知客户TCP,他想建立一个与服务器上某个进程之间的连接,客户中的TCP会用以下步骤与服务器中的TCP建立一条TCP连接:
2.SYN洪泛攻击
SYN洪泛攻击发生在OS第四层,这种方式利用TCP协议的特性,就是三次握手。攻击者发送TCP SYN,SYN是TCP三次握手中的第一个数据包,而当服务器返回ACK后,该攻击者就不对其进行再确认,那这个TCP连接就处于挂起状态,也就是所谓的半连接状态,服务器收不到再确认的话,还会重复发送ACK给攻击者。这样更加会浪费服务器的资源。攻击者就对服务器发送非常大量的这种TCP连接,由于每一个都没法完成三次握手,所以在服务器上,这些TCP连接会因为挂起状态而消耗CPU和内存,最后服务器可能死机,就无法为正常用户提供服务了。
3.TCP的连接释放
参与一条TCP连接的两个进程中的任何一个都能终止该连接,连接结束后,主机中的“资源”(缓存和变量)将被释放。
五.TCP可靠传输
1.序号
2.确认
3.重传
习题:
选择
1.下列关于传输层协议中面向连接的描述,(C)是错误的。
A.面向连接的服务需要经历3个阶段:连接建立、数据传输及连接释放
B.当链路不发生错误时,面向连接的服务可以保证数据到达的顺序是正确的
C.面向连接的服务有很高的效率和时间性能
D.面向连接的服务提供了一个可靠的数据流
2.TCP协议规定HTTP(C)进程的端口号为80.
A.客户机
B.解析
C.服务器
D.主机
3.下列(D)不是TCP服务的特点。
A.字节流
B.全双工
C.可靠
D.支持广播
4.【2014统考真题】主机甲和乙建立了TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送,乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时的时候拥塞窗口为8KB,则从1时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是(A).
A.10KB
B.12KB
C.14KB
D.15KB
5.(B)字段包含在TCP首部中,而不包含在UDP首部中。
A,目的端口号
B.序列号
C.校验和
D.目的IP地址
6.以下关于TCP报头格式的描述中,错误的是(D).
A.报头长度为20~60B,其中固定部分为20B
B.端口号字段依次表示源端口号与目的端口号
C.报头长度总是4的倍数个字节
D.TCP校验和伪首部中P分组头的协议字段为17
7.在采用TCP连接的数据传输阶段,如果发送端的发送窗口值由1000变为2000,那么发送端在收到一个确认之前可以发送(B)。
A.2000个TCP报文段
B.2000B
C.1000B
D.1000个TCP报文段
8.A和B建立了TCP连接,当A收到确认号为100的确认报文段时,表示(C).
A.报文段99已收到
B.报文段100已收到
C.末字节序号为99的报文段已收到
D.末字节序号为100的报文段已收到
9.为保证数据传输的可靠性,TCP采用了对(A)确认的机制。
A.报文段
B.分组
C.字节
D.比特
10.在TCP协议中,发送方的窗口大小取决于(C).
A.仅接收方允许的窗口
B.接收方允许的窗口和发送方允许的窗口
C.接收方允许的窗口和拥塞窗口
D.发送方允许的窗口和拥塞窗口
11.滑动窗口的作用是(A).
A.流量控制
B.拥塞控制
C.路由控制
D.差错控制
12.以下关于TCP工作原理与过程的描述中,错误的是(C)。
A.TCP连接建立过程需要经过“三次握手”的过程
B.TCP传输连接建立后,客户端与服务器端的应用进程进行全双工的字节流传输
C.TCP传输连接的释放过程很复杂,只有客户端可以主动提出释放连接的请求
D.TCP连接的释放需要经过“四次握手”的过程人后叶反卡
13.TCP的滑动窗口协议中,规定重传分组的数量最多可以(D)。
A.是任意的
B.1个
C.大于滑动窗口的大小
D.等于滑动窗口的大小
14.TCP中滑动窗口的值设置太大,对主机的影响是(A).
A.由于传送的数据过多而使路由器变得拥挤,主机可能丢失分组
B.产生过多的ACK
C.由于接收的数据多,而使主机的工作速度加快
D.由于接收的数据多,而使主机的工作速度变慢
15.以下关于TCP窗口与拥塞控制概念的描述中,错误的是(C)。
A.接收端窗口(rwnd)通过TCP首部中的窗口字段通知数据的发送方
B.发送窗口确定的依据是:发送宙口=min[接收端宙口,拥塞窗口]
C.拥塞窗口是接收端根据网络拥塞情况确定的窗口值
D.拥塞窗口大小在开始时可以按指数规律增长
17.TCP“三次握手”过程中,第二次“握手”时,发送的报文段中(D)标志位被置为1。
A.SYN
B.ACK
C.ACK和RST
D.SYN和ACK
18.A和B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ack=201,数据部分有2个字节,那么在B对该报文的确认报文段中(C)。
A.seq=202,ack =200
B.seq =201,ack =201
C.seq=201,ack=202
D.seq =202,ack 201
19.TCP的通信双方,有一方发送了带有FIN标志的数据段后,表示(B)。
A.将断开通信双方的TCP连接
B.单方面释放连接,表示本方已经无数据发送,但可以接收对方的数据
C.中止数据发送,双方都不能发送数据
D.连接被重新建立
20.一个TCP连接的数据传输阶段,如果发送端的发送窗口值由2000变为3000,那么意味着发送端可以(C)。
A.在收到一个确认之前可以发送3000个TCP报文段
B.在收到一个确认之前可以发送1000B
C.在收到一个确认之前可以发送3000B
D.在收到一个确认之前可以发送2000个TCP报文段
21.在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时发生了超时事件。如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是(C)。
A.8KB
B.9KB
C.16KB
D.17KB
22.设TCP的拥塞窗口的慢开始门限值初始为8(单位为报文段),当拥塞窗口上升到12时发生超时,TCP开始慢启动和拥塞避免,那么第13次传输时拥塞窗口的大小为(C).
A.4
B.6
C.7
D.8
23.在一个TCP连接中,MSS为1KB,当拥塞窗口为34KB时收到了3个冗余ACK报文.如果在接下来的4个RTT内报文段传输都是成功的,那么当这些报文段均得到确认后,拥塞窗口的大小是(D)。
A.8KB
B.16KB
C.20KB
D.21KB
24.A和B建立TCP连接,MSS为1KB。某时,慢开始门限值为2KB,A的拥塞窗口为4KB,在接下来的一个RTT内,A向B发送了4KB的数据(TCP的数据部分),并且得到了B的确认,确认报文中的窗口字段的值为2KB。在下一个RTT中,A最多能向B发送(A)数据。
A.2KB
B.8KB
C.5KB
D.4KB
25.假设在没有发生拥塞的情况下,在一条往返时延RTT为10ms的线路上采用慢开始控制策略。如果接收窗口的大小为24KB,最大报文段MSS为2KB,那么发送方发送出第一个完全窗口需要(B)时间.
A.30ms
B.40ms
C.50ms
D.60ms
26.【2009统考真题】主机甲与主机乙之间已建立一个T℃P连接,主机甲向主机乙发送了两个连续的TCP段,分别包含300B和500B的有效载荷,第一个段的序列号为200,主机乙正确接收到这两个数据段后,发送给主机甲的确认序列号是(D)。
A.500
B.700
C.800
D.1000
27.【2009统考真题】一个TCP连接总以1KB的最大段长发送TCP段,发送方有足够多的数据要发送,当拥塞窗口为16KB时发生了超时,如果接下来的4个RTT时间内的TCP段的传输都是成功的,那么当第4个RTT时间内发送的所有TCP段都得到肯定应答时,拥塞窗口大小是(C)。
A.7KB
B.8KB
C.9KB
D.16KB
28.【2010统考真题】主机甲和主机乙之间已建立一个TCP连接,TCP最大段长为1000B.若主机甲的当前拥塞窗口为4000B,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000B,则此时主机甲还可以向主机乙发送的最大字节数是(A)。
A.1000
B.2000
C.3000
D.4000
29.【2011统考真题】主机甲向主机乙发送一个(SYN=1,sq=11220)的TCP段,期望与主机乙建立TCP连接,若主机乙接受该连接请求,则主机乙向主机甲发送的正确的TCP段可能是(C)。
A.(SYN=0,ACK=0,seq=11221,ack=11221)
B.(SYN=1,ACK=1,seq=11220,ack=11220)
C.(SYN=1,ACK=1,seg=11221,ack=11221)
D.(SYN=0,ACK=0,seq=11220,ack=11220)
30.【2011统考真题】主机甲与主机乙之间已建立一个TCP连接,主机甲向主机乙发送了3个连续的TCP段,分别包含300B、400B和500B的有效载荷,第3个段的序号为900。若主机乙仅正确接收到第1个段和第3个段,则主机乙发送给主机甲的确认序号是(B)。
A.300
B.500
C.1200
D.1400
31.【2013统考真题】主机甲与主机乙之间已建立一个T℃P连接,双方持续有数据传输,且数据无差错与丢失。若甲收到一个来自乙的TCP段,该段的序号为1913、确认序号为2046、有效载荷为100B,则甲立即发送给乙的TCP段的序号和确认序号分别是(B).
A.2046、2012
B.2046、2013
C.2047、2012
D.2047、2013
32.如果主机1的进程以端口x和主机2的端口y建立了一条TCP连接,这时如果希望再在这两个端口间建立一个TCP连接,那么会(A)。
A.建立失败,不影响先建立连接的传输
B.建立成功,且两个连接都可以正常传输
C.建立成功,先建立的连接被断开
D.建立失败,两个连接都被断开
33.【2015统考真题】主机甲和主机乙新建一个TCP连接,甲的拥塞控制初始阁值为32KB,甲向乙始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙为该连接分配16KB接收缓存,并对每个数据段进行确认,忽略段传输延迟。若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未出现发送超时的情况下,经过4个RTT后,甲的发送窗口是(A)。
A.IKB
B.8KB
C.16KB
D.32KB
34.【2017统考真题】若甲向乙发起一个TCP连接,最大段长MSS=1KB,RTT=5ms,乙开辟的接收缓存为64KB,则甲从连接建立成功至发送窗口达到32KB,需经过的时间至少是(A)。
A.25ms
B.30ms
C.160ms
D.165ms
简答:
1.在使用TCP传输数据时,如果有一个确认报文段丢失,那么也不一定会引起与该确认报文段对应的数据的重传。试说明理由。
2.如果收到的报文段无差错,只是报文段失序,那么TCP对此未做明确规定,而是让TCP的实现者自行确定。试讨论两种可能的方法的优劣:
1)将失序报文段丢弃。
2)先将失序报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层。
3.一个TCP连接要发送3200B的数据。第一个字节的编号为10010。如果前两个报文各携带1000B的数据,最后一个携带剩下的数据,请写出每个报文段的序号。
4.设TCP使用的最大窗口尺寸为64KB,TCP报文在网络上的平均往返时间为20ms,问TCP协议所能得到的最大吞吐量是多少?(假设传输信道的带宽是不受限的。)
5.已知当前TCP连接的RTT值为35s,连续收到3个确认报文段,它们比相应的数据报文段的发送时间滞后了27ms、30ms与21ms。设a=0.2。计算第三个确认报文段到达后的新的RTT估计值。
6.网络允许的最大报文段的长度为128B,序号用8位表示,报文段在网络中的寿命为30s。求每条TCP连接所能达到的最高数据率。
7.在一个TCP连接中,信道带宽为1Gb/s,发送窗口固定为65535B,端到端时延为20ms.可以取得的最大吞吐率是多少?线路效率是多少?(发送时延忽略不计,TCP及其下层协议首部长度忽略不计,最大吞吐率=一个RTT传输的有效数据/一个RTT的时间。)
8.主机A基于TCP向主机B连续发送3个TCP报文段。第1个报文段的序号为90,第2个报文段的序号为120,第3个报文段的序号为150。
1)第1、2个报文段中有多少数据?
2)假设第2个报文段丢失而其他两个报文段到达主机B,在主机B发往主机A的确认报文中,确认号应是多少?
由于面向连接的服务需要建立连接,且需要保证数据的有序性和正确性,因此它比无连接的服务开销大,而速度和效率方面也要比无连接的服务差一些。
TCP中端口号80标识Web服务器端的HTTP进程,客户端访问Wb服务器的HTTP进程的端口号由客户端的操作系统动态分配。因此选C。
TCP提供的是一对一全双工可靠的字节流服务,所以TCP并不支持广播
当t时刻发生超时时,把ssthresh设为8的一半,即4,把拥塞窗口设为1KB。然后经历10个RTT后,拥塞窗口的大小依次为2、4、5、6、7、8、9、10、11、12,而发送窗口取当时的拥塞窗口和接收窗口的最小值,接收窗口始终为10KB,所以此时的发送窗口为10KB,选A。
实际上该题接收窗口一直为10KB,可知不管何时,发送窗口一定小于等于10KB,选项中只有A选项满足条件,可直接得出选A。
TCP报文段和UDP数据报都包含源端口、目的端口、校验号。由于UDP提供不可靠的传输服务,不需要对报文编号,因此不会有序列号字段,而TCP提供可靠的传输服务,因此需要设置序列号字段。目的P地址属于P数据报中的内容。
TCP伪首部与UDP伪首部一样,包括P分组首部的一部分。P首部中有一个协议字段,用于指明上层协议是TCP还是UDP。17代表UDP,6代表TCP,所以D错误。对于A选项,由于数据偏移字段的单位是4B,也就是说当偏移取最大时TCP首部长度为15×4=60B。由于使用填充,所以长度总是4B的倍数,C正确。
TCP使用滑动窗口机制来进行流量控制。在ACK应答信息中,TCP在接收端用ACK加上接收方允许接收数据范围的最大值回送给发送方,发送方把这个最大值当作发送窗口值,表明发送端在未收到确认之前可以发送的最大字节数,即2000B。
TCP的确认号是指明接收方下一次希望收到的报文段的数据部分第一个字节的编号,可以看出,前一个已收到的报文段的最后一个字节的编号为99,所以C选项正确。报文段的序号是其数据部分第一个字节的编号。选项A、B不正确,因为有可能已收到的这个报文的数据部分不止一个字节,那么报文段的编号就不为99,但可以说编号为99的字节已收到。
TCP是面向字节的。对每个字节进行编号,但并不是接收到每个字节都要发回确认,而是在发送一个报文段的字节后才发回一个确认,所以TCP采用的是对报文段的确认机制。
TCP让每个发送方仅发送正确数量的数据,保持网络资源被利用但又不会过载。为了避免网络拥塞和接收方缓冲区溢出,TCP发送方在任一时刻可以发送的最大数据流是接收方允许的窗口和拥塞窗口中的最小值。
TCP采用大小可变的滑动窗口进行流量控制。
参与TCP连接的两个进程中的任何一个都能提出释放连接的请求。
TCP滑动窗口协议中发送方滑动窗口的大小规定了发送方最多能够传送的分组数目,只有窗口滑动了,才能往后继续发送。分组重传的最大值也是发送方能发送数据的最大值,因而重传分组的数量最多也不能超过滑动窗口的大小。
T℃P使用滑动窗口机制来进行流量控制,其窗口尺寸的设置很重要,如果滑动窗口值设置得太小,那么会产生过多的ACK(因为窗口大可以累计确认,因此会有更少的ACK);如果设置得太大,那么又会由于传送的数据过多而使路由器变得拥挤,导致主机可能丢失分组。
拥塞窗口是发送端根据网络拥塞情况确定的窗口值。
在TCP的“三次握手”中,第二次握手时,SYN和ACK均被置为1。
在A发向B的报文中,seq表示发送的报文段中数据部分的第一个字节在A的发送缓存区中的编号,ACK表示A期望收到的下一个报文段的数据部分的第一个字节在B的发送缓存区中的编号。因此,同一个TCP报文中的seq和ACK的值是没有联系的。在B发给A的报文(捎带确认)中,seq值应和A发向B的报文中的ACK值相同,即201:ACK值表示B期望下次收到A发出的报文段的第一个字节的编号,应是200+2=202。
FIN位用来释放一个连接,它表示本方已没有数据要传输。然而,在关闭一个连接后,对万还可以接续发送数据,所以还有可能接收到数据。
TCP提供的是可靠的字节流传输服务,使用窗口机制进行流量控制与拥塞控制。TCP的滑动窗口机制是面向字节的,因此窗口大小的单位为字节。假设发送窗口的大小为N,这意味着发送端可以在没有收到确认的情况下连续发送N个字节。
在拥塞窗口为34KB时发生了超时,那么慢开始门限值(ssthresh)就被设定为17KB,并且在接下来的一个RTT中拥塞窗口(cwnd)置为1KB。按照慢开始算法,第二个RTT中cwmd=2KB,第三个RTT中cwnd=4KB,第四个RTT中cwnd=8KB。当第四个RTT中发出去的8个报文段的确认报文收到后,cwmd=16KB(此时还未超过慢开始门限值)。所以选C。本题中“这些报文段均得到确认后”这句话很重要。
在慢开始和拥塞避免算法中,拥塞窗口初始为1,窗口大小开始按指数增长。当拥塞窗口大于慢开始门限后停止使用慢开始算法,改用拥塞避免算法。此处慢开始的门限值初始为8,当拥塞窗口增大到8时改用拥塞避免算法,窗口大小按线性增长,每次增加1个报文段,当增加到12时,出现超时,重新设门限值为6(12的一半),拥塞窗口再重新设为1,执行慢开始算法,到门限值6时执行拥塞避免算法。
这样,拥塞窗口的变化就为1,2,4,8,9,10,11,12,1,2,4,6,7,8,9,…,其中第13次传输时拥塞窗口的大小为7。
条件“收到了3个冗余ACK报文”说明此时应执行快恢复算法,因此慢开始门限值设为17KB,并在接下来的第一个RTT中cwmd也被设为17KB,第二个RTT中cwmd=18,第三个RTT中cwmd=19KB,第四个RTT中cwnd=20KB,第四个RTT中发出的报文全部得到确认后,cwd再增加1KB,变为21KB。注意cwnd的增加都发生在收到确认报文后。
本题中出现了拥塞窗口和接收端窗口,因此发送窗口是两者中的最小值。先看拥塞窗口,由于慢开始门限值为2KB,第一个RTT中A拥塞窗口为4KB,按照拥塞避免算法,收到B的确认报文后,拥塞窗口增长为5KB。再看接收端窗口,B通过确认报文中窗口字段向A通知接收端窗口,那么接收端窗口为2KB。因此在下一次发送数据时,A的发送窗口应为2KB,即一个RTT内最多发送2KB。所以A正确。
按照慢开始算法,发送窗口的初始值为拥塞窗口的初始值,即M$S的大小2KB,然后依次增大为4KB、8KB、16KB,然后是接收窗口的大小24KB,即达到第一个完全窗口。因此达到第一个完全窗口所需要的时间为4RTT=40ms。
返回的确认序列号是接收方期待收到对方下一个报文段数据部分的第一个字节的序号,因此乙在正确接收到两个段后,返回给甲的确认序列号是200+300+500=1000。
发生超时后,慢开始门限ssthresh变为16KB/2=8KB,拥塞窗口变为1KB。在接下来的3个RTT内,执行慢开始算法,拥塞窗口大小依次为2KB、4KB、8KB,由于慢开始门限ssthresh为8KB,因此之后转而执行拥塞避免算法,即拥塞窗口开始“加法增大”。因此第4个RTT结束后,拥塞窗口的大小为9KB。
发送方的发送窗口的上限值取接收方窗口和拥塞窗口这两个值中的较小一个,于是此时发送方的发送窗口为min{4000,2000}=2000B,由于发送方还未收到第二个最大段的确认,所以此时主机甲还可以向主机乙发送的最大字节数为2000-1000=1000B。
在确认报文段中,同步位SYN和确认位ACK必须都是1;返回的确认号sq是甲发送的初始序号seq=11220加1,即ack=11221;同时乙也要选择并消耗二个初始序号seq,seq值由乙的TCP进程任意给出,它与确认号、请求报文段的序号没有任何关系。
TCP首部的序号字段是指本报文段数据部分的第一个字节的序号,而确认号是期待收到对方下一个报文段的第一个字节的序号。第三个段的序号为900,则第二个段的序号为900-400=500,现在主机乙期待收到第二个段,因此发给甲的确认号是500。
确认序号ack是期望收到对方下一个报文段的数据的第一个字节的序号,序号seq是指本报文段所发送的数据的第一个字节的序号。甲收到一个来自乙的TCP段,该段的序号seq=1913、确认序号ack=2046、有效载荷为100B,表明到序号1913+100-1=2012为止的所有数据甲均已收到,而乙期望收到下一个报文段的序号从2046开始。因此甲发给乙的TCP段的序号seq_1=ack=2046和确认序号ack_1=seq+100=2013。
一条连接使用它们的套接字来表示,因此(1,x)-(2,y)是在两个端口之间唯一可能的连接。而后建立的连接会被阻止,所以还有可能接收到数据。
发送窗口的上限值=min{接收窗口,拥塞窗口}。4个RTT后,乙收到的数据全部存入缀存,不被取走,接收窗口只剩下1KB(16-1-2-4-8=1)缓存,使得甲的发送窗口为1KB。
按照慢开始算法,发送窗口=min{拥塞窗口,接收窗口},初始的拥塞窗口为最大报文段长度1KB。每经过一个RTT,拥塞窗口翻倍,因此需至少经过5个RTT,发送窗口才能达到32KB,所以选A。这里假定乙能及时处理接收到的数据,空闲的接收缓存≥32KB。
这是因为发送方可能还未重传时,就收到了对更高序号的确认。例如主机A连续发送两个报文段(SEQ=92,DATA共8B)和(SEQ=100,DATA共20B),均正确到达主机B。B连续发送两个确认(ACK=100和ACK=120),但前一个确认帧在传送时丢失。例如A在第一个报文段(SEQ=92,DATA共8B)超时之前收到了对第二个报文段的确认(ACK=120),此时A知道,119号和在119号之前的所有字节(包括第一个报文段中的所有字节)均已被B正确接收,因此A不会再重传第一个报文段。
第一种方法将失序报文段丢弃,会引起被丢弃报文段的重复传送,增加对网络带宽的消耗,但由于用不着将该报文段暂存,可避免对接收方缀冲区的占用。
第二种方法先将失序报文段暂存于接收缓存内,待所缺序号的报文段收齐后再一起上交应用层;这样有可能避免发送方对已被接收方收到的失序报文段的重传,减少对网络带宽的消耗,但增加了接收方缓冲区的开销。
TCP为传送的数据流中的每个字节都编上一个序号。报文段的序号指的是本报文段所发送的数据的第一个字节的序号。因此第一个报文段的序号为10010,第二个报文段的序号为10010+1000=11010,第三个报文段的序号为11010+1000=12010。
最大吞吐量表明在一个RTT内将窗口中的字节全部发送完毕。在平均往返时间20s内,发送的最大数据量为最大窗口值,即64×1024B,64×1024×8/(20×10^-3)≈26.2Mb/s
因此,所能得到的最大吞吐量是26.2M6/s。
新估计RTT=(1-α)×(旧RTT)+α×(新RTT样本),因此有
RTT1=(1-0.2)×35+0:2×27=33.4ms
RTT2=(1-0.2)×33.4+0.2×30≈32.7ms
RTT3=(1-0.2)×32.7+0.2×21≈30.4ms
所以当第三个确认报文到达后,新的RTT估计值是30.4ms。
具有相同编号的报文段不应同时在网络中传输,必须保证当序列号循环回来重复使用时,具有相同序列号的报文段已从网络中消失,类似于GBN原理(2^n一1)。现在序号用8位表示,报文段的寿命为30s,那么在30s的时间内发送方发送的报文段的数目不能多于255个,255×128×8/30=8704b/s所以,每条TCP连接所能达到的最高数据率为8704b/s。
由于收到接收方的确认至少需要一个RTT,因此在一个RTT内,发送的数据量不能超过发送窗口大小,所以吞吐率=发送窗口大小RTT。题目中告诉的是端到端时延,RTT=2×端到端时延,因此RTT=2×20=40ms,所以吞吐率65535×(8/0.04)=13.107Mb/s。
线路效率=吞吐率/信道带宽。本题中,线路效率(13.107Mb/s)/(1000Mb/s)=1.31%。本题在计算时要特别注意单位(是b还是B),要区分Gbs和GBs。
1)注意,TCP传送的数据流中的每个字节都有一个编号,而TCP报文段的序号为其数据部分第一个字节的编号。因此第1个报文中的数据有120-90=30B,第2个报文中的数据有150-120=30B。
2)由于TCP使用累计确认策略,因此当第2个报文段丢失后,第3个报文段就成了失序报文,B期望收到的下一个报文段是序号为120的报文段,所以确认号为120。
六.流量控制
流量控制:让发送方慢点,要让接收方来得及接收。
TCP利用滑动窗口机制实现流量控制。
A向B发送数据,连接建立时,B告诉A:“我的rwnd=400(字节)”,设每一个报文段100B,报文段序号初始值为1。
TCP为每一个连接设有一个持续
计时器,只要TCP连接的一方收
到对方的零窗口通知,就启动
持续计时器。
若持续计时器设置的时间到期,
就发送一个零窗口探测报文段。
接收方收到探测报文段时给出
现在的窗口值。
若窗口仍然是0,那么发送方就
重新设置持续计时器。
七.拥塞控制
1.拥塞控制四种算法
2.慢开始和拥塞避免
一个最大报文段长度MSS
一个传输轮次:
发送了一批报文段
并收到它们的确认
的时间。
一个往返时延RTT。
开始发送一批拥塞
窗口内的报文段到
开始发送下一批拥
塞窗口内的报文段
的时间。
3.快重传和快恢复
Ch5.疑难总结
1.MSS设置得太大或太小会有什么影响?
规定最大报文段M$S的大小并不是考虑到接收方的缓存可能放不下TCP报文段。实际上,MSS与接收窗口没有关系。TCP的报文段的数据部分,至少要加上40B的首部(TCP首部至少20B和IP首部至少20B),才能组装成一个IP数据报。若选择较小的MSS值,网络的利用率就很低。设想在极端情况下,当TCP报文段中只含有1B的数据时,在IP层传输的数据报的开销至少有40B。这样,网络的利用率就不会超过1/41。到了数据链路层还要加上一些开销,网络的利用率进一步降低。但反过来,若TCP报文段很长,那么在IP层传输时有可能要分解成多个短数据报片,在终端还要把收到的各数据报片装配成原来的TCP报文段。传输有差错时,还要进行重传。这些都会使开销增大。
因此,MSS应尽量大一些,只要在IP层传输时不要再分片就行。由于IP数据报所经历的路径是动态变化的,在一条路径上确定的不需要分片的MSS如果改走另一条路径,就可能需要进行分片。因此,最佳的MSS是很难确定的。MSS的默认值为536B,因此在因特网上的所有主机都能接收的报文段长度是536+20×TCP固定首部长度=556B。