Linux 网络基础与进阶:从网络介质到 TCP 连接状态

一、网络先从"怎么连"开始

网络可以先用一句大白话理解:多个设备通过某种介质连接起来,然后按照约定好的协议交换数据。
这里面有三个关键词:
- 设备:电脑、服务器、手机、交换机、路由器等;
- 介质:网线、光纤、无线电波等;
- 协议:双方都能理解的数据格式和通信规则。
1. 网线、光纤、WiFi 的区别
常见接入方式主要有三类:网线、光纤和 WiFi。
| 介质 | 传输方式 | 典型特点 | 常见场景 |
|---|---|---|---|
| 网线 | 铜线电信号 | 稳定、成本适中、一般 100 米内效果好 | 办公网络、家庭宽带、机房短距离连接 |
| 光纤 | 光信号 | 带宽高、距离远、抗电磁干扰强 | 数据中心、楼宇互联、长距离传输 |
| WiFi | 无线电波 | 接入方便、移动性强,但容易受墙体和干扰影响 | 家庭、办公区、公共无线网络 |
网线又常叫双绞线。所谓"双绞",就是线芯按一定方式两两缠绕,用来抵消一部分电磁干扰。常见线序标准有 T568A 和 T568B。

网线还会分为直通线和交叉线:
- 直通线 :两端线序一致,比如两端都是
T568B; - 交叉线 :一端
T568A,另一端T568B。
现在很多网卡和交换机支持自动翻转,实际使用时不用像早期设备那样频繁区分直通线和交叉线。但理解线序仍然有价值,尤其是在现场排查"线做了但链路不亮"的问题时。
光纤使用光信号传输,优势是距离远、带宽高、抗干扰强。缺点也明显:模块、跳线、熔接和维护成本都比普通网线高。

WiFi 的优势是不用布线,设备移动方便;问题是信号会受墙体、距离、同频干扰、安全配置影响。排查无线网络时,不能只看"有没有连上",还要看信号强度、频段、信道、认证方式和终端位置。
2. bit、Byte 和数制
网络速率里最容易混淆的是 bit 和 Byte。
bit是比特,是信息传输的基本单位;Byte是字节,1 Byte = 8 bit;Mbps表示每秒多少兆比特;MB/s表示每秒多少兆字节。
所以看到宽带、网卡、交换机标注 100Mbps、1Gbps、10Gbps 时,它们说的是 bit 速率,不是直接等于文件下载时看到的 MB/s。
运维还经常会遇到二进制和十六进制:
- IP 地址、子网掩码的本质离不开二进制;
- MAC 地址通常使用十六进制表示;
- 权限位、协议字段、抓包内容里也经常出现不同进制。
十进制转二进制可以使用"除 2 取余,倒序排列"的方法。

数制不是为了背公式,而是为了看懂网络里的地址、掩码、协议字段。比如子网划分时,为什么 /24 是 255.255.255.0,继续往下拆就一定会回到二进制。
二、交换机:局域网里的二层转发设备

交换机主要工作在 OSI 的数据链路层,也就是二层。它的核心任务是:根据 MAC 地址在局域网内转发数据帧。

交换机和集线器最大的区别在于:交换机会学习 MAC 地址,并把每个端口变成相对独立的冲突域。这样同一台交换机上的多台主机通信时,不需要所有设备都挤在同一条共享链路里抢着发数据。
1. MAC 地址
MAC 地址是网卡在数据链路层的标识,长度是 48 位,也就是 6 字节,通常写成十六进制格式:
text
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 地址表,可以理解为:
text
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、DNS |
| 6 | 表示层 | 数据格式、加密、压缩 | TLS、MIME |
| 5 | 会话层 | 建立和管理会话 | RPC、NetBIOS |
| 4 | 传输层 | 端到端传输 | TCP、UDP |
| 3 | 网络层 | 寻址和路由 | IP、ICMP、OSPF |
| 2 | 数据链路层 | 成帧、MAC 地址、局域网转发 | Ethernet、PPP |
| 1 | 物理层 | 比特流在介质上传输 | 网线、光纤、无线信号 |
排查网络故障时,可以按层次往下拆:
- 网卡灯不亮、链路不稳定,优先看物理层;
- 同网段不通,重点看二层、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
客户端告诉服务端:"我要建立连接",并带上自己的初始序列号
seq=x。客户端进入SYN_SENT状态。 -
第二次握手:服务端发送 SYN+ACK
服务端收到后,回复确认号
ack=x+1,同时带上自己的初始序列号seq=y。服务端进入SYN_RCVD状态。 -
第三次握手:客户端发送 ACK
客户端确认服务端的序列号,回复
ack=y+1。双方进入ESTABLISHED状态,连接建立完成。
几个字段要分清:
| 字段 | 作用 |
|---|---|
SYN |
请求建立连接,并同步初始序列号 |
ACK |
确认收到对方数据 |
seq |
当前发送方向的数据序列号 |
ack |
期望对方下次发送的序列号 |
1. 为什么不是两次握手
两次握手最大的问题是:服务端无法确认客户端是否收到了自己的回复。
如果客户端发送的旧 SYN 因为网络延迟很久后才到达服务端,而服务端两次握手就直接建立连接,就可能产生一个客户端根本不需要的历史连接,浪费服务端资源。

三次握手要求客户端必须再发一次 ACK,服务端才能确认:客户端能发、服务端能收;服务端能发、客户端也能收。
2. 为什么不是四次握手
四次也能做到可靠建立连接,例如:
- 客户端发送 SYN;
- 服务端回复 ACK;
- 服务端再发送 SYN;
- 客户端回复 ACK。
但第二步和第三步可以合并成 SYN+ACK,没有必要拆成两次。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,并已发送 SYN+ACK |
ESTABLISHED |
双方 | TCP 连接已建立,可以传输数据 |
FIN_WAIT_1 |
主动关闭方 | 已发送 FIN,等待对方 ACK |
FIN_WAIT_2 |
主动关闭方 | 已收到 ACK,等待对方 FIN |
CLOSE_WAIT |
被动关闭方 | 已收到对方 FIN,等待本地应用关闭连接 |
LAST_ACK |
被动关闭方 | 已发送 FIN,等待对方最后 ACK |
TIME_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,三层路由是否可达,传输层端口是否通,上层服务是否真正响应。