ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

互联网协议入门到实战:分层模型与TCP/IP核心机制解析

互联网协议入门到实战:分层模型与TCP/IP核心机制解析 1. 互联网协议到底是什么先搞懂它在解决什么问题第一次接触“互联网协议”这个词的人十有八九会被“协议”两个字吓住觉得这是某种高深的、需要背大量条文的规矩。但实际上你每天都在用它只是自己没意识到。比如你在浏览器输入一个网址页面能弹出来微信发一条消息对方能收到手机连上Wi-Fi能刷视频——这背后全都有互联网协议在工作。打个生活化的比方。你去邮局寄快递不会直接把东西扔给工作人员扭头就走你得按一套流程来填快递单、写收件人和寄件人地址、贴单子、称重付费。快递公司之间转件也有自己的交接规矩什么面单格式、怎么分拣、哪个环节坏了谁负责。这套“双方都遵守的交接规矩”就是协议。互联网协议就是一套让全世界不同厂商、不同系统的设备能互相通信的通用规矩。它不关心你是Windows还是Mac不关心你是华为手机还是苹果手机只要都遵守同一套协议数据就能跨设备传递。目前真正统领互联网的是一套叫TCP/IP协议族的体系真正日常说的“互联网协议”绝大多数情况下指的就是这套体系。这里必须说清楚一个关键点很多人以为互联网协议只有一个其实它是一个分层嵌套的协议组合。这就好比寄快递的整套流程既包括你写面单的规矩也包括快递车怎么跑、网点之间怎么交接的规矩各层管各层的事缺一不可。想真正理解互联网协议第一步就是理解这种“分层协作”的思维后面所有细节都从这儿展开。2. 分层模型为什么非要拆成一层一层如果全世界只有一种设备、一种操作系统、一种网络那根本不用分层一套规矩从头管到尾就行。但现实是设备五花八门网络环境千奇百怪所以设计者采用了“分层”思路把整个通信过程拆成若干独立模块每层只负责自己那一摊事通过标准接口和上下层对接。2.1 OSI七层模型与TCP/IP四层模型的对应关系教科书通常先讲OSI七层模型物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。但现实中真正跑的是TCP/IP四层模型网络接口层、网络层、传输层、应用层。二者对应关系大致是OSI的上三层会话、表示、应用基本合并进了TCP/IP的应用层OSI的物理层和数据链路层合并成了网络接口层中间的网络层和传输层一一对应。作为普通从业者我不建议在OSI七层上花太多时间背名词你只需要牢牢记住TCP/IP这四层各自干什么TCP/IP层级核心职责代表协议生活化类比应用层直接为用户提供网络服务HTTP、DNS、FTP写快递单的人传输层端到端的数据传输控制TCP、UDP快递运输公司定路线、保时效网络层寻址和路由选择IP、ICMP快递中转站的地址解析和路线规划网络接口层物理传输与数据帧收发以太网、Wi-Fi快递车辆和道路本身每一层只依赖下一层提供的服务不关心更下层怎么实现。比如你用微信发消息应用层只负责把消息内容打包好交给传输层至于这条消息是走Wi-Fi还是走5G应用层根本不用操心。这个解耦设计是整个互联网能无限扩大的基石。2.2 分层带来的三个实际好处好处一独立升级。今天你用5G上网明天换6G只要网络接口层变了上面三层完全不用动。现实中TCP/IP协议从80年代用到现在底层网络换了无数代上层协议几乎原样保留这就是分层的威力。好处二问题隔离。排查网络故障时工程师能快速定位问题出在哪一层。网页打不开先看应用层的地址对不对再看传输层连接建没建起来再看网络层通不通逐层排查不用一上来就抓瞎。好处三多方协作。不同公司做网卡、做路由、做操作系统、做网站服务只要每层遵循公开的标准就能组合出完整可用的网络。如果整个通信过程只有一个巨型协议任何一家厂商改动一点全行业都要跟着改互联网根本发展不到今天的规模。3. IP协议互联网的寻址系统是怎么运转的IPInternet Protocol网际协议是网络层的绝对主角它的任务是给每一台设备一个唯一标识并保证数据包能从这个地址送到那个地址。关于IP你至少得明白三类知识地址格式、地址分类、地址分配方式。3.1 IPv4地址结构与公网内网之分IPv4地址是32位二进制数为了让人好读写成人见人熟的“点分十进制”比如192.168.1.1。32位二进制能组合出多少地址算一下2的32次方约42.9亿个。听起来很多但全球设备远超这个数所以IP地址不够用是长期以来的核心矛盾。于是就有了公网IP和内网IP的划分。公网IP在全球唯一可以直接被互联网访问内网IP只能在局域网内部用不能直接上网。大家家里路由器分配的192.168.x.x、公司里常用的10.x.x.x、172.16.x.x都属于内网地址。内网设备要上网由路由器做网络地址转换NAT把内网地址映射成公网地址一个公网IP能带一整屋子设备上网。这也是为什么IPv4虽然数量紧张还能撑这么多年的关键原因。3.2 子网掩码怎么从IP里划出网络和主机知道IP地址还不够还得知道哪些位代表“网络号”哪些位代表“主机号”。这个信息由子网掩码提供。子网掩码也是32位二进制网络部分全为1主机部分全为0。比如255.255.255.0写成二进制就是前面24个1后面8个0意思是这个IP的前24位是网段后8位是主机号所以这个子网里最多有2的8次方减2个可用主机去掉网络地址和广播地址。192.168.1.0/24这种写法斜杠后的24就是子网掩码里1的个数叫前缀长度。做网络规划时子网掩码决定了你能容纳多少台机器。20台电脑的办公室用/24绰绰有余几百台设备的园区网可能需要/23甚至/22。这个计算一定要会可用主机数等于2的(32减前缀长度)次方减2。对照算一遍/23就是2的9次方减2等于510台可用/22就是2的10次方减2等于1022台。算错了后果很直接——要么地址不够用要么广播域太大拖慢网络。3.3 IPv6为什么必须来、现在到哪一步了IPv6是128位地址数量是2的128次方这个数字大到没法直观感受说“地球上每一粒沙子都能分到几十亿个地址”也不夸张。IPv6彻底解决了地址枯竭问题还顺带优化了报文头部结构、取消了广播、强制支持加密扩展头安全性比IPv4原生更好。但IPv6的推进并没有想象中顺利因为链路改造、设备升级、运维习惯改变都需要成本。现实情况是骨干网基本都支持了运营商的移动网络大部分支持了但很多企业内部网络、旧设备、老旧应用仍然只跑IPv4。当前主流策略是双栈共存两种协议并行跑谁通走谁。这块知识需要有个认知IPv6是大势所趋但对普通开发者和运维来说IPv4仍然是日常打交道最多的对象。4. 传输层双雄TCP和UDP谁负责什么传输层提供的是“端到端”通信能力核心角色是两个协议TCP传输控制协议和UDP用户数据报协议。这两个协议的设计哲学完全不同理解它们的差异基本就理解了传输层。4.1 TCP的三次握手与四次挥手TCP是面向连接的可靠协议。什么叫面向连接就是正式传数据之前先建立一条逻辑通路有点像打电话——先拨号、对方接听、互相确认“我听得到你”才开始说正事。这个过程就是著名的三次握手第一次客户端发SYN包表示“我想建立连接”。 第二次服务端回SYNACK包表示“收到你的请求我也准备连接”。 第三次客户端发ACK包表示“确认收到连接建立”。为什么不能两次核心原因是要防止旧连接请求突然到达服务端造成错误的连接建立。三次握手能让双方都确认“自己发的消息对方能收到对方发的消息自己也能收到”。这个细节面试常问实际排查问题也很有用。断开连接则是四次挥手因为TCP是全双工的两个方向要分别关闭所以比建立连接多一次交互。4.2 端口号一台机器怎么同时跑那么多网络服务一台服务器上同时跑着网站、数据库、邮件服务数据包来了怎么区分该送给谁靠端口号。IP地址找的是设备端口号找的是设备上的具体进程。TCP和UDP协议头里都带着源端口和目的端口就是干这个的。常见端口号是硬知识HTTP的80、HTTPS的443、DNS的53、SSH的22、MySQL的3306。两个通则值得记住0到1023是知名端口给系统服务用1024以上是动态端口普通应用随便用。实际工作中遇到过很多次端口冲突问题——程序启动报“端口被占用”八成就是另一个进程占了同一个口。优先排查方式是看进程再改端口而不是重启服务器硬刚。4.3 TCP和UDP对应用的影响从HTTP和视频通话说起看视频通话为什么偶尔卡顿但不至于断因为音视频走的是UDP。UDP不保证送达、不保证顺序但头部开销小、没有握手确认延迟低丢几个包最多画面糊一下不至于卡半天。而网页浏览、文件传输必须走TCP因为内容不能丢丢一个字节都可能让文件损坏、页面显示不全。用之前的快递类比收尾TCP是顺丰标快有单号、要签收、丢了赔安全但相对慢UDP是发普通快递塞进去就走丢了不通知但胜在快。网络优化时经常要在这两者间做取舍要看重可靠性选TCP要看重实时性选UDP。很多直播、游戏、实时通信类应用还会在UDP上自己实现一套半可靠机制取中间路线。5. 应用层的几个常驻民DNS、HTTP/HTTPS到了应用层才真正是普通用户和开发人员“摸得着”的协议。这一层的协议以自己的目的为核心共享底层传输能力。常见的有DNS、HTTP/HTTPS、FTP、SMTP、SSH、WebSocket等。这里挑两个最重要的展开讲。5.1 DNS互联网世界的通讯录人记不住一串数字IP地址但能记住域名比如baidu.com。DNS域名系统就是负责把域名翻译成IP地址的“通讯录”。你输入一个网址后系统做的事远不止查一次“通讯录”。完整流程大概是先查浏览器缓存再查操作系统缓存再查本机配置的DNS服务器通常由运营商或公共DNS服务商提供如果还没有就一层层往根域名服务器、顶级域名服务器、权威域名服务器查下去。真实解析过程有个特点层层缓存。域名解析结果不是每次都递归到底而是每一层都保留一段时间由TTL值控制。这带来一个实际影响你改DNS记录后全世界生效需要时间因为各地缓存的TTL还没过期。做网站迁移或换IP提前把TTL调低再操作这是老运维才懂的经验。DNS有个经典风险叫DNS劫持用户请求DNS解析时被中间人篡改把合法域名指向钓鱼IP。防范思路是启用DNS安全扩展DNSSEC但部署率一直不高。个人用户最简单的做法是避开不明公共DNS用正规服务商提供的地址。5.2 HTTP与HTTPS每次上网都在用HTTP超文本传输协议是Web的母语。它定义客户端浏览器和服务器之间怎么请求、怎么响应。一个HTTP请求的构成包括请求方法GET、POST、PUT、DELETE等、URL路径、请求头、请求体服务器响应则包括状态码、响应头、响应体。状态码这门“行话”得认识几个200表示成功301表示永久重定向404表示资源不存在500表示服务器内部出错。排错时看到5xx就知道问题在服务端看到4xx大概率是你请求交付的东西有问题。状态码是直白的调试信号比看日志快得多。HTTPS本质上是HTTP加了一层TLS/SSL加密。为什么必须上HTTPS因为HTTP流量是明文传输在网络链路上可以被任何人窥探和篡改你输入密码、支付信息等于裸奔。HTTPS用证书体系解决信任和加密两大问题证书证明“服务器确实是它声称的那台”加密保证“传输内容没人看得懂”。部署HTTPS的核心是配置证书现在主流用Let‘s Encrypt这类免费证书项目加上自动续期脚本成本几乎为零。曾经踩过一个坑证书配置好了但网页还是报不安全。排查了半天发现是页面里混着HTTP协议的图片资源浏览器整体降级警告。这提醒一个问题——上了HTTPS之后页面里所有外部资源也要全部走HTTPS否则证书白配。这个细节写代码的人最容易忽略。6. 网络层和链路层的幕后协议ARP、DHCP、ICMP、NAT除了IP、TCP、UDP、DNS、HTTP这些“明星协议”互联网能跑起来还靠一批幕后协议。它们不那么经常被提及但一旦出问题影响立刻浮出水面。ARP地址解析协议负责把IP地址翻译成MAC地址。在局域网里一台设备要知道目标的MAC地址才能把数据帧发出去ARP就是干这个的。它的运作方式是广播询问“这个IP是谁的请告诉我你的MAC地址”。这个机制简单但有个安全隐患——ARP欺骗攻击者在局域网里伪造应答把流量引到自己的机器上。防范手段有静态ARP表、端口安全等在公共Wi-Fi环境要特别留意这类风险。DHCP动态主机配置协议是“局域网IP分配管家”。你连上路由器设备能自动拿到IP、子网掩码、网关、DNS全靠DHCP。它免去了手动配IP的麻烦也带来了一个问题IP会租约到期到期后设备可能换新IP。做服务器的话必须用DHCP保留功能或者直接手动指定静态IP否则IP一换其他设备就找不到它了。ICMP互联网控制消息协议是网络层的“信使”主要用来传递错误信息和诊断数据。我们常用来测网络的ping工具就是利用ICMP的echo请求和echo应答。ping不通不一定代表网络不通有可能对方禁了ICMP。遇到这种情况改用tcping等工具测TCP端口往往能拿到更准确的结果。NAT网络地址转换前面提到了是路由器把内网地址映射成公网地址的机制。它让大量内网设备共享少量公网IP上网。NAT还附带了一点“安全性”——外部主动发起的连接找不到内网设备天然挡掉了一部分扫描攻击。不过如果要让外部访问内网服务就需要端口映射或反向代理这就是另一个话题了。7. 互联网协议实操排查日常故障一眼定位前面理论再熟真遇到网络故障手忙脚乱的大有人在。从我实际排查经验看绝大多数网络问题按“从底层到上层”逐层检查都能在十分钟内锁定方向。下面几条是我最常用的眼睛和手。7.1 ping不通就是断网先别急着下结论优先执行的命令通常是ping网关再ping外网。ping自己设备的回环地址127.0.0.1通说明本机协议栈没坏ping网关通说明局域网通ping外网不通要看是DNS解析失败还是路由不通。但也分情况有些服务器明确禁ICMPping不通只说明“对方不回应ICMP”不代表服务不可用。这时候用telnet IP端口或者用nc命令测目标端口比如测一个网站443端口能连上就是通的。排查要养成看三层信息的好习惯第一层物理网线或Wi-Fi在不在线第二层网络IP有没有获取到、网关通不通第三层传输和上层目标端口通不通、应用起没起。逐层排除比抓瞎猜原因效率高两个量级。7.2 DNS解析慢或失败怎么办电脑能上微信、能ping通公网IP但就是打不开网页大概率是DNS有问题。先用nslookup解析一下域名看是否返回正确IP。如果不通或超时试着切换公共DNS比如223.5.5.5阿里或119.29.29.29腾讯再对比结果。频繁出现DNS故障还有可能是本地DNS缓存坏了可以执行ipconfig /flushdns刷新缓存。一定要记住每次改完域名记录全网生效都要等TTL过期最长可能48小时这不算故障是机制本身。遇到客户质问“改了解析怎么还没生效”把TTL机制讲清楚就可以了。7.3 TCP连接超时是防火墙问题还是服务问题应用层连通性测试通过只是第一步真正决定应用体验的是TCP连接能否建立。本机telnet目标IP 443端口如果卡住不回大概率是链路中间的防火墙拦截或目标服务没起来。可以跑traceroute看数据包在哪一跳断掉判断卡在运营商、安全组还是本机防火墙。云服务器的话重点检查安全组规则很多莫名其妙的连接问题都是安全组只配了内网规则没配公网规则导致的。这类问题还有个隐含心得改完防火墙规则、安全组规则要习惯性用工具验证一遍端口变化不要“改了就以为好了”。我见过太多改了配置没生效、一拍脑袋重装系统的案例实在没必要。7.4 实用工具清单网上能用的网络排查工具五花八门我常驻的无非这几个ping测连通性、nslookup/dig测DNS、telnet/nc测端口、traceroute/tracert看路由路径、tcpdump/Wireshark抓包分析。前四个日常够用最后一个抓包遇到协议层面疑难杂症时它是一锤定音的工具。新手学习抓包优先从Wireshark入手。它能直观看到数据包的结构哪些字段是IP头、哪些是TCP头、哪一次是握手全都能拨开看。很多人说协议抽象抓一次包把报文和理论对应一遍立刻就通了。以上这些协议的配合关系可以用一个很朴素的场景串起来你打开浏览器输入网址DNS先把域名变成IPTCP把连接建立好HTTP把网页内容要过来IP把数据包一站站送回家路由器通过NAT让内网设备能收发数据ARP在局域网里找到正确设备——整个过程涉及的所有协议就是互联网协议的全部核心家底。对这些协议每多理解一层排查问题和设计系统的能力都跟着进一层。
返回列表