本篇目标:
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 数据报是:
源IP:192.168.2.2 目的IP:172.168.2.2 数据:你好主机 A 判断出172.168.2.2与自己不在同一个局域网,因此不能直接发送给主机 B,只能先交给路由器192.168.2.1。
路由器收到数据后:
去掉原来的链路层报头。 查看目的 IP:172.168.2.2。 查询路由表。 发现目标位于右边的 172.168.2.0 网络。 决定从右侧接口 172.168.2.1 发送。然后重新封装 MAC 地址:
源MAC:路由器右接口MAC 目的MAC:主机B的MACIP 地址通常保持不变:
源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地址是局域网转发的重要依据。
网络通信的宏观流程,如图: