
Linux 网络基础:协议分层与数据传输流程
计算机网络背景及协议概念解析。介绍 OSI 七层模型与 TCP/IP 五层模型的区别与联系。阐述局域网通信原理,包括 MAC 地址识别与碰撞检测机制。分析跨网络传输中 IP 地址与 MAC 地址的变化规律。讲解数据封装与解包过程,说明协议栈各层如何通过结构体描述属性及分用标识符实现数据交付。

计算机网络背景及协议概念解析。介绍 OSI 七层模型与 TCP/IP 五层模型的区别与联系。阐述局域网通信原理,包括 MAC 地址识别与碰撞检测机制。分析跨网络传输中 IP 地址与 MAC 地址的变化规律。讲解数据封装与解包过程,说明协议栈各层如何通过结构体描述属性及分用标识符实现数据交付。


在现实世界中,人之间需要协作,计算机作为人的工具,也需要协作。人之间可以直接面对面通信,而计算机之间则需要通过网络进行协作。
网络的发展过程大致如下:

最初每个计算机相互独立,数据共享依赖软盘等硬件,效率低下。随后出现网络,多个计算机数据可上传至服务器,无需硬件传输。随着计算机数量增加,交换机和路由器出现,形成局域网(LAN),支持不同地区通信。最后将多个局域网合并为广域网(WAN),覆盖范围更广。
'协议'简单理解就是一种约定。计算机之间的传输介质是光信号和电信号,通过频率和强弱标识 0 和 1。为了让接收方知道信息含义,双方需约定数据格式,这就是协议。
仅约定基本协议不够,还需制定更细致的规则,让不同厂商、操作系统、硬件设备的计算机都能互相通信,即网络协议。一般由具有定制资格的组织或公司制定标准。
协议本质也是软件,设计为层状结构以实现模块化和解耦合。例如基类与子类,修改子类即可改变功能而不影响基类。分层可降低软件维护成本。
以打电话为例,语言层用汉语沟通,通信设备层有各自的协议解码信息。只要遵守相应协议,变更某一层不影响通信。
OSI(Open System Interconnection)开放系统互连参考模型是一个逻辑上的定义和规范。


OSI 七层模型非常完善,但在实际操作中,会话层和表示层难以接入操作系统,工程实践中最终落地的是五层协议。
TCP/IP 是一组协议的代名词,包括许多协议组成协议簇。

它将应用层、表示层和会话层合并为应用层。
单机情况下计算机内部也有协议(如 USB 协议)。但网络通信距离变长会引发新问题:如何发送数据给目标主机、如何定位主机、数据丢失怎么办、接收方如何处理数据。
这些问题具有层次性,需要新的解决方案。TCP/IP 协议参考 OSI 七层模型设计,是解决网络通信的具体方案。
TCP/IP 的五层模型通常称为网络协议栈。不同的模型对应电脑中不同的部分,如网卡在底层硬件实现,应用层在最上层实现。这种对应关系是操作系统遵守的标准,使得不同操作系统之间能够通信。

操作系统中的传输层和网络层是网络协议栈的核心。传输层著名协议是 TCP,网络层是 IP 协议,因此整体称为 TCP/IP 协议。TCP/IP 协议的核心实现在操作系统中,可认为它是操作系统的一部分。
协议是约定,但需具体描述。操作系统一般用 C 语言编写。协议包含状态信息、地址信息、网络数据等不同属性,操作系统使用结构体来描述协议,存储不同类型的属性。

在网络协议栈的每一层都会存在这样的结构体。不同操作系统每一层之间能够相互识别各自层级的结构体,并提取相应信息,从而实现网络通信。
两台主机在同一局域网中可以通信。主机需要有'名字'来识别数据是否发给自己的,这个'名字'就是 MAC 地址。
MAC 地址用来识别数据链路层中相连的节点,长度为 48 比特位(6 字节),通常用 16 进制数字加冒号表示(如 08:00:27:03:fb:19),在网卡出厂时确定,通常是唯一的。

主机 A 向主机 E 发送消息时,信息中包含目的地址(主机 E 的 MAC 地址)。其他主机也能收到信息,但判断不是发给自己的则忽略。
局域网中存在大量信息,可能互相干扰。以太网中有碰撞检测和碰撞避免机制。碰撞检测用于检查当前是否有信息正在发送;碰撞避免则是检测到有信息发送时等待,直到没有发送为止。以太网是一个基于碰撞检测和碰撞避免的通信模式,也是一种共享资源,类似临界区访问。
用户 A 向用户 B 发送消息,按照网络协议栈顺序从上到下一层传递。用户 B 接收时从底层向上层传递。

每一层都有相应的协议,传输时需进行封装和解包。发送方封装,接收方解包。封装是为了添加必要的信息(如地址、协议标识),类似于快递包装。

每一层封装的内容称为报头,被封装的内容称为有效载荷。应用层的用户数据是有效载荷,外部封装应用层报头。传输层将应用层报头 + 数据作为有效载荷,再封装传输层报头。
协议本质是结构体,传递的是结构体对象。右边主机从下往上解包,每一层对应的都是最外面的包装。网络协议栈每一层实现相同,层级能识别对方报头并解包。
处于数据链路层的信息称为数据帧,网络层称为数据报,传输层称为数据段。
细节一:封装和解包过程体现后进先出的栈特性,这也是网络协议栈名称的由来。
细节二:任何协议(应用层除外)都要解决两个问题:将报头和有效载荷分离,把数据交给上层哪一种协议。后者叫做分用。左边主机封装时会预留分用标识符,右边主机根据标识符确定交给上层的哪个协议。

跨网络传输需使用路由器和 IP 地址。IP 协议目前有两个版本 IPv4 和 IPv6,主要讲解 IPv4。
IP 地址是在 IP 协议中用来标识网络中不同主机的地址。IPv4 是 4 字节、32 位的整数,通常使用点分十进制字符串表示(如 192.168.0.1)。
MAC 地址和 IP 地址的区别:

假设唐僧四人取经经过三个地方,妖怪问从哪里来、到哪里去。回答始终如一的是源 IP 和目标 IP。妖怪问上一站从哪里来、下一站去哪里,答案会变化,这对应源 MAC 和目标 MAC。
在整个过程中,IP 地址始终不变,MAC 地址始终变化。根据目的 IP 地址,动态选择经历的 MAC 地址(即经历哪些主机或路由器)。

当上层数据交给网络层后,网络层根据目的地址判断是否是当前局域网地址。若不属于,则将地址交给路由器。网络层不能直接交给路由器,需封装交给数据链路层,再由数据链路层交给路由器。

发送给路由器前后,源 IP 和目标 IP 始终未变,源 MAC 和目标 MAC 在路由器前后发生变化。实际传输经过很多路由器,每经历一个路由器就要进行向上交付、解包、向下交付、封装,MAC 地址随之改变,因为 MAC 地址只在局域网有效。

以上即为 Linux 网络基础相关内容。

微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online