继续整理,上期传送门.
传输层
UDP的简单性,导致了强的实时性
传输层的两个概念:
多路复用: 主机将不同套接字中的数据块加上首部信息生成报文端,将其传输到网络中(封装)
多路分解: 将传输层报文端数据交付到正确的套接字
-
假设某应用程序每秒产生一个60 byte的数据块,每个数据块被封装在一个TCP报文中,再封装在一个IP数据报中,那么最后每个数据报所包含的应用数据占比是()
A.20% B.40% C.60% D.80%
TCP头部分部为 20 byte; IP头部如果没有选项部分也是20 byte; 60 / (60+20+20) = 60% ,而UDP头部为8 byte; -
如果用户程序使用UDP进行数据传输,那么()协议必须承担可靠性方面的全部工作
A.数据链路层 B.网际层 C.传输层 D.应用层 -
下列关于UDP的描述,错误的是()
A.UDP报头主要包括端口号、长度、校验和等字段
B.UDP长度字段是UDP数据报的长度,包括伪首部的长度 (伪首部中包括IP地址信息,但不属于UDP报文端)
C.UDP校验和对伪首部、UDP数据报的长度以及应用层数据进行校验
D.伪首部包括IP分组报头的一部分
-
下列关于UDP校验和错误的是()
A.UDP的校验和功能不是必须的,可不使用
B.如果UDP校验和计算结果为0,则在校验和字段填充0 (应该再取反,取全1)
C.UDP校验和字段的计算包括一个伪首部、UDP首部和携带的用户数据
D.UDP校验和的计算方法是二进制反码运算求和再取反
注:当源主机不想计算校验和,则令该字段为0
校验和计算:二进制反码运算求和再取反
如何得到校验和?
将UDP报文段的所有byte + 伪首部, 取二进制运算求和,结果再取反即为校验码
(反码计算意思是:从低到高位逐列进行计算,0和0加得0,0和1加得1,1和1加得0但要产生一个进位1,加到下一列,若最高位产生了进位,则最后得到的结果要加1。)
举个例子 我们计算出结果为 01001010 11000010 取反码为 10110101 00111101为校验和
这个时候接收方将接收数据的和 + 校验和,没有差错的话应该全为1,否则有差错而丢弃。 -
题目见下图
以太网帧的数据段的最大长度为1500 byte
1500 byte 减去 IP数据报的首部20 byte,IP片的数据长度最大为1500 - 20 = 1480 byte
IP的数据段 为 UDP报文端 : 8(UDP首部) + 8192 = 8200 byte
8200 / 1480 = 5 … 800 所以应该划分 6 个IP数据报片
对于IP片偏移,其单位为8 byte 需要除以8,如下:
-
主机甲与主机乙已建立TCP连接,甲始终以MSS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发出超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是()
A.10KB B.12KB C.14KB D.15KB
注:拥塞窗口 cwnd:发送方根据当前网络拥塞程度的估计而确定的窗口值
接收窗口 rwnd:接收方根据自己缓存大小动态调整发送方的发送窗口大小
实际发送窗口 = min(接收窗口、拥塞窗口)
本题实际上已知接收窗口rwnd为10KB,发送窗口最终应该不大于10,只能选A
正常解法:TCP的拥塞机制
1.慢启动:TCP发送速率起始慢,在慢启动时指数增加(1,2,4,8…);
当 lwnd = ssthresh(慢开始门限) 进入拥塞避免;
如果指数下一个值 > ssthresh,则让cwnd = ssthresh
2.拥塞避免:谨慎增加cwnd,每个RTT,cwnd加1个MSS;
丢包时,将ssthresh = cwnd / 2,cwnd = 1 重新回到慢启动
3个ACK冗余,至快速恢复
3.快速恢复:快速恢复前做两件事,一是 cwnd = cwnd / 2,二是 ssthresh = cwnd / 2,
收到冗余ACK,cwnd增加一个MSS(线性增长)
题目中到达超时,也就是丢包,ssthresh = cwnd / 2 = 4,cwnd = 1
后面10RTT为 2、4、5、6、7、8、9、10、11、12 而实际发送窗口 = min(10,12)= 12 -
()字段包含在TCP首部中,而不包含在UDP首部
A.目的端口号 B.序列号 C.校验和 D.目的IP地址(都没u) -
以下关于TCP报文格式的描述,错误的是()
A.报头长度为20~60byte,其中固定部分为20byte
B.端口号字段依次表示源端口号与目的端口号
C.报头长度总是4的倍数个字节
D.TCP校验和伪首部中IP分组头的协议字段为17 (应该是6,17是UDP)
首部长度4个bit 最高为15,单位为4byte,最高60byte (IPv4也有首部长度) -
为保证数据传输的可靠性,TCP采用了对()确认的机制
A.报文端 B.分组 C.字节 D.比特
TCP头部有确认号,,用于确认下一个报文端的第一个字节的序号,而序号是本报文端第一字节的序号 -
滑动窗口的作用()
A. 流量控制 B. 拥塞控制 C.路由控制 D.差错控制
拥塞控制是TCP跟踪一个变量来限制TCP发送方发送速率,滑动窗口对应流量控制 -
以下关于TCP工作原理的描述,错误的是()
A.TCP连接建立过程需要经过“三次握手”的过程
B.当TCP传输连接建立后,客户端与服务器端的应用进程进行全双工的字节流传输
C.TCP传输连接的释放过程很复杂,只有客户端可以主动提出释放连接的请求 (四次挥手,双方都可以)
D.TCP连接的释放需要经过“四方挥手“的过程
注: TCP 建立:三次挥手 释放:四次挥手
-
TCP滑动窗口的值过大,对主机的影响()
A. 由于传送数据过多而使路由器拥挤,主机可能丢失分组
B.产生过多ACK
C.由于接收的数据多,而使主机的工作速度加快(无直接因果)
D.由于接收的数据多,而使主机的工作速度变慢
-
A与B之间建立了TCP连接,A向B发送了一个报文段,其中序号字段seq=200,确认号字段ACK=201,数据部分有2个字节,那么B对报文的确认报文段中()
A. seq=202,ack=200 B.seq=201,ack=201 C.seq=201,ack=202 D.seq=202,ack=201
在B发给A的确认报文中,seq的值应和A发向B的报文中的ACK的相同,即201;
ACK的值应该是A发向B的报文的序号加上A发向B的报文中数据的长度,即200+2=202,表示B下次希望收到序号为202的报文段。 -
在一个TCP连接中。MSS为1KB,当拥塞窗口为34KB时发生了超时事件。如果在接下来的4RTT内报文段传输都是成功的,那么拥塞窗口的大小是()
A.8KB B.9KB C.16KB D.17KB
老考点:TCP拥塞控制 1,2,4,8,16 4个RTT(间隔) -
主机甲与乙之间建立了TCP连接,TCP最大段长度为1000字节。若主机甲的当前拥塞窗口为4000字节,在主机甲向主机乙连续发送两个最大段后,成功收到主机乙发送的第一个段的确认段,确认段中通告的接收窗口大小为2000字节,则此时主机甲还可以向主机乙发送的最大字节数是()
A.1000 B. 2000 C.3000 D.4000
实际发送窗口为 min{cwnd,rwnd}= min{4000,2000} = 2000
由于主机乙已经确认了1000字节(存入TCP缓存),对乙来说接收窗口rwnd可用空间为 2000-1000 = 1000,即为主机甲还可以向主机乙发送的最大字节数。 -
如果主机1的进程以端口x与主机2端口y建立了一条TCP连接,如果希望再在这两个端口建立一个TCP连接,那么会()
A.建立失败,不影响先建立连接的传输
B.建立成功,并且两个连接都可以正常传输
C.建立失败,先建立的连接被断开
D.建立失败,两个连接都被断开
TCP通过套接字sokect(主机IP地址、端口号)来连接,唯一标识为(目的ip,目的端口,源ip,源端口)四元组构成;
题目中唯一标识四元组固定了,无法建立多个TCP端口,而TCP连接很稳定,不会轻易断开; -
某客户通过一个TCP连接向服务器发送数据的部分过程如下图所示,客户在t0第一次收到确认号为100的段,并发送了seq=100的段,但发送丢失。若TCP支持快速重传,则用户发送seq=100段的时刻是()
A.T1 B.T2 C.T3 D.T4
快速重传:当收到3个重复的ACK,直接重传而不等待超时,所以图上结果为t3. -
当前TCP连接的RTT值为35ms,连续收到3个确认报文段,它们比相应的数据报文段的发送时间滞后了27ms,30ms与21ms,若a = 0.2,计算第三个确认报文段到达后新的RTT的估计值。
注:RTT计算公式——新估计 RTT = (1-a) * (旧RTT) + a * 新RTT
对第一个: 0.8 * 35 + 0.2 * 27 = 33.4ms
第二个:0.8 * 33.4 + 0.2 * 30 = 32.72ms
第三个: 0.8 * 30.72 + 0.2 * 21 = 30.376ms -
网络允许的最大报文段的长度为128字节,序号用8bit表示,报文段在网络中的寿命为30s。求每一条TCP连接所能达到的最高数据率。
注:TCP每个寿命内最多发送序号数-1个报文段 理由:题目8bit序号 为0 ~ 28 - 1,若 发送了0又发送了
28 - 1,则28 - 1的下一个确认号为0,接收端不知道这个0是原分组还是新分组。
数据率(吞吐率也类似) = 有效数据大小 / 周期 = (28 - 1)* 128 * 8 / 30 = 8704 bit / s -
假设TCP报文段载荷为1500 Byte,最大分组存活时间为120s,那么要使TCP报文段的序列号不会循环而重叠,线路允许的最快速度是多大?
序号:32 bit
报文段最多 (2 32 - 1) / 1500 = 2863312 个 (四舍五入)
2863312 * 1566 / 120 = 37366221.6 (1566 = 1500 + 20 + 20 + 18 + 8 如下图)
如有错误还望指出···