Linux系统之网络基础概念

本篇目标:

1.了解网络传输基本流程

2.认识MAC,IP地址

3.了解数据包封装和分用过程

一.网络传输基本流程

1.局域网通信原理

1.1.举例说明

本次以局域网中的以太网为例子,我们先想一个问题:

两台主机在同⼀个局域网,是否能够直接通信?

先举一个生活中的例子 来回答**:**

李老师正在教室里上课。当老师喊"小王"并提出问题时,教室里的张三、李四和王五虽然也能听见老师说话,但他们发现老师叫的不是自己的名字,因此不会回答,而是直接忽略这条信息。

小王听到自己的名字后,知道老师是在和自己说话,于是接收问题并作出回答。小王回答时,目标是李老师,其他同学听见后同样不需要处理。

在这个过程中,姓名用于标识信息的发送目标

  • "小王"表示问题应该由小王接收。
  • "李老师"表示回答应该交给李老师。
  • 其他人即使听到了信息,发现目标不是自己,也会将其忽略。

局域网中的计算机通信也需要类似的标识 。那么在以太网中,每个网络接口都具有一个 MAC 地

址,用于在局域网中标识对应的网络接口。

所以想要直接通信,需要包含一下的两个东西:

  • 源 MAC 地址:表示数据由谁发送。
  • 目的 MAC 地址:表示数据要发送给谁。

1.2.认识MAC地址

接下来就让我们认识一下MAC地址吧!

作用:识别数据链路层中相连的节点;

长度为 48 比特位,即 6 个字节,⼀般用16 进制数字加上冒号的形式来表示

例如: 08:00:27:03:fb:19

注意:mac地址在网卡出厂时就确定了,不能修改mac地址,通常是唯⼀的(虚拟机中的mac地址不是真实的mac地 址,可能会冲突;也有些网卡支持用户配置mac地址).

接下来让我们以一个图片来认识以太网的通信原理,如图

解释:首先,主机 A 向主机 E 发送数据。在共享式以太网中,主机 B、C、D 和 E 的网卡都能收到该数据帧。每台主机都会检查数据帧中的目的 MAC 地址。主机 B、C、D 发现目的 MAC 地址与自己的 MAC 地址不匹配,因此将数据帧丢弃;主机 E 发现目的 MAC 地址与自己的 MAC 地址匹配,因此接收该数据帧。

特点:

• 在以太网中,任何时刻,只允许⼀台机器向网络中发送数据;

• 如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞;

• 所有发送数据的主机要进行碰撞检测碰撞避免;

• 没有交换机的情况下,⼀个以太网就是⼀个碰撞域;

• 局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定。

可能有人会有这个疑问:只允许⼀台机器向网络中发送数据和如果有多台同时发送,这两个不是很矛盾吗?

答案:这两句话并不矛盾,其主要意思是:在同一个碰撞域中,同一时刻只能有一台主机成功地发送数据。如果主机 A 和主机 B 同时发送数据,两个信号就会相互干扰,从而发生数据碰撞。双方在发送过程中都会进行碰撞检测。检测到碰撞后,它们会立即停止发送,然后分别随机等待一段时间,再重新尝试发送数据。

2.数据传输

初步明白了局域网通信原理,再来看同⼀个网段内的两台主机进行发送消息的过程:

如图:

而其中每层都有协议,所以当进行上述传输流程的时候,要进行封装和解包,封装如图:

• 报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头

• 除了报头,剩下的叫做有效载荷

• 故,报文=报头+有效载荷

解释:

假设用户 A 想通过网络发送一句:你好

这里的"你好"只是为了方便理解。计算机中实际传输的是经过字符编码后的二进制数据。

<1>. 应用层封装

应用层首先按照应用层协议组织数据:

复制代码
应用层报头 | "你好"

其中:

  • "你好" 是用户真正想发送的数据。
  • 应用层报头记录应用程序约定的信息。

经过应用层封装后:

复制代码
应用层报头 + "你好"

整体成为传输层眼中的有效载荷

<2>. 传输层封装

应用层数据向下交给传输层。传输层不会修改应用层数据的内部结构,而是在其前面添加传输层报头:

复制代码
传输层报头 | 应用层报头 | "你好"

此时:

复制代码
应用层报头 + "你好"

是传输层的有效载荷。

而整个:

复制代码
传输层报头 + 应用层报头 + "你好"

又会成为网络层的有效载荷。

<3>. 网络层封装

传输层数据继续向下交给网络层。网络层添加 IP 报头

复制代码
网络层报头 | 传输层报头 | 应用层报头 | "你好"

IP 地址(后面讲)用于确定数据需要从哪台主机发送到哪台主机。

<4>. 数据链路层封装

网络层数据继续交给数据链路层。以以太网为例,数据链路层添加以太网帧头:

复制代码
链路层报头 | 网络层报头 | 传输层报头 | 应用层报头 | "你好"

链路层报头中主要包含:

  • 源 MAC 地址
  • 目的 MAC 地址
  • 上层协议类型

然后网卡将完整的以太网帧转换成电信号、光信号或者无线信号发送出去。

解包与分用如图

解释:

<1>. 网卡接收完整数据帧

主机 B 的网卡最先收到的是完整的以太网帧:

复制代码
链路层报头 | 网络层报头 | 传输层报头 | 应用层报头 | "你好"

网卡接收到数据后,将其交给数据链路层处理。

<2>. 数据链路层解包

数据链路层只关心链路层报头,主要检查:

  • 目的 MAC 地址是否是自己的。
  • 数据帧是否发生错误。
  • 上层协议是什么。

确认数据帧应该由自己接收后,数据链路层去掉链路层报头

复制代码
网络层报头 | 传输层报头 | 应用层报头 | "你好"

<3>. 网络层解包

网络层接收到 IP 数据报:

复制代码
网络层报头 | 传输层报头 | 应用层报头 | "你好"

处理完成后,去掉网络层报头:

复制代码
传输层报头 | 应用层报头 | "你好"

<4>. 传输层解包

传输层收到:

复制代码
传输层报头 | 应用层报头 | "你好"

处理完成后,去掉传输层报头:

复制代码
应用层报头 | "你好"

<5>. 应用层解析数据

应用程序收到:

复制代码
应用层报头 | "你好"

应用程序根据对应的应用层协议解析应用层报头,然后取出真正的用户数据:

"你好"

最终,用户 B 才能看到发送方传来的消息。

解包就是每一层解析并去掉属于本层的协议报头,将剩余数据交给上一层。

然后我们要谈谈几个问题了

<1>.为什么是自顶向下封装?

答:网络数据由上层的用户程序产生 ,而用户程序不能直接操作底层网卡,只能通过系统调用把数

据交给操作系统。操作系统再按照协议栈从上到下依次处理数据,最终通过网卡驱动控制网卡发送

数据。

<2>. 每一一层解包后,上层协议有这么多,如何做到将自己的有效载荷,交付给上层具体的一个协议的?

答:这里就是分用的作用了,分用 就是一层收到数据后,根据报头中的某个字段,决定把数据交给上层的哪个协议或者哪个应用程序。

<3>同层之间,都认为自己在和对方同层协议之间在通信?

答:发送方某一层添加的协议报头由接收方对应层解析;但数据实际仍然要经过发送方自顶向下封装、网络传输以及接收方自底向上解包。

<4>.为什么叫做协议栈?

答:发送方的数据从应用层向下传递,每经过一层,就添加一个本层报头,如图:

接收方按照相反的顺序处理,如图:

也就是说:最后添加的链路层报头最先被解析,最先添加的应用层报头最后被解析,具有"后进先出"的特点。

3.跨络络传输流程

3.1.认识IP地址

IP 协议有两个版本,IPv4和IPv6 ,凡是提到IP协议,没有特殊说明的,默认都是IPv4。

作用:用来标识网络中不同主机的唯一地址;

大小:IP 地址是⼀个 4 字节,32 位的整数;

注意:通常也使用"点分十进制 "的字符串 表示 IP 地址,例如192.168.0.1 ;用点分割的每⼀个数字表示⼀个字节,范围是0 - 255 192.168.0.1 ;

然后跨网段的主机的数据传输,数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路

由器,如图:

为什么要去目标主机,先要走路由器?

解释:如果目标主机在同一局域网,可以通过IP地址直接发送到目标主机,但是目标主机在其他网络,先交给默认网关,由路由器根据目的 IP ,通过MAC地址找到下一个局域网

IP地址的意义?如图:

解释:首先**主机 A 判断目标不在本地局域网,**主机 A 要发送的 IP 数据报是:

cpp 复制代码
源IP:192.168.2.2
目的IP:172.168.2.2
数据:你好

主机 A 判断出 172.168.2.2 与自己不在同一个局域网 ,因此不能直接发送给主机 B,只能先交给路由器 192.168.2.1

路由器收到数据后:

cpp 复制代码
去掉原来的链路层报头。
查看目的 IP:172.168.2.2。
查询路由表。
发现目标位于右边的 172.168.2.0 网络。
决定从右侧接口 172.168.2.1 发送。

然后重新封装 MAC 地址:

cpp 复制代码
源MAC:路由器右接口MAC
目的MAC:主机B的MAC

IP 地址通常保持不变:

cpp 复制代码
源IP:192.168.2.2
目的IP:172.168.2.2

主机 B 收到数据帧后发现:

  • 目的 MAC 是自己的。
  • 目的 IP 也是自己的。

于是逐层解包,最终把"你好"交给用户 B。

然后结合封装与解包,体现路由器解包和重新封装的特点,如图:

3.2.IP地址和MAC地址的区别

解释:

可以把唐三藏西天取经的过程,类比成一个 IP 数据报跨越多个局域网到达目标主机的过程。

假设:

复制代码
出发地:东土大唐
目的地:西天灵山
中途经过:两界山、高老庄、流沙河、火焰山等地

其中:

  • 东土大唐 相当于源 IP 地址
  • 西天灵山 相当于目的 IP 地址。
  • 中途经过的每个驿站相当于路由器
  • 每两个驿站之间相当于一个局域网

唐三藏的通关文牒上始终写着:

复制代码
出发地:东土大唐
目的地:西天灵山

无论唐三藏目前走到了高老庄、流沙河还是火焰山,他的最终目的地始终是西天。

这就相当于 IP 数据报中的:

复制代码
源IP地址:东土大唐
目的IP地址:西天灵山

在不考虑特殊情况时,数据经过多个路由器,源 IP 和目的 IP 通常不会改变:

整个过程中始终是:

复制代码
源IP:东土大唐
目的IP:西天灵山

所以:IP 地址负责描述数据最终从哪台主机发出,要到达哪台主机。

但是唐三藏不可能从东土大唐一步直接走到西天,他每次只能先前往下一个地点。

例如:

复制代码
东土大唐 → 两界山
两界山   → 高老庄
高老庄   → 流沙河
流沙河   → 火焰山
火焰山   → 西天灵山

在"东土大唐到两界山"这一段,当前的交接信息可以理解为:

复制代码
源MAC:东土大唐驿站
目的MAC:两界山驿站

到达两界山以后,原来的 MAC 地址就没有用了。两界山重新决定下一站是高老庄,并更换交接信息:

复制代码
源MAC:两界山驿站
目的MAC:高老庄驿站

到达高老庄后再次更换:

复制代码
源MAC:高老庄驿站
目的MAC:流沙河驿站

所以MAC 地址只负责当前这一段链路的交付,每经过一台路由器,源 MAC 地址和目的 MAC 地址通常都会改变。

总结:目的IP是⼀种长远目标,Mac是下⼀阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据。

网络通信的宏观流程如图

相关推荐
liulilittle1 小时前
XTCP简述
网络·c++·tcp/ip·ip·tcp·通信
SendTomo1 小时前
基于WebRTC的P2P文件传输IP暴露是正常现象
网络·网络协议·tcp/ip·webrtc·p2p
电化学仪器白超2 小时前
梅特勒-托利多自动滴定管产品线全览
网络·python·单片机
TheBestRucy2 小时前
Python 九阳神功之肆:网络编程 · Socket 从入门到实战
开发语言·网络·python
hehelm2 小时前
仿muduo库实现高并发服务器—Channel类
linux·服务器·开发语言·网络·c++
ybdesire2 小时前
注入型漏洞以及agent-audit的检测原理
网络·安全·风险·智能体·ai安全
李白你好2 小时前
今日网络技术热点:【计算机网络 | 数据链路层8:CSMA/CD
网络·计算机网络
hehelm2 小时前
仿muduo库实现高并发服务器—EventLoop
linux·服务器·网络·c++
今儿敲了吗2 小时前
CN——HTTP 工作流程
网络·网络协议·http