7层网络协议
排查网络问题时,最常用的思路就是分层定位:网线通不通、IP 能不能 ping 通、端口有没有监听、应用返回了什么。这套思路的源头就是 OSI 七层模型。这里把七层各自解决的问题过一遍,作为自己的备忘。
先说为什么要分层。网络通信要处理的事情太多:信号怎么在介质上传输、出错了怎么办、跨网络怎么找到对方、应用之间怎么约定数据格式。把这些问题按职责切开,每一层只依赖下一层提供的服务,只向上一层暴露接口,各层就可以独立设计和替换。OSI 模型把整个过程切成七层,从下往上依次是:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
物理层
解决两个硬件之间怎么通信的问题,常见的物理媒介有光纤、电缆、中继器等。它主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
换句话说,物理层只关心电气特性和机械特性——电压多高算 1、接口长什么样、一秒能传多少比特,完全不理解传的内容是什么。网卡的物理接口、集线器都工作在这一层。
数据链路层
在计算机网络中由于各种干扰的存在,物理链路是不可靠的。该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。
它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;同样,也将来自上层的数据帧,拆装为位流形式的数据转发到物理层。这一层的数据叫做帧。
封装成帧之后,才有了"一段数据从哪开始、到哪结束"的边界,也才能在帧尾附加校验字段做差错检测,收到坏帧直接丢弃。这一层用 MAC 地址标识同一链路上的设备,以太网、交换机都工作在这一层,所以交换机也常被叫作二层设备。
网络层
计算机网络中如果有多台计算机,怎么找到要发的那台?如果中间有多个节点,怎么选择路径?这就是路由要做的事。
该层的主要任务就是:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。这一层定义的是IP地址,通过IP地址寻址,所以产生了IP协议。
和链路层的区别在于作用范围:MAC 地址只在同一段链路内有效,IP 地址则是全网寻址。数据包每经过一个路由器,链路层的帧会被拆掉重新封装,但 IP 层的源地址和目的地址一路保持不变。要注意 IP 协议本身是"尽力而为"的——它只负责把包往目的地送,不保证送到、不保证顺序,可靠性问题留给上层解决。路由器就是典型的三层设备。
传输层
当发送大量数据时,很可能会出现丢包的情况,另一台电脑要告诉是否完整接收到全部的包。如果缺了,就告诉丢了哪些包,然后再发一次,直至全部接收为止。
简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。
传输层还解决了另一个问题:IP 地址只能定位到一台主机,但一台主机上跑着很多进程,数据到底交给谁?答案是端口号,IP 加端口才能定位到具体的进程。这一层最有名的两个协议就是 TCP 和 UDP:TCP 面向连接,靠确认、重传、流量控制来保证可靠;UDP 无连接,不保证可靠但开销小,适合对时延敏感、丢一点也无所谓的场景。
会话层
虽然已经可以实现给正确的计算机,发送正确的封装过后的信息了。但我们总不可能每次都要调用传输层协议去打包,然后再调用IP协议去找路由,所以我们要建立一个自动收发包,自动寻址的功能。于是会话层出现了:它的作用就是建立和管理应用程序之间的通信。
它负责的是会话的建立、维持和终止——通信双方从"开始对话"到"结束对话"的整个过程由它管理。
表示层
表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。
典型的工作包括字符编码转换、数据的加密解密和压缩解压。两台机器内部表示数据的方式可能不同,表示层保证一方发出的数据在另一方能被正确理解。
应用层
应用层是计算机用户,以及各种应用程序和网络之间的接口,其功能是直接向用户提供服务,完成用户希望在网络上完成的各种工作。
我们平时打交道最多的协议都在这一层:浏览网页的 HTTP、传文件的 FTP、发邮件的 SMTP、做域名解析的 DNS。

和 TCP/IP 模型的关系
OSI 是概念模型,实际互联网用的协议栈是 TCP/IP。TCP/IP 通常划成四层:网络接口层对应 OSI 的物理层和数据链路层,网际层对应网络层,传输层对应传输层,而会话层、表示层、应用层被合并成一个应用层。这也是为什么实际协议里很少见到独立的会话层、表示层协议——它们的职责大多由应用层协议或应用程序自己承担了。
踩坑与注意
1)各层数据单位容易记混:物理层是比特,数据链路层是帧,网络层是包(报文),传输层是段。排错和面试都常用到。
2)设备和层的对应关系值得记住:集线器工作在物理层,交换机工作在数据链路层,路由器工作在网络层。"二层交换机""三层交换机"的叫法就是从这里来的。
3)判断一个协议属于哪一层,看它解决的是什么问题,而不是望文生义。比如 DNS 虽然是基础设施,但它是应用层协议;ARP 做的是 IP 到 MAC 的映射,工作在网络层和链路层之间。
按层定位问题的顺序可以固定下来:先看物理连通(网线、网卡灯),再看链路和 IP(ping 网关、ping 目标),再看传输层(端口是否监听、防火墙是否放行),最后看应用本身的日志。逐层排除比乱试快得多。
小结
七层模型的核心是职责分离:每一层只解决一类问题,向上提供服务,向下使用服务。物理层传比特,链路层保证一段链路可靠,网络层负责全网寻址和路由,传输层保证端到端的传输质量,上面三层则服务于应用本身。理解了每层解决什么问题,再看具体协议就知道它该放在哪里、排错时该从哪层查起。
评论 / COMMENTS