你家里现在大概率是这么个情况:电信或者联通拉了根宽带,接了个路由器,手机连WiFi,电脑插网线,然后就上网了。
你不会去想这中间发生了什么,也不需要想。
但你有没有好奇过一个事儿:你家路由器可能是小米的,公司用的是华为的,网站服务器跑在戴尔的机器上,中间经过的运营商设备可能是思科的——这些完全不同厂商造出来的东西,凭什么能互相通信?
答案就俩字:协议。
所谓网络协议,其实就是大家提前商量好的一套规矩。你按这个规矩发数据,我按这个规矩收数据,不管你是谁家造的设备,只要守规矩就能聊。
这个规矩,就是接下来要说的东西。
OSI七层模型:一个理想化的分层方案
国际标准化组织当年搞了一个OSI参考模型,把网络通信这件事拆成了七层。从下往上分别是:
| 层级 | 名称 | 干什么的 |
|---|---|---|
| 第7层 | 应用层 | 直接面向用户,HTTP、FTP、邮件这些都在这层 |
| 第6层 | 表示层 | 数据格式转换,你看到的图片文字,计算机看到的是二进制,这层负责翻译 |
| 第5层 | 会话层 | 管理通信双方的“对话”,建立、维护、断开连接 |
| 第4层 | 传输层 | 端到端的数据传输,TCP和UDP就在这层,通过端口号区分不同应用 |
| 第3层 | 网络层 | 寻址和选路,IP协议在这层,负责把数据从A送到B |
| 第2层 | 数据链路层 | 在具体的链路上传输数据帧,以太网协议在这层 |
| 第1层 | 物理层 | 最底层,管的是电信号、光信号这些物理介质上的传输 |
这个模型作为理论框架,逻辑上确实很清晰。
但问题来了——实际中没人用这个。
TCP/IP:真正跑在互联网上的那套
现实世界里真正在用的是TCP/IP协议体系,只有四层:应用层、传输层、网络层、网络接口层。
为什么OSI没跑起来?我觉得主要两个原因。
第一是时间差。 OSI模型还在委员会里讨论的时候,TCP/IP已经在美国的大学之间跑起来了。先跑起来的东西有用户,有反馈,有迭代,后面再想用一个纯理论的东西去替代它,基本不可能。这跟很多技术选型的故事一样,不是最好的赢了,是先跑起来的赢了。
第二是务实程度。 OSI分了七层,分得太细了。特别是会话层和表示层,听起来很有道理,但实际写程序的人发现,这俩层的功能在开发应用的时候顺手就做了。你写个Web服务,session管理、数据编解码,本来就是应用代码的一部分,没必要单独抽出来搞两层。所以TCP/IP直接把这俩并进了应用层,简单粗暴但好使。
「其实这事儿挺典型的,理想模型和工程实践之间永远有gap。OSI是学院派的完美设计,TCP/IP是工程师在实战中迭代出来的东西。最终市场选了后者。」
对应关系大概是这样:
| TCP/IP四层 | 对应OSI |
|---|---|
| 应用层 | 应用层 + 表示层 + 会话层 |
| 传输层 | 传输层 |
| 网络层 | 网络层 |
| 网络接口层 | 数据链路层 + 物理层 |
核心功能没变,就是层数精简了。
为什么要分层?
这个问题其实比“分几层”更重要。
第一,各干各的,互不干扰。
打个比方,公司A的经理要让公司B的经理签一份文件。A经理把文件交给自己的助理,助理想办法送到B的助理手里,B助理再转交给B经理签字,原路返回。
经理只关心文件签没签,不关心助理是骑车送的还是快递寄的。助理只关心怎么把东西送到,不关心文件写了啥。
网络分层也是这个意思。浏览器发一个HTTP请求,它不关心底下的数据是走电信还是联通出去的,走光纤还是WiFi。反过来,路由器转发数据包的时候,也不关心里面装的是网页还是视频。上层用下层的服务,但不需要知道下层怎么实现的。
第二,分工明确,好培养人。
网络这个领域太大了。做路由交换的主要跟网络层、数据链路层打交道,做后端开发的主要在应用层和传输层。如果不分层,所有东西揉成一坨,没人能全部掌握。分了层之后,每个方向的人专注自己那几层就行,这跟公司分部门是一个道理。
第三,排错的时候有方向。
比如办公区访问不了服务器区的某个服务。如果你懂分层,排查思路就很清晰:先看网络层,ping一下通不通;通的话再看传输层,端口开没开;端口没问题再看应用层,服务本身是不是挂了。一层一层往上查,比瞎蒙高效太多了。
第四,技术迭代互不影响。
底层从铜缆换成光纤,上层的应用不用改。应用从HTTP升级到HTTPS,底层的网络设备不用动。分层让每一层可以独立演进,这对整个互联网的发展太重要了。
给初学者的一点建议
我坦白说,网络协议这块东西,第一遍看大概率是懵的。这很正常。
不要试图一次全搞懂。 先过一遍有个大概印象,知道有这么几层,每层大概干什么。然后随着后面学具体协议、做实验抓包,你会反复回来看这个分层模型,每次都会有新的理解。
多动手,少死记。 协议这东西你光看文字描述永远是抽象的。打开Wireshark抓个包,看看一个HTTP请求从应用层到物理层每一层加了什么头部,比看十遍教材都管用。
理解原理比会配置重要。 会敲命令是基本功,但知道为什么这么配、这个协议在什么场景下用、跟别的协议怎么配合,这才是长期吃饭的本事。
以上,OSI和TCP/IP的基本框架就是这些。后面具体每一层的协议怎么工作,那就是另一个更长的故事了。



暂无评论内容