你好,我是邵亚方。
如果你做过 Linux 上面网络相关的开发,或者分析过 Linux 网络相关的问题,那你肯定吐槽过 Linux 系统里面让人眼花缭乱的各种配置项,应该也被下面这些问题困扰过:
Client 为什么无法和 Server 建立连接呢?
三次握手都完成了,为什么会收到 Server 的 reset 呢?
建立 TCP 连接怎么会消耗这么多时间?
系统中为什么会有这么多处于 time-wait 的连接?该这么处理?
系统中为什么会有这么多 close-wait 的连接?
针对我的业务场景,这么多的网络配置项,应该要怎么配置呢?
……
因为网络这一块涉及到的场景太多了,Linux 内核需要去处理各种各样的网络场景,不同网络场景的处理策略也会有所不同。而 Linux 内核的默认网络配置可能未必会适用我们的场景,这就可能导致我们的业务出现一些莫名其妙的行为。
所以,要想让业务行为符合预期,你需要了解 Linux 的相关网络配置,让这些配置更加适用于你的业务。Linux 中的网络配置项是非常多的,为了让你更好地了解它们,我就以最常用的 TCP/IP 协议为例,从一个网络连接是如何建立起来的以及如何断开的来开始讲起。
TCP 连接的建立过程会受哪些配置项的影响?