深入了解linux网络—— 网络基础
计算机网络
从网络发展的角度来看,最初的计算机之间是相互独立(独立模式)
随着不断的发展,我们人与人之间需要协作,使用计算机就需要一种技术,将多台计算机连接在一起,完成数据共享(网络互联)。
局域网LAN
:计算机的数量更多,通过交换机和路由器连接在一起;
广域网WAN
:将全球计算器都连在一起;
这里局域网和广域网只是一个相对的概念。
初识协议
简单来说协议就是一种约定(就好比生活中的某种约定)
计算机之间的传输介质是光信号和电信号(通过频率和强弱来表示0
和1
等),想要传递各种不同的信息,就需要约定好双方的数据格式;
但是,计算机之间要想通信,不光要约定好协议,还要让所有人遵守该协议(执行约定),才能够完成通信;
要完成计算机之间通信,不光我们要遵守该约定,计算机厂商、计算机操作系统、计算机网络硬件设备等都要遵守该约定。
要遵守约定,那这个约定是什么呢?
ISO
(国际标准化组织)制定了OSI
(Open System Interconnection,开放系统互联)七层网络模型
OSI
把网络从逻辑上分为了7
层,每一层都有相关、相对应的物理设备(路由器,交换机等)OSI
七层模型是一种框架性的设计方法,主要功能就是帮助不同类型的主机实现数据传输OSI
将服务、接口和协议者三者明确地区分开,概念清楚且理论也较完整。
通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
在网络角度,
OSI
制定的7
层模型非常完善,但是在实际操作过程中,会话层、表示层是不可能接入到操作系统中的;所以在实践中就变成了5层,
TCP/IP
协议(物理层、数据链路层、网络层、传输层和应用层)
软件分层
OSI 七层参考模型与软件体系分层架构遵循一致的 “分层解耦” 设计范式,二者均通过将复杂系统拆解为具备明确职责边界的层级结构,实现系统设计的科学性与可维护性,其核心优势可从以下维度进行专业界定:
- 降低系统耦合度:各层级间通过标准化接口(Interface)实现交互,层级内部的实现逻辑(Implementation)与外部依赖解耦。当某一层级进行技术迭代或逻辑优化时,只要保持接口契约的一致性,即可避免对其他层级产生直接影响,符合 “高内聚、低耦合” 的软件设计原则。
- 简化系统维护成本:每层均遵循 “单一职责原则(Single Responsibility Principle)”,仅聚焦特定领域的功能实现(如 OSI 模型中 “数据链路层” 负责帧封装与物理地址解析,软件架构中 “数据访问层” 负责数据库交互)。当系统出现异常时,可基于层级职责快速定位问题域,降低故障排查与修复的复杂度。
- 提升组件复用性:标准化的层级设计使各层可作为独立的功能组件存在,在不同系统或场景中实现复用。例如 OSI 模型的 “传输层”(TCP/UDP 协议)可支撑各类应用层协议(HTTP、FTP 等),软件架构中的 “工具类层” 可被业务层、服务层等多模块调用,减少重复开发成本。
- 增强系统可扩展性:分层架构为系统横向扩展(如增加新功能模块)与纵向升级(如替换某层技术方案)提供灵活支撑。当需扩展系统能力时,可在现有层级结构中新增层级或扩展接口,无需重构整体架构;若某层技术栈过时,可在保持接口兼容的前提下替换为更优方案,保障系统长期演进能力。
理解协议
上述简单了解了OSI
协议,这里再重新理解一下协议和协议分层;
其实在计算机内部中也是存在协议的,设备与内存之间存在内存协议;其他设备与磁盘之间,存在磁盘相关的协议(SATA
、IDE
、SCSI
等)
网络通信和本机通信,最大的区别就是距离;
网络通信,主机之间距离变远了,就势必会产生新的问题;
就好比谈恋爱一样,两人每天在一起,出现了矛盾也能即使去解决;但是一旦两人之间距离变远了(异地恋),就会产生很多新的问题。
网络通信也是如此,主机之间距离变远了,就出现了很多问题:
- 要发数据给对方,要现发给路由器,怎么发?
- 世界上这么多主机,如何定位对方主机呢?
- 如果发送的数据丢失了,怎么办?
- 对方接受到数据后,怎么处理/使用该数据呢?
TCP/IP
协议
网络通信,主机之间距离变远了,产生了新的问题;就要有新的解决方案。
TCP/IP
协议,本质上就是一种解决方案。
1. TCP/IP
协议与操作系统
在初学Linux
操作系统时,看过下面这张图;OS
也是分层的,那TCP/IP
协议与操作系统有没有关系呢?
TCP/IP
协议分为:物理层、数据链路层、网络层、传输层、应用层。
这里物理层与底层硬件相对应、数据链路层与操作系统中驱动程序相对应;
**对于网络层和传输层,这两层协议被集成在操作系统中。**而应用层,就在OS
之上,由用户实现。
这两层协议实现在内核中,不同的操作系统都要遵守协议,其网络部分就必须一样。
而传输层协议最著名的就是TCP
协议,网络层最著名的协议就是IP
协议;TCP
和IP
作为核心,协议整体就统称为TCP/IP
协议。
协议是什么?
协议究竟是什么?
我们知道,不同的操作系统其网络部分是相同的;
所以在某一层定义一个struct
结构体,这样在给对方主机方式信息时,对方就能识别并精准获取其中的数据。
所谓的协议,就是通信双方都认识的结构化的数据类型;
协议栈是分层的,每层双方都有协议,同层之间,相互可以认识对方的协议
网络传输的基本流程
MAC
地址
MAC
地址用来识别数据链路层中相连的节点;- 长度
48
位(6
字节)一般使用16
进制数字加冒号的形式表示。MAC
地址在网卡出厂时就确定了,不能修改,MAC
地址是唯一的。
局域网(以太网)通信原理
我们知道,两个主机在同一个局域网下,是可以直接通信的;
在局域网中通信,就类似于现实中在教室中上课一样;
在局域网中,向指定主机发送信息,该局域网中的所有主机都是能够收到该信息的;只不过其他主机在收到信息,比对目标MAC
地址后,就将该信息丢弃了;只有目标主机比对目标MAC
地址后,发现信息是发送给自己的,才接受该信息。
此外,在以太网中,还存在下述概念:
- 在以太网中,任何时刻只允许一台机器向网络中发送数据(互斥)
- 如果多态同时发生会产生数据干扰,也就是 数据碰撞
- 所有要发送数据的主机要进行碰撞检测和碰撞避免
- 没有交换机去情况下,一个以太网就是一个碰撞域
- 局域网通信过程中,主机收到报文确认是否发送给自己的,
MAC
地址判定
报文封装与解包
了解了以太网通信的原理,理解了主机之间的通信
但是,数据是由用户产生并发送的啊,那也就是说,要发送的数据要在自己的主机是由上层先向下依次传输到到物理层(应用层、传输层、网络层、数据链路层、物理层);
然后,再通过网络将数据发送给对方,对方获取到数据后,再向上传输。
其中,每一层都存在对应的协议,所以数据在传输流程后,还要进行封装和解包
简单来说就是:
数据在向下传输时,接受上层的报文时,要封装该层对应的报头再传递给下层。(例如应用层在接受用户发送的信息之后,对其进行封装,再传递给下层传输层)
对方主机接受数据,通过对比发现该报文是发送给自己的,数据再进行解包,向上传输。(例如,数据链路层接受到报文后,对报文进行解包,获取数据链路层包头,并去除报头传输给上层网络层)
报头部分, 就是对应协议层的结构体字段, 我们一般叫做报头
除了报头, 剩下的叫做有效载荷
报文 = 报头 + 有效载荷
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做 数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部 (header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是 什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理
数据封装
数据解包
简单了解了协议,那在学习任何协议,我们都要了解:
- 要学习的协议,是如何做到解包和封装的?
- 要学习的协议,是如何做到将自己的有效载荷交给上层协议的?
跨网络传输
IP地址
IP 协议有两个版本, IPv4 和 IPv6
- IP 地址是在 IP 协议中, 用来标识网络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是一个 4 字节, 32 位的整数;
- 通常也使用 “点分十进制” 的字符串表示 IP 地址, 例如
192.168.0.1
; 用点 分割的每一个数字表示一个字节, 范围是 0 - 255;
跨网段的主机的数据传输数据从一台计算机到另一台计算机传输过程中要经过一个或 多个路由器.跨网段主机数据传输的核心机制:路由器
IP地址意义:
- 唯一标识:作为 32 位二进制整数(点分十进制表示),为网络中每台主机(含设备)分配唯一逻辑身份,确保设备可被精准区分;
- 跨网定位:通过 “网络部分 + 主机部分” 结构,定位目的主机所在网段及网段内具体位置,支撑跨网段通信;
- 路由依据:为路由器提供转发决策核心参考,路由器通过目的 IP 匹配路由表,确定数据下一跳方向,实现数据逐跳传递;
- 网段隔离:依托网段划分(如私有地址段)构建网络逻辑边界,助力安全防护(如 NAT 隔离内外网)与网络管理,同时协同传输层、数据链路层等实现分层通信闭环,是互联网跨设备互联的 “数字基石”。
对于上图跨网络传输的过程中,由数据链路层在收到上层的信息后,根据MAC
地址macLeft
将数据传输到路由器中;
路由器对数据进行路由,重新封装;封装后的数据源MAC
地址就变成了macRight
,目标MAC
地址就变成了macB
。
然后再报文传输给用户B
。
通过上图传输流程,我们也能发现,
IP
地址是一种不变的,而MAC
地址一直在改变。
这里也可以理解为IP
地址就是目的地,而MAC
地址是报文要传输的下一站。
所以,整个跨网络传输就类似于下图:
而IP
地址,提供了网络虚拟层, 让世界的所有网络都是 IP 网络, 屏蔽最底层网络的差异