From d7579f91b107f593fad233d7b254f51fe0e86c3c Mon Sep 17 00:00:00 2001 From: Omooo <869759698@qq.com> Date: Wed, 15 Jul 2020 15:30:12 +0800 Subject: [PATCH] Update TCP.md --- blogs/computer_network/口水话/TCP.md | 40 ++++++++++++++++++++++++- 1 file changed, 39 insertions(+), 1 deletion(-) diff --git a/blogs/computer_network/口水话/TCP.md b/blogs/computer_network/口水话/TCP.md index 95c3404..bb46267 100644 --- a/blogs/computer_network/口水话/TCP.md +++ b/blogs/computer_network/口水话/TCP.md @@ -11,6 +11,7 @@ TCP 口水话 5. 重传机制 6. 流量控制之滑动窗口 7. 拥塞控制 +8. 场景面试题汇总 #### 概述 @@ -86,4 +87,41 @@ TCP 会把要发送的数据放入发送缓冲区,接收到的数据放入接 #### 拥塞控制 -前面介绍了 TCP 利用滑动窗口来做流量控制,流量控制这种机制确实可以防止发送端向接收端过多的发送数据,但是它只关注了发送端和接收端自身的状况,而没有考虑整个网络的通信状况。 \ No newline at end of file +前面介绍了 TCP 利用滑动窗口来做流量控制,流量控制这种机制确实可以防止发送端向接收端过多的发送数据,但是它只关注了发送端和接收端自身的状况,而没有考虑整个网络的通信状况。 + +拥塞处理主要涉及三个算法,慢启动、拥塞避免、快速重传。 + +为了实现上面的算法,TCP 的每个连接都有两个核心状态值,拥塞窗口(cwnd)和慢启动阈值。 + +拥塞窗口指的是在收到对端 ACK 之前自己还能传输的最大 MSS 段数。接收窗口(rwnd)是接收端的限制,是接收端还能接受的数据量大小;拥塞窗口(cwnd)是发送端的限制,是发送端在还未收到对端 ACK 之前还能发送的数据量大小。 + +拥塞控制算法本质是控制拥塞窗口的变化。 + +在连接建立之初,应该发多少数据才是合适的呢?其实很难,因为不知道对端的处理能力以及途径的网络状况,所以在最初时,发送的数据量很小,但随着时间的推移,拥塞窗口会慢慢的递增,这种机制被称为慢启动。cwnd 每经过一个 RTT,就会变为之前的两倍。 + +但是也不可能无止境的指数级增长下去,否则就失控了,当 cwnd 超过慢启动阈值时,就启动拥塞避免算法,拥塞窗口按线性增长。即没经过一个 RTT,cwnd 增加 1. + +快速重传的含义是:当接收端收到一个不按序到达的数据段时,TCP 立刻发送一个 1 个重复 ACK,当发送端收到 3 个或以上重复 ACK 时,就意识到之前发的包可能丢了,于是马上进行重传,不用傻等到重传定时器超时在重传。 + +#### 常见笔试面试题汇总 + +1.收到 IP 数据包解析以后,它怎么知道这个分组应该投递到上层的哪一个协议呢? + +解析:IP 头里有一个 protocol 字段,指出在上层使用的协议,比如值为 6 表示数据交给 TCP,值为 17 表示数据交给 UDP。 + +2.TCP 提供了一种字节流服务,而收发双方都不保持记录的边界,应用程序应该如何提供他们自己的记录标识呢? + +解析:应用程序使用自己约定的规则来表示消息的边界,比如有一些使用回车+换行(""\r\n")。 + +3.TCP/IP 协议中,MSS 和 MTU 分别工作在哪一层? + +解析:MSS -> 传输层,MTU -> 链路层。 + +4.在 MTU = 1500 字节的以太网中,TCP 报文的最大载荷为多少字节? + +解析:1500(MTU)- 20(IP 头)- 20(TCP 头)= 1460 + +5.假设 MSL 是 60s,请问系统能够初始化一个新连接然后主动关闭的最大速率是多少?(忽略 1~1024 区间的端口) + +解析:(65535-1024)/ 120 +