首页 > 试题广场 >

主机甲中的应用程序使用TCP协议向主机乙发送20KB的数据

[问答题]

主机甲中的应用程序使用TCP协议向主机乙发送20KB的数据。在建立TCP连接后,主机甲按照慢启动(慢开始)和拥塞避免机制发送数据,其拥塞窗口初始值为1,慢启动门限值ssthresh为8,且每次发送TCP报文段均搭载1KB的用户数据。

1. 如传输过程中未发生确认超时,且不考虑流量控制,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?各轮次的拥塞窗口宽度是多少?

2. 如传输过程中未发生确认超时,主机乙返回的确认报文段中“窗口(Window size)”字段值始终为6KB,则主机甲到第几轮次时能够完成题中所述20KB数据的发送?

1. 5次 1 2 4 8 9 
2. 6次 1 2 4 6 6 6
发表于 2018-09-07 16:48:44 回复(0)

(1)没有流控,发送 20KB

轮次 Cwnd 发送数据 剩余数据 ssthresh
1 1 1 19 8
2 2 2 17 8
3 4 4 13 8
4 8 8 5 8
5 9 5 0 8
第 4 轮结束后,就只剩下 5KB 的数据,因为 ssthresh 是 8,发送窗口 Cwnd 也涨到了 8,发送窗口到达门限值,下一次就开始拥塞避免,发送窗口不再 2 倍的增加,而是依次加 1。所以第 5 轮时的 Cwnd 就是 9,可以发送 9KB 的数据,因为要发送的数据只剩下了 5KB,所以一次就发完了。

要 5 轮次,各轮次拥塞窗口宽度分别是 1,2,4,8,9

(2)有流控,发送 20KB

轮次 Cwnd 发送数据 剩余数据 ssthresh 接收窗口 Rwnd
1 1 1 19 8 6
2 2 2 17 8 6
3 4 4 13 8 6
4 6 6 7 8 6
5 6 6 1 8 6
6 6 1 0 8 6

TCP 发送方的窗口 =min[自身窗口,TCP 接收方的接收窗口]

cwnd 的下标表示轮次。

因为慢开始是成倍增长,所以第 3 轮后变为 8KB,但由于受到接收窗口的限制,所以就只能是 6.

要 6 轮次,cwnd 分别为 1,2,4,6,6,6

过程:

def get_cwnd(i, rwnd):
  # i 表示轮次, cwnd 是发送窗口,rwnd 是接收窗口
  cwnd[i] = 2 * cwnd[i-1]
  if cwnd[i] > rwnd:
    cwnd[i] = min(cwnd[i], rwnd)

  return cwnd[i]

# 传输轮次 i
i = 1
# 待传输数据 data
while data > 0:
  data -= get_cwnd(i, rwnc)
  i += 1
编辑于 2022-03-27 11:01:48 回复(0)

如题,不考虑tcp建立。


初始化发送端拥塞窗口为1

之后平方倍数增加至8

共需要5轮次。


同上,接收端发送接收窗口限制,最高为6,共需要6轮次


发表于 2019-10-30 16:58:50 回复(1)