【Linux 网络】网络基础(一)(局域网、广域网、网络协议、TCP/IP结构模型、网络传输、封装和分用)-- 详解(上)https://developer.aliyun.com/article/1515742?spm=a2c6h.13148508.setting.20.11104f0e63xoTy
五、网络传输基本流程
1、网络传输流程
局域网中同一个网段内的两台主机是可以直接进行通信(文件传输)的。
跨网段的主机的文件传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器。
前面讲到的层状结构,每一层都会有协议,而每一个协议的最终表现就是报头。
举个生活中的例子,网购时,商家需要将物品送到我们手上,但并不是他们亲自派送,而是交给快递公司,这就体现了分层的思想:
我们收件的时候不会单单只收到物品,还有快递盒和快递单。这个多出来的快递单就叫做报头。
同样,现在我们需要发数据,发送的数据可能比我们想要的要多一点,那么这多出来的一部分就是报头。那这个快递单号又是给谁看的呢?是给快递员看的,这个快递单就是快递公司自己定的协议,这个快递单子在它们的物流体系中都能够被识别。所以,协议通常是通过协议报头来表达的,每一份数据在每一层都要有自己的报头。
客户在应用层发送数据,为了数据的安全、完整和网络之间的路径选择等问题,必须自顶向下经过应用层、传输层、网络层、链路层,再通过局域网发送给对方。每层都有自己的协议定制方案,每层协议都要有自己的协议报头,从上到下交付数据时时,都会添加对应的报头。
一个设备至少要横跨两个网络,才能实现数据包跨网络转发,所以路由器必须要横跨两个网络,也就是必须有两张网卡。
(1)报头
A. 什么是报头
在计算机网络通信中,报头(Header)是一部分数据包的固定结构,它包含了关于该数据包的元信息和控制信息。报头位于数据包的前部,用于标识和管理数据包的传输。
- 报头通常由多个字段组成,每个字段用于存储特定类型的信息。下面是一些常见的报头字段及其功能:
- 目标地址字段:指示接收数据包的目标设备或主机的地址。这个地址可以是物理地址(如:MAC 地址)或逻辑地址(如:IP 地址)。
- 源地址字段:标识发送数据包的源设备或主机的地址。
- 协议字段:指示数据包使用的协议类型,例如 TCP(传输控制协议)或 UDP(用户数据报协议)。
- 长度字段:指明整个数据包的长度,包括报头和数据部分。
- 校验和字段:用于校验数据包在传输过程中是否出现了错误。接收端可以通过计算校验和来验证数据包的完整性。
- 服务质量字段:用于指示数据包的优先级和处理要求,例如差错检测、传输延迟、带宽需求等。
- 标记字段:存储一些额外的控制或标识信息,用于特定的协议或网络处理。
简单来说,协议报头就是收到的报文当中多出来的内容。
B. 报头的作用
报头在通信协议中的作用非常重要,它承载了传输过程中所需的元信息和控制信息。
- 标识和定位:报头中的目标地址字段和源地址字段用于标识和定位数据包的接收方和发送方。通过指定目标地址,数据包可以准确地传递给目标设备或主机。
- 数据处理和路由:报头中的协议字段指明了数据包所使用的传输协议,如 TCP、UDP 等。不同的协议可能需要进行不同的数据处理和路由方式,因此报头能够帮助网络设备正确地处理和路由数据包。
- 错误检测和纠正:校验和字段可以用于验证数据包在传输过程中是否出现了错误。接收端可以通过计算校验和来检测数据包的完整性,并且对于出现错误的情况,一些纠错技术可以根据校验和字段的信息来恢复原始数据。
- 服务质量管理:报头中的服务质量字段可以指示数据包的优先级和处理要求。这有助于网络设备在网络拥塞或负载高的情况下,根据不同的服务质量需求进行优先级处理,保证关键数据的传输效果。
- 特定协议需求:某些协议可能需要特定的控制或标识信息来辅助数据包的处理和传输。报头中的标记字段可以承载这些额外的控制信息,以满足特定协议的需求。
通过解析报头中的字段信息,网络设备和计算机能够理解和处理数据包,识别其源和目标,并根据需要采取适当的操作,比如路由转发、错误检测、数据重组等。报头在网络通信中起着非常重要的作用,确保数据包按照正确的方式传输并被正确处理。
添加报头的原因如下:
- 数据识别和标识:在数据传输中,报头 (Header) 包含关于数据的元信息,比如数据类型、数据长度、传输协议等。通过添加报头,可以对数据进行识别和标识,确保接收方能够正确地解析和处理数据。
- 协议规范:不同的数据传输协议通常会规定报头的格式和内容,以便确保传输的正确性和可靠性。报头中可能包含有关源地址、目标地址、校验位等必要信息,这些信息使得数据能够按照协议规范进行有效的传输。
- 数据完整性校验:在数据传输过程中,为了确保数据的完整性,通常会使用校验和或哈希值等方式对数据进行校验。报头中可以包含校验和或哈希值等信息,接收方在接收到数据后可以根据报头中的校验信息验证数据的完整性,以避免数据损坏或篡改的情况。
- 数据流控制和错误处理:报头中可能还会包含有关数据流控制和错误处理的信息,比如序列号、确认号等。这些信息可以用于在数据传输过程中进行流量控制、处理丢包和重传等情况,从而提高数据传输的可靠性和效率。
(2)局域网通信原理
两台局域网的主机是能够直接通信的。
在讲原理之前先引入一个概念:
每一台主机都有自己的网卡,每一张网卡都有自己的地址,叫做 MAC 地址。就像我们的身份证一样,标识网卡的唯一性。而 MAC 地址虽然全球唯一,但是不应用于全球,只是在局域网中标识自己的唯一。
指令:ifconfig
这里的 MAC 地址是个虚拟地址。
在局域网中有很多主机:
现在 MAC3 想要跟 MAC5 发送消息时,其他所有主机都能收到,但是其他主机在做协议判断发现并不是发给自己的,就会自动丢弃。
(3)以太网和令牌环网
A. 以太网
以太网就是一种具体的局域网。
以太网的通信方式就是上面局域网这种通信的方式:发出的消息所有人都能收到。
但是当 MAC3 想把消息发给 MAC5,MAC2 想把消息发给 MAC7时,它们不能同时发消息,因为数据会覆盖,所以以太网发送消息的原则是只允许一个主机在任何一个时刻在局域网中发消息。否则就会发生碰撞,如果发生了碰撞就把消息作废然后重发。站在系统的角度看待网络资源就是临界资源。
B. 令牌环网
令牌环网的解决方式就是谁持有令牌环谁发送数据。没有令牌的主机就不能发送消息。就类似于系统中的锁。
2、数据包封装和分用
假设现在有两个人在用 QQ 进行聊天,站在他们的角度,他们会认为他们是在用户层直接进行聊天,而实际上却是数据向下交付(封装)在向上解包(分用)才实现的聊天。
- 数据包封装:在向下交付的时候每一层都会添加自己的报头,报文 = 报头 + 有效载荷,再把报文向下交付。
- 数据包分用:在向上解包时,因为同一层有相同的协议,所以能识别报头,它会解开报头,把有效载荷在向上解包。这样就形成了对称的结构。
可以看到同层报头和有效载荷完全一样,左边如何发的,右边就是如何收到的,那么就可以认为是在同层协议中直接通信,也可以理解为向下交付。
它的流程图是这样,在路由器部分传递给令牌环驱动程序的时候,加上的报头就是令牌环协议(重新封装),这样就跟左边不一样了,但是不影响上面的对称性。
可以得出 IP 层的作用就是屏蔽底层网络的差异。
而对于不同网段的两台计算机通讯过程略有不同,不同的地方就在路由器部分:
将自顶向下进行交付的过程称为封装,封装就是添加报头的过程。
解包的本质就是去掉报头,展开分析。
- 不同的协议层对数据包有不同的称谓,在传输层叫做数据段(segment),在网络层叫做数据报(datagram),在链路层叫做数据帧(frame)。
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(报头(header)),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理。
下图为数据封装的过程:
下图为数据分用的过程:
六、网络中的地址管理
MAC 地址通常在局域网使用,IP 地址通常在广域网使用。
1、认识 IP 地址
IP 地址(Internet Protocol Address)是用于在互联网上唯一标识和定位设备的一组数字。由 32 位二进制数或 4 个八位二进制数组成的十进制数表示。
它分为两部分:网络地址和主机地址,网络地址用于标识所连接的网络,而主机地址则用于标识具体的设备。IP 地址用于在网络上进行数据包的传输和路由选择。
当你连接到互联网上时,你的设备会被分配一个 IP 地址,以便在网络中唯一标识和定位你的设备。IP 协议有两个版本,IPv4 和 IPv6。后面凡是提到 IP 协议,没有特殊说明的,默认都是指 IPv4。以下是两个示例 IP 地址的解释:
- IPv4 地址:192.168.0.1 这是一个常见的 IPv4 地址格式。对于 IPv4 来说,IP 地址是一个 4 字节,32 位的整数。它由四个八位二进制数组成,通过 “点分十进制” 的字符串表示。在这个示例中,192.168.0.1 是一个 IP 地址,其中 192.168.0 表示网络地址部分,而 1 则表示主机地址部分。其中,用点分割的每一个数字表示一个字节,范围是:0~255。这个 IP 地址可能用于一个局域网中的路由器或计算机。
- IPv6 地址:2001:0db8:85a3:0000:0000:8a2e:0370:7334 IPv6 地址是下一代 IP 地址标准,是一个 16 字节,128 位的二进制数,并使用冒号分隔。在这个示例中,2001:0db8:85a3:0000:0000:8a2e:0370:7334 是一个 IPv6 地址,它包含了网络地址和主机地址信息。IPv6 地址的主要目的是扩展互联网的地址空间,以支持未来更多的设备连接。
上面这些是示例 IP 地址。实际上,每个设备在网络中都有一个唯一的 IP 地址,以便进行通信和数据传输。在使用 TCP/IP 协议的网络中,IP 及其向上的协议看到的报文都是一样的。
2、认识 MAC 地址(以太网地址)
MAC 帧地址(Media Access Control Address)也称为物理地址或硬件地址,用来识别数据链路层中相连的节点。它是一个用于在局域网中唯一标识网络适配器(如:网卡)的长度为 48 位(即 6 个字节)的二进制数。一般用 16 进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
每个网络适配器都有一个唯一的 MAC 地址(虚拟机中的 mac 地址不是真实的 mac 地址,可能会冲突,也有些网卡支持用户配置 mac 地址),它由厂商在生产时烧录到适配器中,在网卡出厂时就确定了,不能修改。MAC 帧地址用于在局域网中寻找目标设备,它是数据链路层的一部分,用于将数据包从源设备传输到目标设备。在以太网中,MAC 地址是数据包在局域网中传输所必需的信息。
举例说明 MAC 帧地址的结构和作用,假设有两台计算机 A 和 B 进行通信:
计算机 A 的网卡上配置了 MAC 地址为 00:11:22:33:44:55,计算机 B 的网卡上配置了 MAC 地址为 AA:BB:CC:DD:EE:FF。当计算机 A 希望将数据包发送到计算一个以太网帧,并包含以下字段:
- 目标 MAC 地址:设置为计算机 B 的 MAC 地址(AA:BB:CC:DD:EE:FF)。
- 源 MAC 地址:设置为计算机 A 的 MAC 地址(00:11:22:33:44:55)。
- 其他帧头字段(例如帧类型等)和数据。
计算机 A 将该帧发送到网络,经过交换机等设备转发,最终到达计算机 B 的网卡。计算机 B 接收到该帧后,会检查目标 MAC 地址与自己的 MAC 地址是否匹配。如果匹配,则认为该帧是发给自己的,继续解析帧中的其他字段和数据。
通过这个过程,MAC 帧地址起到了两个重要的作用:
- 唯一标识设备:每个网络设备(如网卡)都有一个唯一的 MAC 地址,用于在局域网中识别和寻址设备。这是因为以太网是一个共享介质的网络,通过 MAC 地址可以准确地将数据包传送到目标设备。
- 确保交付:通过将目标MAC地址设置为接收方的 MAC 地址,数据包可以被有针对性地转发到正确的设备,确保数据包的正确交付。
既然这两个都能表示地址,那么为什么要搞两个地址呢?
举个例子帮助理解:在西游记中,唐僧每经过一个国家的时候,会跟当地的人说:贫僧从东土大唐而来,去往西天拜佛取经。当地人就会问他从哪里来的,再告诉他接下来要去哪(这个过程就叫作路由的过程,路由的本质就是根据目的地来选择下一站去哪)。比如说,上一站是车迟国,下一站要去黑风岭。这里的东土大唐和西天就是源 IP 地址,自始至终都不会改变,而黑风岭(下一站地址)是源 MAC 地址,一直在变化。
- IP 地址提供的是方向。
- MAC 地址提供的是可行路径。
注意:这里的 MAC 两个地址一定是挨着的,所以是同一个局域网。