网络基本概念
<h2>RTT</h2>
<p>数据包在 2 端之间往返一个来回的时间</p>
<h2>MTU</h2>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=7de225c00be80ae2d799cc4f70dd1677&amp;file=file.png" alt="" /></p>
<p>总结:
如果 IP MTU = 1500
以太帧 MTU = 1500 + 14 = 1514,很经典的数字
再加上 CRC 部分:1514 + 4 = 1518</p>
<p>超过 MTU 会怎样?
IP 协议层会分包,而有的设备则直接丢掉。</p>
<p>> 参考文档:<a href="https://info.support.huawei.com/info-finder/encyclopedia/zh/MTU.html">https://info.support.huawei.com/info-finder/encyclopedia/zh/MTU.html</a></p>
<h2>邻居表</h2>
<p>邻居:同一个局域网下的主机。邻居之间仅隔一跳的距离。能直接通信的,也只有邻居。
邻居表:即 ARP 缓存表,记录 IP 和 MAC 的关系。其中的 IP 是同一局域网下的主机 IP(即邻居)。网关设备也属于同一局域网下。</p>
<p>更新时机:
1、上层要发送数据时,如表中没有项,则发出 ARP 广播请求(特别说明一下:在等待应答的过程中,数据包是被缓存下来的,缓存过多的话,会被丢掉)
2、收到 ARP 响应时更新,即使响应不是发给自己的?
3、免费 ARP 主动更新</p>
<p>流程位置:
1、在给网口添加 IP 时,系统会自动添加一条路由项,设置网口所在局域网路由为直接转发(路由目标地址为 0.0.0.0):</p>
<p><img src="https://www.showdoc.com.cn/server/api/attachment/visitFile?sign=6aa51f5fa699420168ec5fe487d9c966&amp;file=file.png" alt="" /></p>
<p>2、当有数据包发送,先在 IP 层查路由获取下一跳,这里查出来要么是具体网关,要么是 0.0.0.0(即在同一局域网上)。如果是网关,则 ARP 查询网关 IP 的 MAC;如果是 0.0.0.0 则查的是数据包的目标 IP 的 MAC。</p>
<h2>MSS</h2>
<p>TCP 协议里的概念,其目的是为了尽量避免在 IP 层进行分包,提高性能。
在 TCP 连接里,只在 SYN 和 SYN+ACK 的包里带有 MSS 信息。
MSS 指定了 TCP 数据段中数据部分的最大字节数。
一般来说,以太网的 MTU 为 1500,则 TCP 的 MSS 初始化值通常为 1500 - 20 - 20 = 1460。经过协商后,最终 MSS 会取双方最小的那个。</p>
<p>在 GSO 场景下:
发送的数据包会很大,但 MSS 还是记录为小的?</p>
<p>问题:
MSS 会动态调整吗?本身不会动态调整,但如果探测到 MTU 变化,肯定会影响真正的 MSS(即可能比协商的 MSS 更小)</p>
<h2>其它</h2>
<p>> 参考文档:<a href="https://mp.weixin.qq.com/s/ZWgZatLUmhERovCX59Buzg">https://mp.weixin.qq.com/s/ZWgZatLUmhERovCX59Buzg</a></p>
<h2>其它</h2>
<p>用 <code>ss -i</code> 命令可以查看连接的 cwnd 信息。</p>