资讯详情

资讯详情

网络基础实战详解:从TCP/IP分层到IP子网与排障工具

1. 网络基础到底在学什么一说网络基础很多人第一反应就是背IP地址、记协议端口号或者把OSI七层模型从头背到尾。但实际工作里真正有用的是理解数据从一台设备到另一台设备之间到底经历了什么每层干了什么活出了问题大概卡在哪一层。这篇文章不按教科书顺序讲而是从真实操作视角把网络基础拆开揉碎让新手能建立整体框架让有一定经验的读者也能查漏补缺。网络基础涉及的面很宽从物理层的网线、光模块到数据链路层的MAC地址和交换机再到网络层的IP地址和路由最后到传输层的端口和应用层的HTTP、DNS。说白了网络就是一套怎么把数据从A点送到B点的规则集合。理解了这套规则后面的网络运维、网络安全、云计算网络都只是在这套规则上做文章。我自己带新人的时候最怕的就是对方背了一堆概念但一遇到电脑能上QQ但打不开网页这种问题就完全懵。原因就是只记了结论没有建立分层排查的思维。所以这篇文章的重心不放在背诵而是放在每层解决什么问题、出了故障怎么定位上。标题后缀详细版不是吓唬人而是确实把该展开的细节和常见坑都铺开讲内容尽量做到看完能上手而不是看完就忘。2. 网络协议分层模型理解网络的骨架2.1 TCP/IP四层模型比OSI七层更实用OSI七层模型是理论上的标准但实际互联网跑的是TCP/IP四层模型。为什么这么说因为OSI的会话层、表示层在实际协议栈里基本被应用层吞并了你抓包的时候根本看不到单独的一层叫会话层。真正干活的是链路层、网络层、传输层、应用层这四层。我自己刚学网络的时候也纠结过要不要把七层全背下来。后来工作经验告诉我重要的是建立对应的层次思维链路层看的是MAC地址负责同网段内的帧传递对应设备是交换机。网络层看的是IP地址负责跨网段的包转发对应设备是路由器。传输层看的是端口号负责给应用提供逻辑通信通道对应概念是TCP、UDP。应用层才是你真正面对的东西HTTP、DNS、FTP都在这一层。举个例子你访问一个网站数据链路层负责把数据交给同一个交换机下的网关网络层负责把数据包从一个路由器跳到另一个路由器传输层负责确保数据完整到达目标端口应用层则把数据还原成网页内容。每一层只关心自己的事层与层之间通过封装和解封装配合。用生活类比来说四层模型就像寄快递链路层是快递员在小区里取件送件网络层是干线运输车决定走哪条高速公路传输层是快递单上的收件人电话应用层是你实际收到的东西。丢件了要查哪个环节损坏了要查哪段路程分层解决就是为了快速定位问题。2.2 数据封装与解封装流程数据从应用层出来到发出网线经历的是逐层加头部封装对端收到后逐层剥掉头部解封装。每层只认自己的头部信息。这个过程我建议新手必须亲手抓一次包才算真正理解。操作很简单本机开Wireshark过滤HTTP流量随便访问一个网站然后看数据包结构。链路层头部里有源MAC和目的MAC。网络层头部里有源IP和目的IP。传输层头部里有源端口和目的端口。应用层里才是你请求的HTTP报文内容。这就是一个完整的数据包在肉眼下的样子。理解了封装你自然就明白为什么ping能通但网页打不开——大概率是传输层或应用层的问题而不是链路层或网络层断了。还有一个最常见的坑MTU最大传输单元。以太网默认MTU是1500字节如果应用层数据太大IP层会分片。分片出问题会导致ping大包不通但ping小包正常。所以排障时ping -l 1472Windows或ping -s 1472Linux这个技巧很有用因为147228ICMP头IP头1500正好是MTU边界值。2.3 HTTP和HTTPS在哪个层HTTP和HTTPS都跑在应用层但它们依赖传输层的TCP。HTTP默认端口80HTTPS默认端口443。HTTPS不是单独的协议而是在HTTP和TCP之间加了TLS/SSL加密层。很多新手会把端口和协议搞混。记住一句话协议是规则端口是门牌号。TCP 80端口可以跑HTTP也可以被改成跑其他服务但规范约定俗成把80给了HTTP。自己搭建服务时完全可以改端口但改了之后客户端访问要带上端口号这就是为什么你访问http://域名:8080能通而直接访问80不行。关于HTTPS我再多说一句证书的作用是身份验证和加密协商不是有了证书网站就安全。证书解决的是你连的服务器确实是那个服务器防止中间被冒充。数据加密靠的是会话密钥不是证书本身。我见过很多人把证书过期导致访问失败理解成黑客攻击其实改一下系统时间或续期证书就行。3. IP地址、子网掩码与网段划分3.1 IPv4地址结构与分类IPv4地址是32位二进制数通常写成点分十进制比如192.168.1.1。这32位分成两部分网络位和主机位。网络位代表这个地址属于哪个网段主机位代表网段内的哪台设备。传统分类方式ABCDE类现在实际用处不大因为早就被CIDR无类域间路由取代了。但有些老设备或者考试题里还会出现所以简单提一下A类前8位是网络位默认掩码255.0.0.0B类前16位是网络位默认掩码255.255.0.0C类前24位是网络位默认掩码255.255.255.0。这里要特别强调现在配置IP时基本不按默认类走都是自己定掩码按需划分。基于IP地址和掩码设备会判断目标和自己是否在同一网段。判断方法是把源IP和掩码做与运算得到源网段再把目标IP和掩码做与运算得到目标网段两个网段相同说明是同网段通信直接走ARP查MAC不同就必须把包交给网关转发。3.2 子网掩码计算与CIDR表示CIDR表示法就是在IP后面加斜杠和数字数字代表网络位的长度。比如192.168.1.0/24就是网络位24位主机位8位可用地址2的8次方减2等于254个去掉网络地址和广播地址。这里我把计算子网的方法总结成一个实用流程确认掩码位数计算主机位主机位 32 - 掩码位数。计算每个子网的地址数量2的主机位次方。可用主机数 地址数量 - 2网络地址和广播地址不可分配给设备。子网块大小 256 - 最后一个非零掩码段的值。举个例子给192.168.1.0/26分配网段。掩码是255.255.255.192最后一个非零段是192所以子网块大小是256-19264。网段从0开始192.168.1.0/26、192.168.1.64/26、192.168.1.128/26、192.168.1.192/26每个网段可用地址62个。为什么要手动算而不是全凭子网计算器因为实际工作中你可能遇到不连续的掩码比如需要从一个大网段里切出刚好容纳30台设备的子网还要预留将来扩充。这时候心算块大小比打开工具更快而且更不容易出错。还有一个常见误区以为IP地址最后一位是0就是网络地址是255就是广播地址——这是错的。网络地址和广播地址取决于掩码不只是看末位。比如192.168.1.64/26广播地址是192.168.1.127而不是192.168.1.255。你如果配错了广播地址设备之间可能互相不通。3.3 公网地址、私网地址与NAT私网地址是RFC 1918规定的不会出现在公网路由表里。三个私网段分别是10.0.0.0/8172.16.0.0/12192.168.0.0/16局域网内部随便用私网地址但访问公网时必须通过NAT转换成公网地址。家用路由器就是典型的NAT设备它把内网192.168.1.x映射成运营商分配的公网IP出去一个包回来一个响应全靠NAT表记录会话。NAT最常用的类型是PAT端口地址转换即多个内网IP共用一个公网IP用端口号区分不同会话。这也是为什么很多内网服务器要对外提供服务时需要做端口映射公网IP的80端口映射到内网某台主机的8080端口。这里必须注意一个安全细节NAT在一定程度上保护了内网因为外部主动发起的连接会被NAT丢弃除非配置了端口映射。但不要以为有NAT就一定安全IPv6普及后NAT不再是必需品防火墙该配还是要配。3.4 IPv6的核心概念IPv6是128位地址彻底解决了地址耗尽问题同时把NAT的必要性降低了。IPv6地址格式是8组16进制数比如2001:db8:85a3:0:0:8a2e:370:7334每组用冒号分隔前导零可省略连续零组可以用双冒号代替一次。IPv6和IPv4最大的区别在于IPv4靠NAT节省地址IPv6是每个设备都能有全球唯一公网地址。这意味着如果防火墙策略没写好内网设备可能直接暴露在公网。我见过不少企业刚切IPv6时打印机、摄像头因为没配好访问控制被扫描到然后被入侵的情况。对于普通学习者现阶段不需要深入掌握IPv6的所有细节但至少要认识四个东西链路本地地址fe80::/10、唯一本地地址fc00::/7、全局单播地址2000::/3、组播地址ff00::/8。链路本地地址相当于IPv4里的169.254.x.x自动生成用于同一链路内的通信比如路由器的IPv6管理地址就是这种。4. 交换与路由局域网与跨网段通信4.1 二层交换与MAC地址表交换机工作在二层转发依据是MAC地址表。交换机启动后学习每个端口收到的源MAC记录成表项。当收到一个帧查找目的MAC在哪个端口找到了就单播转发没找到就泛洪除接收端口外的所有端口都发一遍。MAC地址表不是越大越好也不是一动不动的。老化的默认时间是300秒超过时间没再出现就会删除。如果网络中有人伪造MAC地址交换机可能学到错误表项导致数据被中间人截获——这就是MAC欺骗攻击的基本原理。所以企业交换机都有端口安全功能可以限制某个端口能学到的MAC数量超了就告警或关端口。新手在做实验时经常遇到两台电脑直连但ping不通的情况。除了检查IP和防火墙还要确认网线是否交叉线。现在绝大多数网卡和交换机都支持自动翻转Auto MDI-X直通线和交叉线通吃了但一些老设备还是只认其中一种。所以实验室里我一般直接说用直通线就行不行再试交叉线。二层交换的范围只局限在同一网段内不同网段的数据必须交给网关处理。这也是为什么一个VLAN一个网段、一个VLAN一个网关是局域网设计的常见套路。4.2 VLAN的用途与配置要点VLAN虚拟局域网把一台物理交换机划分成多个广播域。默认情况下所有端口都在VLAN 1不同VLAN之间二层隔离要通信必须走三层VLANIF接口或路由器。配置VLAN时最容易踩的坑是只建了VLAN忘了把端口划进去或者划了VLAN但没有配VLANIF接口然后跨VLAN通信失败。正确顺序是创建VLAN比如VLAN 10。把接入端口划入VLAN 10端口模式设为access默认VLAN改成10。创建VLANIF接口并配置IPinterface vlanif 10ip address 192.168.10.1 255.255.255.0。交换机启用三层转发不同厂商命令不同华为是undo portswitch或直接配置VLANIF就启用。终端的网关指向VLANIF的IP。如果交换机之间要传递多个VLAN的流量用trunk口。trunk口要放行对应VLAN且要注意PVID和native VLAN的配置。华为交换机默认native VLAN是1思科也是1但两边必须保持一致否则VLAN信息可能会被打上错误的标签。关于VLAN还有一个经验管理VLAN不要用VLAN 1。VLAN 1是默认存在的所有未配置端口都在里面安全性最差。攻击者如果能接入一个未配置的端口就直接进入了默认VLAN容易扫描到其他同样在VLAN 1里的设备。企业网络实践里通常把管理VLAN单独切一个出来比如VLAN 99用于接设备管理口。4.3 路由表与路由转发原理路由器工作在三层转发依据是路由表。路由表里有直连路由接口配置了IP自动产生、静态路由手工配置、动态路由通过OSPF、BGP等协议学习。路由转发的最核心原则是逐跳转发路由器只负责把包发给下一跳不关心完整到最终目的地的路径。这就像你开车出城只需要知道下一个路口怎么走不需要知道全程路线图。下一跳怎么确定查路由表匹配最长前缀的那一条。这里有个非常常见的误区把网关地址配错了。很多新手以为默认网关填路由器任一个IP就行但网关必须能和终端在同一网段而且是路由器上那个网段的接口IP。比如终端是192.168.1.5/24网关必须是192.168.1.1或同网段的某个接口IP你填一个192.168.2.1上去包根本送不出去。配置静态路由时我建议遵循一条原则优先指定出接口和下一跳。华为和思科的写法不完全一样华为支持直接指定出接口思科更推荐指定下一跳地址。在真实网络里下一跳地址比出接口更稳定因为出接口如果down了静态路由会自动失效但指定下一跳的话只有当下一跳不可达时路由才失效。4.4 OSPF动态路由的基本原理小网络用静态路由就够但大网络必须跑动态路由协议。目前内部网关协议最主流的是OSPF开放最短路径优先。OSPF原理概括为一句话每台路由器把自己跟邻居的关系告诉全网全网每台路由器都有一张一致的拓扑图然后用SPF算法算出最短路径。OSPF有几个关键概念Router-ID路由器标识符建议手动配成回环口IP、区域Area 0是骨干区域其他区域必须跟骨干区域相连、邻居关系通过Hello包建立Hello间隔默认10秒死亡时间默认40秒。实操中OSPF排障第一步永远是看邻居状态。输入display ospf peer brief华为或show ip ospf neighbor思科如果邻居不是Full状态就说明有问题。常见原因区域号不一致、认证不匹配、Hello间隔不一致、MTU不匹配。MTU不匹配是我见过最隐蔽的两边都能建立邻居但同步数据库时卡住表现为路由表学不到全部路由。对于初学者我的建议是OSPF先按单区域跑通再理解多区域的意义。多区域的好处是缩小了LSDB规模提升了网络稳定性但代价是配置复杂度和排障难度上升。如果只是学习用单区域就够了。5. 关键协议DNS、DHCP、TCP/UDP5.1 DNS解析流程与常见故障DNS域名系统解决的是域名到底对应哪个IP的问题。完整解析流程是浏览器先查本地DNS缓存没命中就查系统hosts文件再没命中就向配置的DNS服务器发起递归查询。DNS服务器如果也不知道就替你去根服务器、顶级域服务器、权威服务器逐级迭代查询。在Windows上用nslookup命令可以手工查询。比如nslookup www.example.com默认会用你网卡配置的DNS服务器去查指定用公共DNS可以写成nslookup www.example.com 8.8.8.8这样能对比出是不是你本地DNS服务器的问题。记忆中最典型DNS故障是能通过IP访问网站但输域名打不开。成因通常是DNS服务器不可达、DNS缓存被污染、hosts里写了错误映射、浏览器缓存了旧的解析记录。排障步骤我一般按这个顺序ping一下网关确认基础网络通不通。nslookup域名看返回什么。清本地缓存Windows执行ipconfig /flushdns。手动改DNS为公共DNS223.5.5.5这种对比效果。检查hosts文件是否存在错误条目。一个容易被忽略的点现在的操作系统和浏览器都有自己的DNS缓存层顺序和过期时间都不一样。你改了hosts但浏览器还在用缓存重启浏览器或者刷新一下可能就好了。5.2 DHCP的工作流程DHCP动态主机配置协议自动给终端分配IP地址。它通过四个报文完成Discover客户端找服务器、Offer服务器提供配置、Request客户端确认请求、Ack服务器确认。这里要注意DHCP的Offer和Ack是广播包所以DHCP服务器和客户端必须在同一个二层广播域内。如果DHCP服务器在另一个网段必须配置DHCP中继ip helper-address。这也是企业网络里VLAN间做DHCP常遇到的问题终端拿到了IP但不在预期网段多半是中继没配好或者VLAN没划对。DHCP最常见的故障是地址池耗尽。排查时需要看地址池利用率、租期时长和是否有非法DHCP服务器。租期设置太长会导致地址长期占用太短会导致终端频繁续租增加网络负担。一般办公网络租期建议一天到三天访客网络或临时活动可以租期设成几小时。还有一个很隐蔽的问题同一网络里接入了一台自带DHCP功能的路由器它会抢答Offer导致终端拿到错误网关或错误DNS表现为间歇性上不了网。这种问题叫DHCP冲突或DHCP欺骗。解决办法是在接入交换机上启用DHCP Snooping信任连接合法DHCP服务器的端口其余端口的DHCP响应直接丢弃。5.3 TCP与UDP的区别连接管理与端口TCP提供可靠传输UDP提供尽力而为的传输。TCP有三次握手、确认重传、滑动窗口、拥塞控制UDP只有一个头部源端口、目的端口、长度、校验和没有连接概念。用生活类比来说TCP是挂号信要签收、要回执但不会丢UDP是平信寄出去就完了可能丢也可能乱序但速度极快。DNS查询本身就是UDP的典型应用因为一次查询的响应应该非常快如果第一个包丢了客户端会重发没必要用TCP建立连接。TCP三次握手的过程是SYN、SYN-ACK、ACK。如果某个服务启动异常或者防火墙拦截你看到的现象往往是SYN发出了但没有回应。此时可以用telnet测试端口通不通telnet IP 端口。如果通会进入一个空命令行或者显示服务端 banner如果不通会提示连接失败或超时。实际排障中我非常依赖一个命令netstat -an。在Windows上可以查看本机所有监听端口和已建立的连接。比如你想确认80端口是否被占用netstat -ano | findstr :80最后一列是进程PID再到任务管理器里查对应进程。Linux上对应的是netstat -tunlp 或 ss -tunlp推荐用ss输出更快。5.4 HTTP的请求-响应模型与状态码语义HTTP是文本协议请求由请求行方法、URL、版本、请求头和请求体组成。响应由状态行版本、状态码、短语、响应头和响应体组成。状态码是排障的侦察兵1xx是信息性响应比如101表示协议切换。2xx是成功最常见的200表示OK。3xx是重定向301永久、302临时。如果网页打不开但抓包看到302循环跳转通常是配置了错误的跳转规则。4xx是客户端错误403无权限404资源不存在。尤其注意401和403的区别401是未认证403是认证了但无权访问。5xx是服务端错误500通用错误502网关错误503服务不可用504网关超时。我见过最典型的502场景前端Nginx反代到后端TomcatTomcat挂了Nginx就返回502。此时排查顺序是先看Nginx日志确认转发目标再确认后端服务端口是否监听最后看后端应用日志。要注意的一个实操技巧看到404不一定是文件不存在。有的框架对路由做了约束当一个路径匹配不到任何控制器时也会返回404甚至API设计里把未找到资源和没有权限访问故意都返回404避免泄露资源是否存在。所以排障时不要只看状态码要看响应体和日志。6. 网络排障思路与工具实战6.1 分层排查法从下往上我反复跟团队强调网络故障排查必须从底层往上走也就是物理层和链路层最先验证。典型流程先看指示灯。交换机端口、网卡灯亮不亮亮的是绿色还是黄色就是速率不同。检查网线、光纤是否松动光模块是否较热。光纤弯曲半径过小会导致光衰增大表现为通了但丢包。ping网关IP验证二层和三层基本配置。ping公网IP比如223.5.5.5验证NAT和路由。ping域名验证DNS解析。这套流程下来基本能把问题缩小到二三层还是应用层。6.2 ping、tracert、pathping的进阶用法ping的常见参数要记住Windows用-t持续ping-l指定包大小Linux用-c指定次数-s指定包大小。ping不通时要看错误提示Request timed out是目标无响应Destination host unreachable是本地路由器找不到路径TTL expired in transit是经过了太多跳数或存在环路。tracertWindows和tracerouteLinux是查路径的工具原理是利用TTL从1开始递增让沿途路由器返回ICMP超时消息。如果某一行显示星号可能是路由器不回应ICMP超时不一定是链路断了。判断链路真的有问题要用pathpingWindows它结合了tracert和ping会统计每跳的丢包率和延迟。ping通但网页打不开的经典场景我一直建议先区分协议层。最常见原因系统代理设置异常、浏览器插件拦截、HTTP被重定向到HTTPS但证书过期、DNS解析出的IP被防火墙拦截。先看curl能返回什么再决定往哪个方向查。6.3 常用命令行工具集ipconfig、netstat、arpWindows平台最有价值的几个命令ipconfig /all查看完整网卡信息包括物理地址、DHCP是否启用、DNS地址。ipconfig /release和/renew释放和重新获取DHCP地址。注意顺序不能反先释放再更新。ipconfig /displaydns或/flushdns查看和清空DNS缓存。arp -a查看本机ARP缓存能看到最近通信的主机MAC。如果网关MAC异常多半是ARP欺骗。Linux平台对应的是ip addr、ip route、cat /etc/resolv.conf、arp 或 ip neigh。我建议从老命令netstat走向新命令ss因为netstat已经逐渐被淘汰ip命令统一了ifconfig、route、arp的功能。6.4 Wireshark抓包的关键要点Wireshark是网络排障的终极大杀器。新手抓包最容易犯的错是抓错网卡导致什么流量都看不到。Windows上分不清有线网卡、无线网卡先确认IP地址对应的是哪个接口再选。过滤语法建议先记住三个最常用的按IP过滤ip.addr 192.168.1.10按端口过滤tcp.port 80按协议过滤dns或http抓包看TCP三次握手时注意有没有重传TCP Retransmission。大量重传说明网络丢包严重或有拥塞。TCP握手时如果一直重复SYN则说明对端不回应可能是端口被防火墙挡了也可能是服务没监听。还有一个实操技巧抓包最好在故障发生的同时抓别提前开太久。我一般只抓故障时间段前后几秒然后立刻停止保存这样文件小分析也快。如果抓包文件太大可以用Wireshark自带的功能按会话筛选或者用tshark命令转成文本再分析。7. 从入门到实战一个网络项目的落地步骤总结说了这么多原理和工具最后给一条从零到一搭建小型网络的实操路径帮助把以上内容串起来。规划IP网段。假设内部网络用192.168.10.0/24终端约100台掩码是24位可用254个地址。划分VLAN。如果只有一个网段那VLAN划分可以不做如果跨部门隔离建议每部门一个VLAN一个网段。配置交换机。创建VLAN配置端口模式连接上行口用trunk。配置核心路由。核心交换机或路由器上为每个VLAN配置VLANIF作为网关。配置DHCP服务。地址池、网关、DNS、租期匹配VLAN方向。配置出口路由和NAT。默认路由指向运营商网关NAT做地址转换。放通防火墙策略。内网到公网的出站策略以及外部访问内网服务器的入站映射策略。验证测试。终端获取IP、ping通网关、ping通DNS、打开网页。开启冗余。如果条件允许核心设备做堆叠或双机热备链路做链路聚合确保单点故障不影响业务。文档化。把IP规划、VLAN划分、端口映射整理成表格方便后续排障和交接。这套流程做完一个可用的办公网络就落地了。每一步展开都是大量的细节但骨架就是文章里讲的这些概念你得先理解再动手不要拿到设备就照着命令敲那样出了问题你还是不会排查。我个人的一条经验是网络基础最重要的不是记住某个命令或某个协议细节而是建立一个分层定位的直觉——看到问题先想是哪一层的活然后逐层验证。这种直觉靠实验和排障获得靠背书得不到。搞台旧电脑装虚拟机搭两三个网段互相ping通再刻意制造一些故障去定位几个来回之后你对网络基础的理解会远超那些只会背概念的人。内容到这里核心模块基本都覆盖了。你可以按自己的节奏先从第二章的分层模型建立框架然后跳到第六章学会基础排障再回来啃IP和路由部分这样学习曲线会平滑很多。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →