计算机网络基础核心知识:从TCP/IP到网络排错实战
1. 计算机网络基础到底在学什么先把这个事情说透。计算机网络基础不是让你背一堆协议名称和端口号就完事它真正解决的是一个问题数据怎么从一台设备准确、高效、安全地到达另一台设备。就这么一句话背后牵扯出传输介质、地址寻址、路由转发、流量控制、拥塞控制、差错校验、应用协议等等一堆东西。我在实际带新人或者回复读者私信时发现很多人把计算机网络基础学成了“背题库”知其然不知其所以然。比如都知道TCP是可靠的、UDP是不可靠的但问到“TCP怎么保证可靠”“UDP在什么场景下反而比TCP更合适”就答不上来了。这就是典型的只记结论、不追过程。这篇文章我打算换个思路带大家过一遍计算机网络基础。不按教材目录从物理层讲到应用层那么死板而是从实际数据流动的视角把核心知识点串起来。每讲一个知识点我会说清楚“为什么是这样设计”“在实际工作或考试里怎么考”“踩坑点在哪”。同时因为现在很多人是为了备考或者面试来补这块基础我也会穿插一些典型题型和易错点帮你在理解的基础上直接能答题、能排查问题。2. 先搭骨架两种分层模型必须刻进脑子里2.1 OSI七层模型不是用来记的是用来理解职责边界的OSI七层模型从上到下是应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。很多人一背就混我教你一个笨办法把每一层想象成快递公司的不同岗位。物理层就是运输货车和高速公路负责把比特流从A运到B不管车上拉的是什么。数据链路层是快递分拣中心负责同一段路同一链路内的帧传输、差错检测它关心的是MAC地址这种“本地门牌号”。网络层是总调度中心负责跨区域路径规划它关心的是IP地址和路由选择。传输层是快递单上的“配送协议”负责端到端的可靠或不可靠投递。再往上会话层管建立和维持通话表示层管数据格式转换和加密应用层就是用户真正在用的HTTP、FTP、SMTP这些服务。OSI模型最大的价值不是让你背书而是让你在排查网络问题时能快速“定层”。一个网页打不开你至少要先判断是物理层不通网线松了、网络层不通IP配置错、传输层被防火墙拦了还是应用层服务器挂了。每层的职责边界清楚排错思路就清楚。2.2 TCP/IP四层模型才是实际在用的东西OSI是理论参考模型真正跑在互联网上的是TCP/IP四层模型应用层、传输层、网络层、网络接口层。注意它的应用层把OSI的应用层、表示层、会话层合到了一起网络接口层把数据链路层和物理层合到了一起。这个合并是有道理的。实际工程里表示层和会话层的功能加密、压缩、会话管理大多由应用协议自己实现比如TLS加密就跑在HTTP里面没必要单独拆一层。而数据链路层和物理层在TCP/IP的视角里都属于“硬件相关”交给具体的网卡和驱动程序去处理。考试和面试里经常问“数据封装与解封装过程”其实说的就是数据在这几层之间的传递。发送方从应用层产生数据每往下一层就加一个头部传输层加TCP或UDP头网络层加IP头网络接口层加帧头和帧尾这叫封装接收方从物理层收到比特流每往上一层就去掉一个头部这叫解封装。你只要理解了封装顺序很多协议题都能迎刃而解。3. 寻址与转发IP地址、MAC地址、子网掩码这三个必须焊死3.1 IP地址分类和子网划分别只背A/B/C类范围IP地址是网络层的核心IPv4地址是32位二进制数通常写成点分十进制。A类地址第一个字节范围是1到126B类是128到191C类是192到223。很多人在这里只记范围不记背后的二进制逻辑。其实你只要记住一个判断标准看第一个字节的高位。A类地址最高位是0B类最高两位是10C类最高三位是110D类组播是1110E类保留是1111。理解了高位判断法哪怕给你一个不常见的IP也能立刻说出它的类别和默认子网掩码。默认子网掩码也是同一个逻辑A类是255.0.0.0B类是255.255.0.0C类是255.255.255.0。子网掩码的作用是区分网络位和主机位。为什么要有子网划分因为一个大网络比如一个B类网络有6万多个主机地址直接拿来用广播域太大、管理太粗放所以要把主机位再借出几位当作子网位把一个大的网络切成多个小的子网。3.2 子网划分的计算题三步就能搞定我在教读者做子网划分题时发现大多数人不是不会算而是步骤乱。你按这三步走基本不会错。第一步确定需求。题目要划分几个子网每个子网要容纳多少台主机。第二步定子网掩码。根据主机数反推主机位位数主机位n要满足2的n次方减2大于等于需要的主机数减2是去掉网络地址和广播地址。第三步划分子网。从主机位的高位开始借位计算每个子网的网络地址、广播地址、可用IP范围。举个例子一个C类网络192.168.1.0/24需要划分4个子网。2的2次方等于4所以要借2位主机位当子网位。原来24位网络位现在变成26位子网掩码是255.255.255.192。每个子网的主机位只剩6位可用主机数是2的6次方减2等于62台。四个子网的网络地址分别是192.168.1.0、192.168.1.64、192.168.1.128、192.168.1.192每个子网的广播地址就是下一个子网网络地址减1可用IP范围就是网络地址加1到广播地址减1。这里最容易犯的错有两个一是忘了减2直接把2的n次方当作可用主机数二是把子网掩码写错比如借了2位写成255.255.255.224。你只要记住子网位每多一位子网掩码最后一个字节就按128、192、224、240、248、252、254、255这个序列往后走就不会错了。4. 传输层双雄TCP和UDP理解差异才叫真会4.1 TCP三次握手每次握手在确认什么TCP三次握手我已经见过无数人画图背了但很多人没想过为什么非得三次不能两次不能四次三次握手的本质是双方确认彼此的收发能力都是正常的。第一次握手客户端发送SYN包服务端收到后知道“客户端的发送能力OK”。第二次握手服务端回复SYNACK包客户端收到后知道“服务端的发送和接收能力都OK而且我的发送它收到了”。第三次握手客户端回复ACK包服务端收到后知道“客户端的接收能力OK”。这样双方都确认了对方的收发能力连接才算建立。如果改成两次握手服务端无法确认客户端的接收能力是否正常。万一客户端的连接请求在网络中滞留超时重传后又来一个服务端光凭两次握手就建立连接会白白浪费资源。三次握手就能通过第三次ACK的到达与否判断客户端到底是不是“活着”的。实际排错时你会遇到SYN洪水攻击攻击者只发SYN不回复ACK把服务端的半连接队列占满。这时候你会看到服务器CPU不高、内存也不高但新连接就是建立不起来。正常的排查手段是限制半连接队列大小、启用SYN Cookie机制。考试里如果问“三次握手为什么不能改为两次”你就从“确认双方收发能力”和“防止历史重复连接请求建立无效连接”两个角度答。4.2 TCP四次挥手TIME_WAIT为什么是2MSL四次挥手的过程我就不赘述了关键难点在最后主动关闭方收到对方的FIN后会进入TIME_WAIT状态持续2MSL最大报文段生存时间之后才彻底关闭。为什么是2MSL第一保证主动关闭方最后发出的ACK能被对方收到。这个ACK丢失的话对方会重传FIN如果主动关闭方已经彻底关闭了就收不到重传的FIN对方就会一直处于LAST_ACK状态。等2MSL就是为了给ACK留出足够的时间往返。第二防止本次连接中的残留报文段出现在下一次连接中。2MSL足够让网络中所有属于本连接的老报文段全部消亡避免污染新的连接。面试里还常问“为什么TIME_WAIT状态多出现在服务端而不是客户端”。其实不是出现在服务端多而是出现在主动关闭方身上。Web服务端通常主动关闭连接所以TIME_WAIT多。你可以用netstat命令看到大量TIME_WAIT状态的连接这本身不一定是坏事但如果数量太大、资源耗尽可以调整内核参数来缩短TIME_WAIT时间或者开启复用。4.3 TCP可靠传输滑动窗口和拥塞控制是要配合着看的TCP的可靠传输不靠重传一个机制硬扛而是靠序号、确认、重传、滑动窗口、拥塞控制这一整套配合。滑动窗口解决的是流量控制问题让接收方告诉发送方“我还能收多少”发送方据此调整发送速率。注意滑动窗口的大小是接收方根据自身接收缓冲区空闲量动态通告的这是流量控制而拥塞窗口cwnd是发送方根据网络拥塞程度自行维护的这是拥塞控制。两者一起决定发送窗口的大小实际发送窗口取min(接收窗口拥塞窗口)。拥塞控制的四个阶段——慢启动、拥塞避免、快重传、快恢复考试喜欢考慢启动的阈值变化。慢启动阶段拥塞窗口从1开始每收到一个ACK就加1指数增长到达慢启动阈值ssthresh后进入拥塞避免线性增长一旦发生超时重传ssthresh设置为当前拥塞窗口的一半cwnd重置为1重新慢启动如果是收到三个重复ACK触发快重传则ssthresh减半cwnd也减半并进入快恢复而不是回到1。我在实际调优时发现理解这个阈值变化过程比死记慢启动的“指数增长”四个字有用得多因为线上排查丢包时你看到抓包数据里窗口变化的曲线能直接推断出网络当时经历了什么。4.4 UDP简单但不可轻视UDP没有连接建立、不可靠、没有拥塞控制、报文头部只有8字节但这不代表它“低级”。恰恰因为无状态、低延迟、传输效率高UDP才成了实时音视频、在线游戏、DNS查询这些场景的首选。我举一个很实际的例子视频通话。如果每帧画面都要TCP来保证可靠到达一旦网络抖动丢了一个包TCP就等着重传视频就会卡住、延迟飙升体验极差。UDP直接丢弃丢失的帧接收方最多看到画面轻微卡顿或模糊但整体流畅。所以“可靠”和“好用”是两码事TCP的可靠是在牺牲实时性的前提下换来的。考试里UDP的考点集中在UDP头部结构源端口、目的端口、长度、校验和、与TCP的对比选择、以及基于UDP的典型协议DNS使用UDP的53端口、DHCP使用67/68端口、TFTP使用69端口。这里容易踩的坑是DNS很多人以为DNS全部走UDP其实DNS查询走UDP 53但区域传送zone transfer走TCP 53超过512字节的DNS响应也会走TCP。这种边角知识点是我在真实网络排障时遇到过的也是面试官喜欢挖坑的地方。5. 应用层常见协议的底层逻辑5.1 HTTP和HTTPS从TCP到TLS到底多了什么HTTP是应用层最典型的协议默认80端口基于TCP请求响应模型。新版HTTP/2支持多路复用、头部压缩、服务器推送HTTP/3直接跑在QUIC基于UDP上解决了队头阻塞问题。HTTPS不是在HTTP外面套了个“安全壳”那么简单它是在TCP之上加了一层TLS/SSL协议。TLS握手阶段做三件事协商加密算法和版本、身份认证证书验证、交换密钥。简单说TLS用非对称加密解决密钥分发问题用对称加密解决数据传输效率问题。你访问一个HTTPS网站浏览器先拿到服务器的证书用CA的公钥验证证书合法性然后双方协商出一个会话密钥后续数据都用这个会话密钥做对称加密传输。这里有一个很容易被误解的点HTTPS的“安全”不等于“网站可信”。它只保证传输过程中数据不被窃听和篡改不保证网站本身不干坏事。钓鱼网站也可以部署HTTPS浏览器地址栏的锁头只代表连接是加密的。我写这个是想提醒你学网络基础不光是为了考试更是为了建立正确的安全认知。5.2 DNS解析流程一次域名访问背后的完整链路DNS是域名系统它的核心作用是把人类好记的域名比如example.com转换成机器能用的IP地址。别小看这个看似简单的过程它背后是一条完整的查询链路。典型流程是这样的本机浏览器先查本地DNS缓存缓存没有就查hosts文件都没有就发DNS请求给本地配置的DNS服务器递归解析器。这个递归解析器先查自己的缓存没有的话就去问根域名服务器根服务器会告诉它“你要找的.com域的权威服务器在哪”再去问.com顶级域服务器它告诉“example.com的权威服务器在哪”最后去问example.com的权威服务器拿到对应的IP地址。这里常考的点有三个一是递归查询和迭代查询的区别本机到本地DNS服务器是递归查询本地DNS服务器到根、顶级、权威服务器是迭代查询。二是DNS劫持本地DNS服务器被恶意配置后把域名解析到钓鱼网站的IP这是实际工作中非常严重的安全威胁。三是DNS使用UDP 53端口但响应报文超过512字节时会转成TCP。我在做网络排障时遇到“域名解析慢”的问题第一步就是查DNS服务器响应时间、查本地缓存命中率然后再往上排查权威服务器的状态。5.3 DHCP自动分配IP的背后逻辑DHCP动态主机配置协议解决了手工配置IP地址的麻烦。你连上路由器就自动获得IP背后是DHCP发现Discover、提供Offer、请求Request、确认ACK四个过程简称DORA。客户机先广播发DiscoverDHCP服务器回Offer提供候选IP客户机再广播发Request确认要用哪个IP服务器回ACK确认。注意DHCP客户机和服务器在获取IP前都没有IP所以Discover和Request都是广播目标地址是255.255.255.255源地址是0.0.0.0。而Offer和ACK可以是单播也可以是广播。实际故障中最常见的DHCP问题是IP地址冲突。比如你设置了一个静态IP 192.168.1.100而DHCP地址池也包含了这个地址就可能分给另一台设备导致两台设备冲突、网络时断时续。这个在考试里容易考“如何避免IP冲突”答案通常就是给特殊设备保留IP、缩小DHCP地址池范围、或配置DHCP Snooping。6. 网络设备与拓扑路由器、交换机、集线器到底哪儿不一样6.1 从冲突域和广播域理解设备差异理解网络设备最高效的方式是站在“冲突域”和“广播域”两个概念上看。集线器是纯物理层设备所有端口都在同一个冲突域任何时刻只能有一台设备发数据否则就冲突所有端口也都在同一个广播域。所以集线器连接的网络设备越多效率越低。交换机是数据链路层设备它根据MAC地址表转发帧每个端口独立冲突域能同时多对通信但默认情况下所有端口还在同一个广播域VLAN可以把广播域切分成多个。交换机是二层设备看不懂IP地址只认MAC地址。路由器是网络层设备每个接口属于不同的广播域它根据IP路由表转发数据包能隔离广播域连接不同网络。这就是为什么家庭宽带入户后光猫负责拨号和路由路由器负责NAT和无线接入交换机负责扩展有线端口。网上经常有人问“我买了路由器到底还要不要交换机”答案很简单路由器管跨网段转发交换机管同网段内终端接入。家里设备数量少路由器自带的交换口就够用办公室几十台电脑就需要交换机扩展端口了。6.2 交换机MAC地址表和路由器的路由表两张表都要会看交换机能只把帧转发给目标端口靠的是MAC地址表。它会学习源MAC地址和端口的对应关系收到一个帧记下源MAC和进来的端口转发时查目标MAC表里有就只往对应端口发表里没有就广播到除源端口外的所有端口。这里有个细节MAC地址表是有老化时间的默认300秒到期没数据就删除这是为了适应设备移动或更换。路由器转发数据包靠的是路由表。路由表里有直连路由、静态路由、动态路由由OSPF、RIP等协议生成。排错时最常用的命令是看路由表路由器的show ip routeLinux里是ip route如果发现路由缺失表现为“能ping通网关但ping不通远端网络”。考试常考的静态路由配置是ip route 目标网段 目标子网掩码 下一跳地址。很多人会写错成接口而不是下一跳对于以太网链路建议写下一跳地址而不要写出口接口原因在于当你在路由器上写下一条为接口时路由器仍然会对每一个目标IP做一次递归查找效率不如直接给下一跳地址清晰。实际工作中我习惯写下一跳IP排查路由黑洞问题也更直观。7. 网络命令实测用ping、tracert、netstat排查问题7.1 ping和它的TTL返回值ping是ICMP协议的应用用来测试网络连通性和延迟。它发送ICMP Echo Request报文收到Echo Reply就说明目标可达。ping的输出里有TTLTime To Live字段这是排查操作系统的“指纹”之一。TTL是IP包头里的字段每经过一个路由器就减1减到0就丢弃。Windows系统默认TTL是128Linux系统默认TTL是64Cisco设备默认TTL是255。所以当你ping通一台设备看返回的TTL是54说明起点是64减掉了10跳如果TTL是118说明起点是128减掉了10跳。这招在实际网络拓扑识别里很实用虽然现在很多系统允许自定义TTL但默认值仍然有参考意义。注意ping不通不一定是网络不通。很多时候是对方防火墙禁ping或者中间设备限速ICMP。我遇到过一台服务器能正常访问网站但ping不通最后排查发现是云安全组禁了ICMP协议。所以ping通了说明链路通ping不通只能说明ICMP不通不能直接断定服务不可用。7.2 tracert/traceroute的操作与解读tracertWindows和tracerouteLinux用来查看数据包从本地到目标经过的路径。它利用TTL字段的原理发送一个TTL1的UDP包第一个路由器收到后TTL减为0返回一个ICMP超时消息本地就知道第一跳是谁再发TTL2的包得到第二跳依次递增直到到达目标端口。解读tracert输出时你会看到有的行返回的是星号这不一定代表链路断了很可能是中间路由器禁用了ICMP回复或者只对限定的源IP返回信息。判断链路是否真的中断要看最后一跳是否到达了目标IP以及目标端口是否可达。我在排查跨省访问慢的问题时就是靠traceroute定位到中间某跳延迟突然升高然后联系对端运营商处理。这一招比盲目调服务器参数高效得多。7.3 netstat和抓包工具的组合拳netstat是查看本机网络连接状态的神器。netstat -an能看到所有TCP/UDP连接的本地地址、外部地址和状态netstat -rn看路由表netstat -ano在Windows上多一个PID能结合任务管理器定位是哪个进程发起的连接。抓包工具我推荐Wireshark它能精确看到每个报文的详细内容。但很多人一打开Wireshark就懵不知道从哪看起。我建议新手先学会三件事第一设置过滤条件比如只抓HTTP流量就输入http只抓某个IP就输入ip.addr 192.168.1.100。第二看TCP握手的三条报文确认三次握手是否正常。第三看TCP重传的红色标记如果某个IP大量重传基本可以判断网络丢包严重。抓包是排障的“终极手段”前面的命令只能告诉你“哪里不对”抓包能告诉你“到底发生了什么”。8. 考试高频题型与真实案例复盘从理论到实战的最后一公里8.1 题库里最爱考的几类题我帮你拆一下因为计算机网络基础题很多是从题库里出的我结合高频考点总结一下出题规律。第一类是概念辨析题。比如“下列哪种协议属于传输层”“TCP和UDP的区别”。这类题纯靠理解你能说出TCP是面向连接、可靠、有序、字节流UDP是无连接、不可靠、无序、数据报基本就能排除大多数错误项。第二类是计算题。子网划分、可用主机数、CIDR表示法之间的转换。这类题没有技巧就是多练。我建议你把2的0次方到2的10次方背熟子网掩码从/24到/30对应的可用主机数算一遍形成肌肉记忆。第三类是流程题。三次握手、四次挥手、DNS解析过程、DHCP分配过程。这类题要求你画得出流程图、说得出每一步的报文类型和方向。考场上不需要你写得多花哨但顺序一定不能错。第四类是应用场景题。比如“视频直播用TCP还是UDP为什么”“局域网内IP地址不够用怎么办”。这类题考查你能否把原理用于实际。我在题库里见过一道“公司网络经常瘫痪排查发现有人在局域网内发大量广播包应该怎么解决”的题答案本质就是划分VLAN来缩小广播域。8.2 一个真实排查案例网页能打开但视频加载极慢我拿一个自己实际处理过的案例收尾。某天同事反馈办公区域有台电脑网页能正常打开但视频会议卡得没法用。我的排查思路先ping网关延迟正常ping外网延迟也正常。然后用tracert观察路径发现目标地址最后几跳延迟异常高但还没到超时的程度。这时候我判断不是基础链路问题可能是拥塞或限速。再用netstat看本机连接发现视频会议软件占用了大量连接。最后抓包确认视频数据流时不时出现重传和乱序丢包率不高但延迟抖动很大。定位到问题出在办公网络的出口带宽被占满其他设备的大量下载流量把视频流量挤得很难受。处理方案是给视频会议流量做QoS优先级保障同时限制P2P下载速率。这个案例想说明的是计算机网络基础的每一个知识点都不是孤立的。IP寻址帮你确认目标在哪路由帮你理解路径怎么走TCP的拥塞控制帮你解释为什么卡QoS是应用层和网络层协同解决质量问题的思路。你把这些串起来面对一个模糊的“网络卡”问题就不会无从下手。我个人在实际操作中的体会是学计算机网络基础千万别只盯着题库刷刷题只能验证你对概念的记忆不能验证你的理解。最好的方式是每学一个协议就打开Wireshark抓一次包亲眼看一看报文长什么样每配一个功能就在Cisco模拟器或真机上敲一遍命令。把这些基础动作练成本能后面不管是考证、面试还是做运维你都会非常稳。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →