
Linux 网络基础与进阶从网络介质到 TCP 连接状态一、网络先从“怎么连”开始网络可以先用一句大白话理解多个设备通过某种介质连接起来然后按照约定好的协议交换数据。这里面有三个关键词设备电脑、服务器、手机、交换机、路由器等介质网线、光纤、无线电波等协议双方都能理解的数据格式和通信规则。1. 网线、光纤、WiFi 的区别常见接入方式主要有三类网线、光纤和 WiFi。介质传输方式典型特点常见场景网线铜线电信号稳定、成本适中、一般 100 米内效果好办公网络、家庭宽带、机房短距离连接光纤光信号带宽高、距离远、抗电磁干扰强数据中心、楼宇互联、长距离传输WiFi无线电波接入方便、移动性强但容易受墙体和干扰影响家庭、办公区、公共无线网络网线又常叫双绞线。所谓“双绞”就是线芯按一定方式两两缠绕用来抵消一部分电磁干扰。常见线序标准有T568A和T568B。网线还会分为直通线和交叉线直通线两端线序一致比如两端都是T568B交叉线一端T568A另一端T568B。现在很多网卡和交换机支持自动翻转实际使用时不用像早期设备那样频繁区分直通线和交叉线。但理解线序仍然有价值尤其是在现场排查“线做了但链路不亮”的问题时。光纤使用光信号传输优势是距离远、带宽高、抗干扰强。缺点也明显模块、跳线、熔接和维护成本都比普通网线高。WiFi 的优势是不用布线设备移动方便问题是信号会受墙体、距离、同频干扰、安全配置影响。排查无线网络时不能只看“有没有连上”还要看信号强度、频段、信道、认证方式和终端位置。2. bit、Byte 和数制网络速率里最容易混淆的是bit和Byte。bit是比特是信息传输的基本单位Byte是字节1 Byte 8 bitMbps表示每秒多少兆比特MB/s表示每秒多少兆字节。所以看到宽带、网卡、交换机标注100Mbps、1Gbps、10Gbps时它们说的是 bit 速率不是直接等于文件下载时看到的MB/s。运维还经常会遇到二进制和十六进制IP 地址、子网掩码的本质离不开二进制MAC 地址通常使用十六进制表示权限位、协议字段、抓包内容里也经常出现不同进制。十进制转二进制可以使用“除 2 取余倒序排列”的方法。数制不是为了背公式而是为了看懂网络里的地址、掩码、协议字段。比如子网划分时为什么/24是255.255.255.0继续往下拆就一定会回到二进制。二、交换机局域网里的二层转发设备交换机主要工作在 OSI 的数据链路层也就是二层。它的核心任务是根据 MAC 地址在局域网内转发数据帧。交换机和集线器最大的区别在于交换机会学习 MAC 地址并把每个端口变成相对独立的冲突域。这样同一台交换机上的多台主机通信时不需要所有设备都挤在同一条共享链路里抢着发数据。1. MAC 地址MAC 地址是网卡在数据链路层的标识长度是 48 位也就是 6 字节通常写成十六进制格式00:1A:2B:3C:4D:5E它可以拆成两部分部分含义前 24 位OUI厂商标识由 IEEE 分配后 24 位设备标识由厂商分配MAC 地址解决的是“在同一个局域网内找到哪块网卡”的问题。它和 IP 地址不是一回事MAC 地址偏二层负责本地链路上的帧转发IP 地址偏三层负责跨网段寻址和路由。2. 以太网数据帧格式交换机转发的基本单位是数据帧。一个以太网帧里最关键的是目的 MAC、源 MAC、类型/长度、数据和 FCS 校验。字段作用目的 MAC接收方网卡地址源 MAC发送方网卡地址类型/长度标记上层协议类型或数据长度Payload上层交给数据链路层的数据FCS用于检查帧在传输过程中是否损坏交换机做转发时重点看的是目的 MAC做学习时重点看的是源 MAC。3. 交换机如何学习和转发交换机内部维护一张 MAC 地址表可以理解为MAC 地址 - 交换机端口它的工作过程可以分成四步。第一步交换机收到数据帧后先学习源 MAC。比如主机 A 从 1 号口发来数据交换机就把“主机 A 的 MAC 在 1 号口”记录下来。第二步交换机查看目的 MAC。如果 MAC 地址表里有对应端口就单播转发如果表里没有就会向除入端口之外的其他端口泛洪。第三步对端主机回应时交换机会继续学习回应帧里的源 MAC。第四步当双方 MAC 都被学习到以后再通信就可以直接单播不需要继续泛洪。MAC 地址表不是永久不变的。常见交换机会给动态学习到的表项设置老化时间如果某个 MAC 长时间没有通信对应记录会被清理。后续再次通信时交换机会重新学习。4. 单工、半双工和全双工双工模式描述的是通信双方能不能同时收发数据。模式含义类比单工只能单向传输广播喇叭半双工可以双向但不能同时对讲机全双工可以双向同时传输打电话现代交换网络中大多数场景都是全双工。接口两端如果双工协商异常可能出现丢包、重传、速率低、连接不稳定等问题。现场排查链路质量时速率、双工、错误包统计都值得一起看。三、路由器跨网段转发数据包交换机主要解决同一局域网内的二层通信路由器解决的是不同网络之间的三层通信。路由器的核心任务是根据目标 IP 地址查路由表选择下一跳或出接口把数据包继续转发出去。1. 路由器的基本工作流程路由器转发数据包时一般会经过这些步骤从某个接口收到数据包查看数据包里的目标 IP 地址判断目标 IP 是否属于自己的直连网段如果不是直连网段就查询路由表找到最匹配的路由后从对应接口或下一跳转发如果没有匹配路由通常走默认路由没有默认路由时可能返回目标不可达。一个常见场景是主机要访问其他网段的目标地址时会先把数据交给自己的网关。网关通常就是本网段出口路由器的接口地址。后续每一台路由器都重复“查目标 IP、查路由表、选下一跳”的动作直到数据到达目标网段。2. 路由表是怎么来的路由表可以理解为路由器手里的“地图”。常见来源有三类路由类型来源特点直连路由接口配置 IP 且接口处于 up 状态自动生成最基础静态路由管理员手工配置稳定、可控但维护成本高动态路由路由协议学习适合网络规模大、拓扑变化多的环境默认路由也很重要。它可以理解为“找不到更精确路线时的兜底出口”。在 Linux 主机上默认网关本质上就是主机路由表里的默认路由。交换机和路由器可以这样区分对比项交换机路由器主要层级数据链路层网络层主要依据MAC 地址IP 地址主要范围同一局域网不同网段之间核心表项MAC 地址表路由表四、OSI 七层模型把复杂通信拆开看OSI 七层模型是一个理论框架它把网络通信拆成七层。分层的价值不在于背表而在于排查问题时能快速定位到底是物理链路、二层转发、三层路由还是上层服务出了问题。层级名称主要作用常见例子7应用层面向应用提供网络服务HTTP、FTP、DNS6表示层数据格式、加密、压缩TLS、MIME5会话层建立和管理会话RPC、NetBIOS4传输层端到端传输TCP、UDP3网络层寻址和路由IP、ICMP、OSPF2数据链路层成帧、MAC 地址、局域网转发Ethernet、PPP1物理层比特流在介质上传输网线、光纤、无线信号排查网络故障时可以按层次往下拆网卡灯不亮、链路不稳定优先看物理层同网段不通重点看二层、ARP、交换机、VLAN跨网段不通重点看 IP、网关、路由、防火墙端口不通重点看传输层和服务监听域名解析异常重点看 DNS 和应用层配置。五、TCP/IP 模型现实网络里的协议栈OSI 更像理论地图TCP/IP 模型更贴近日常使用的互联网协议栈。常见说法是四层或五层应用层传输层网络层数据链路层物理层。各层常见协议可以这样记TCP/IP 层级常见协议或对象重点应用层HTTP、HTTPS、FTP、SMTP、DNS应用之间怎么交流传输层TCP、UDP进程之间怎么传输网络层IP、ICMP、ARP 等主机之间怎么寻址和转发数据链路层Ethernet、MAC、帧同一链路怎么交付物理层网线、光纤、无线信号比特怎么变成物理信号这里要注意ARP 常被放在网络层与数据链路层之间讨论因为它解决的是“已知 IP如何找到对应 MAC”的问题。实际排查时不用纠结它到底归哪一层知道它连接了三层 IP 和二层 MAC 就够用了。六、数据封装与解封装数据从应用发出去不是直接“裸奔”到网络里而是会经过一层层封装。可以把它类比成寄快递网络过程快递类比用户数据要寄出的物品传输层封装加上快递单标明端口等信息网络层封装加上收件地址也就是 IP 信息数据链路层封装加上快递袋标明 MAC 信息物理层发送快递员真正把包裹送出去接收端解封装对端逐层拆开拿到原始数据1. 发送端封装发送端从上往下走应用层产生数据传输层加 TCP/UDP 头形成段网络层加 IP 头形成包数据链路层加以太网头和尾形成帧物理层把帧转换成比特流通过介质发送。这里有几个常见名称层级数据单元应用层Data传输层Segment网络层Packet数据链路层Frame物理层Bits也就是说运维里常说的“数据包”“数据帧”“TCP 段”不是完全同一个东西它们对应不同层级。2. 接收端解封装接收端从下往上走物理层把信号还原成比特数据链路层检查目的 MAC如果不是发给自己的通常直接丢弃网络层检查目标 IP传输层根据端口号交给对应进程应用层拿到最终数据。封装和解封装这条线很重要。很多网络问题看似复杂其实是在问数据在哪一层被挡住了或者哪一层的头部信息不对。七、TCP 三次握手连接建立前先确认双方能力TCP 是面向连接的可靠传输协议。正式传数据之前客户端和服务端要先建立连接这个过程就是三次握手。三次握手可以这样理解第一次握手客户端发送 SYN客户端告诉服务端“我要建立连接”并带上自己的初始序列号seqx。客户端进入SYN_SENT状态。第二次握手服务端发送 SYNACK服务端收到后回复确认号ackx1同时带上自己的初始序列号seqy。服务端进入SYN_RCVD状态。第三次握手客户端发送 ACK客户端确认服务端的序列号回复acky1。双方进入ESTABLISHED状态连接建立完成。几个字段要分清字段作用SYN请求建立连接并同步初始序列号ACK确认收到对方数据seq当前发送方向的数据序列号ack期望对方下次发送的序列号1. 为什么不是两次握手两次握手最大的问题是服务端无法确认客户端是否收到了自己的回复。如果客户端发送的旧 SYN 因为网络延迟很久后才到达服务端而服务端两次握手就直接建立连接就可能产生一个客户端根本不需要的历史连接浪费服务端资源。三次握手要求客户端必须再发一次 ACK服务端才能确认客户端能发、服务端能收服务端能发、客户端也能收。2. 为什么不是四次握手四次也能做到可靠建立连接例如客户端发送 SYN服务端回复 ACK服务端再发送 SYN客户端回复 ACK。但第二步和第三步可以合并成SYNACK没有必要拆成两次。TCP 的三次握手就是在可靠性和效率之间做的平衡。八、TCP 四次挥手全双工连接要分方向关闭TCP 连接是全双工的。也就是说客户端到服务端是一条方向服务端到客户端又是一条方向。关闭连接时两个方向都要分别确认“我这边没有数据要发了”。四次挥手可以拆成这样第一次挥手主动关闭方发送 FIN主动关闭方表示“我这边数据发完了准备关闭发送方向。”随后进入FIN_WAIT_1。第二次挥手被动关闭方回复 ACK被动关闭方确认收到 FIN但它可能还有数据没发完所以先进入CLOSE_WAIT。主动关闭方收到 ACK 后进入FIN_WAIT_2。第三次挥手被动关闭方发送 FIN当被动关闭方也没有数据要发了再发送 FIN进入LAST_ACK。第四次挥手主动关闭方回复 ACK主动关闭方确认收到对端 FIN进入TIME_WAIT等待一段时间后最终进入CLOSED。为什么建立连接是三次断开连接是四次关键点在于建立连接时服务端的ACK和SYN可以合并断开连接时收到对方FIN只代表“对方不发了”不代表“我自己也发完了”。因此关闭两个方向通常需要拆成两轮确认。九、TCP 11 种状态速查TCP 状态很多但不要死背。先按两条主线看建立连接LISTEN、SYN_SENT、SYN_RCVD、ESTABLISHED释放连接FIN_WAIT_1、FIN_WAIT_2、CLOSE_WAIT、LAST_ACK、TIME_WAIT、CLOSING、CLOSED。状态常见位置含义CLOSED双方没有连接或连接已经关闭LISTEN服务端服务端正在监听端口等待客户端连接SYN_SENT客户端客户端已发送 SYN等待服务端响应SYN_RCVD服务端服务端收到 SYN并已发送 SYNACKESTABLISHED双方TCP 连接已建立可以传输数据FIN_WAIT_1主动关闭方已发送 FIN等待对方 ACKFIN_WAIT_2主动关闭方已收到 ACK等待对方 FINCLOSE_WAIT被动关闭方已收到对方 FIN等待本地应用关闭连接LAST_ACK被动关闭方已发送 FIN等待对方最后 ACKTIME_WAIT主动关闭方已发送最后 ACK等待 2MSL 后关闭CLOSING双方同时关闭时可能出现双方几乎同时发送 FIN等待最终 ACK排查时有几个状态特别常见LISTEN说明服务端进程已经在监听端口ESTABLISHED说明连接已经建立SYN_SENT长时间存在常见于目标不通、防火墙拦截、服务端无响应CLOSE_WAIT过多常见于本地应用没有及时关闭连接TIME_WAIT较多通常出现在主动关闭连接的一方数量多不一定就是故障要结合端口耗尽和连接复用情况判断。十、常见易错点1. 把 MAC 地址和 IP 地址混在一起MAC 地址用于本地链路交付IP 地址用于跨网络寻址。主机访问同网段目标时最终还是要知道目标 MAC访问不同网段目标时主机通常会把数据帧交给网关的 MAC再由网关继续路由。2. 以为交换机会根据 IP 转发普通二层交换机主要根据 MAC 地址表转发数据帧。它学习源 MAC查询目的 MAC找不到就泛洪。IP 路由是三层设备的工作。3. 只看“能不能 ping 通”ping主要基于 ICMP能说明一部分网络可达性但不能证明业务端口一定可用。端口监听、防火墙策略、应用进程、DNS 解析、路由路径都可能影响最终访问。4. 把网络速率和文件传输速度直接画等号1Gbps是每秒 1 千兆 bit换算成字节理论上约等于125MB/s实际还会受到协议开销、磁盘性能、窗口大小、丢包重传等因素影响。5. 看到 TIME_WAIT 就认为一定异常TIME_WAIT是 TCP 正常关闭流程的一部分用来确保最后一个 ACK 有机会被对端收到也避免旧连接的数据影响后续新连接。是否异常要看数量、持续时间、端口资源和业务表现。十一、总结Linux 网络基础可以按一条链路理解物理介质负责把设备连接起来交换机根据 MAC 地址在局域网内转发帧路由器根据 IP 地址在网段之间转发包OSI 和 TCP/IP 模型帮助拆解通信层次数据发送时逐层封装接收时逐层解封装TCP 使用三次握手建立连接使用四次挥手释放连接TCP 状态能帮助判断连接卡在哪个阶段。真正排查网络故障时的思路是顺着层次往下拆物理链路是否正常二层是否能找到 MAC三层路由是否可达传输层端口是否通上层服务是否真正响应。