计算机网络:TCP/UDP相关概念详解

由于TCP相关的概念在网络上众说纷纭,没有一个统一的版本,面试的时候也只是走走过场,在这篇文章,会参考Top-Down这本书的介绍对TCP相关的面试作答,笔试作答作一个规范。

004_001.jpg

先来看看UDP,这是一个比较简单的协议

UDP:

他的特点是?

1.不可靠,没有顺序的传递packet。

2. connectionless,没有三次握手(3-way shake hands)

3. 很小的header size

4.没有拥塞控制,在拥挤的情况下也能发挥作用

他用在什么地方?

  1. 流媒体应用 streaming multimedia apps (loss tolerant, rate sensitive)
  2. DNS
  3. SNMP
  4. HTTP 3.0

有一个需要注意的点:udp有一个保证可靠性的header,checksum,校验数据是否出问题。

TCP:

可靠性:

0. 首先它有checksum保证传输数据不出错

  1. Stop and Wait Operation: 有序列号seq,ACK,保证数据的完整性Integrity,用piplining提高利用率utilization

2.利用piplining的时候,有Go-Back-N和Selective-Repeat机制(mechanism),超时重传(over timeout retransmission),快重传(fast retransmission)

3. MSS(maximum segment size) ,约定好最大segment size,重传也能续上

4.在复杂的网络,需要流量控制(flow control)和拥塞控制(congestion control)

如何定义timeout?

一般来说,TimeoutInterval = EstimatedRTT + 4*DevRTT

EstimatedRTT可以由sampleRTT计算而来,

4*DevRTT被叫做safety margin

DevRTT = (1-b)*DevRTT + b*|SampleRTT-EstimatedRTT|

什么是seq和ACK?

seq指的是,发出信息的序列号

ACK指的是,期望收到信息的序列号,因此收到三个一样的ACK,快重传这个ACK的seq

流量控制:

TCP receiver 会发送tcp报文,在报文里有一个 rwnd 区域会告知 free buffer space

拥塞控制:

  1. AIMD(Additive Increase Multiplicative Decrease),拥塞也是使用一个窗口来控制,这个窗口的大小随着ACK的增加一点一点增加,但是随着loss成倍的减小
  2. slow start (慢开始),建立连接的时候,cwnd初始设置为1,每次RTT变成两倍,直到first loss event发生
  3. fast recovery(快恢复),如果执行到三个同样ACK时,使用AIMD减小窗口,而不是重新slow start

建立连接:

为了建立稳定的连接,并且避免历史ACK对连接的影响

1.sender send SYNbit=1,Seq=x

2. receiver send SYNbit=1 Seq=y,ACK=x+1

3.sender send ACK=y+1

4.receiver got and start the connection


计算机网络:TCP/UDP相关概念详解
https://yiyuwang.be/2022/01/17/2022-01-17-458620728/
作者
StevenWong
发布于
2022年1月17日
许可协议