【网络编程】网络通信基石:从局域网到跨网段通信原理探秘

半桔个人主页
🔥 个人专栏 : 《网络编程》《手撕面试算法》《C++从入门到入土》

🔖决定我们自身的不是过去的经历,而是我们自己赋予经历的意义。 -阿尔弗雷德·阿德勒-


文章目录

  • 前言
  • [一. TCP/IP 五层模型](#一. TCP/IP 五层模型)
  • [二. 局域网通信原理](#二. 局域网通信原理)
    • [2.1 Mac地址](#2.1 Mac地址)
    • [2.2 数据的封装和解包](#2.2 数据的封装和解包)
    • [2.3 以太网通信](#2.3 以太网通信)
  • [三. 跨网段通信原理](#三. 跨网段通信原理)

前言

在数字经济深度渗透的当下,网络通信早已超越技术范畴,成为支撑社会运转的 "数字血管"------ 小到手机连 WiFi 刷短视频,大到云计算中心跨地域数据同步,甚至智能汽车的车联网交互,背后都暗藏一套精密的通信逻辑。TCP/IP 五层模型 是这套逻辑的 "设计蓝图",局域网通信原理 是 "小区内部的交通规则",跨网段通信原理 则是 "城际间的路由方案",三者串联起从数据诞生到跨域传输的完整链路。

本文将摒弃晦涩的学术表述,以 "原理 + 场景" 的视角逐层剖析TCP/IP的结构,帮助读者理顺局域网通信原理跨网段通信原理底层到底是如何实现的。

本文将分为3个部分:

  1. TCP/IP 五层结构;
  2. 局域网通信原理;
  3. 跨网段通信原理。

一. TCP/IP 五层模型

网络从逻辑上实际分为了7层,被称为OSI 七层模型,每一都有对应的物理设备和设计方法。

OSI 七层模型中,下四层(传输层、网络层、数据链路层、物理层)负责 "数据如何传输" (如 TCP 负责可靠传输,IP 负责寻址);而 高三层(应用、表示、会话层)聚焦 "应用程序如何收发、处理数据。**

高三层的实现一般被整合在一起,功能交叉融合,耦合性较高,在实际实现中边界模糊,因此通常情况下,我们将这三层视为一个整体,而不再是再独立分成,将其统称为应用层。因此TCP/IP一般称为5层模型。

下面对着5层进行简单的介绍:后续在讲解原理时,会详细介绍各层具体干了些什么。

  1. 物理层:负责光电信号的传递;像上图中的光纤,集线器,双绞线等;
  2. 数据链路层:负责设备之间的数据帧的传输和识别,保证局域网内主机正常通信;
  3. 网络层:负责地址管理和路由选择,保证跨网段通信;
  4. 传输层:进行数据传输,保证数据数据传输可靠;
  5. 应用层:负责应用程序间通信。

TCP/IP协议的5层模型,各层之间有什么都是谁来进行实现管理的???

如图所示:操作系统负责实现传输层和网络层;而开发者负责高三层的设计。

我们希望进行网络通信,必定要将一个进程的信息发送到网络中,因此操作系统需要向用户提供一些接口来允许进程向网络中发送数据。

实现不同的设备间进行通信,就需要保障不同的操作系统 通信的底层逻辑:必须统一 "语言规则",用统一的协议标准来实现,否则数据会变成 "鸡同鸭讲"------ 发送方封装的数据,接收方根本无法解析。

网络通信的本质就是:数据从应用层开始一层层的向下交互,最后发送出去,在一层层的向上解包,就是贯穿协议栈的过程。

二. 局域网通信原理

局域网中的设备可以直接进行通信,不需要跨网络。

局域网:"小范围的设备互联圈",通常指覆盖几十米到几公里内的区域。

2.1 Mac地址

Mac地址:网卡上的以恶个48比特位的序列号,用来标记一个局域网中的每一台主机,在局域网中每一台主机的Mac地址是唯一的。

2.2 数据的封装和解包

下面先解释发送都局域网中的数据包含什么:

上面是局域网通信的示意图,下面将一一介绍其中的每个字段:

  • 信息在自顶向下,每一层都会进行封装
  • 增加的信息被称为报头,每层都会增加,待会会详细介绍每个报头的信息;
  • 在每一层中去掉当前层的报头后,剩余的信息被称为有效载荷,包含数据以及上层的报头;一般称报文 = 报头 + 有效载荷;
  • 通过以太网将信息传输给对方主机上后,得到的数据会向上进行解包,将报头与有效载荷进行分离。
  1. 报头1:应用层报头,包含用户客户端的部分数据,由程序员在代码中进行写好,比如:用户使用的客户端版本号,以及发送的信息类型等;
  2. 报头2:传输层报头,携带数据的顺序,数据可能是打包成多份进行发送的,而要保证对方接收到信息后能够知道每个包中数据的先后顺序就需要对包进行编号;
  3. 报头3:网络层报头,携带目的主机IP和发送方即自己的IP;
  4. 报头4:数据链路层报头,携带目的主机的Mac地址和自己的Mac地址。

因此在网络中实现通信的方法就是对:发送的数据进行封装,接收方对拿到的数据进行解包。

2.3 以太网通信

根据上面的图,我们知道了从自己主机中发送出的数据到底包含什么,那么对方对方主机要如何拿到发送到网络中的数据呢???

在局域网中进行通信:以A电脑向B电脑发送消息为例

  1. A电脑的信息被发送到局域网中的所有电脑;
  2. 每台电脑都到数据,将数据拿上来进行解包;
  3. 第一次解包后拿到数据的目的Mac地址,与自己的目的Mac地址进行比对,如果不一样,就将数据丢弃;如果一样就将数据拿上来向上进行解包。

我们发送的数据在局域网上是裸奔的,所有主机都可能收到,则不会有安全问题吗???

网卡负责接收数据,网卡有两种模式:

  1. 正常模式:将不属于自己的信息丢弃;
  2. 混杂模式:将不属于自己的信息也抓取上来;但是一般发送的数据都进行了加密,抓取上来也读不了,因此可以认为你的数据是安全的。

数据碰撞:在局域网中多台电脑同时发送数据,会导致光电碰撞,这就会直接导致发送数据丢失或不全;因此在发送数据时,每个主机都要执行避免碰撞相关算法(延迟发送),从而保证在局域网中只有一台机器在发送数据。

一个局域网中的所有主机被称为碰撞域

如果数据真的发生碰撞导致数据丢失或受损,发送的主机也会进行重发的。

  • 在局域网中还有一种设备来处理数据碰撞问题:交换机,可以对碰撞域进行划分。

  • 如图当A先C发送消息的时候,交换机会发现其在交换机的同侧,就不会将消息发送到交换机的另一侧主机上的,从而对碰撞域进行缩减。

三. 跨网段通信原理

下图就是跨网段传输的原理:核心在于路由器实现将信息跨局域网传输.

上图中的令牌环网是不同于以太网的另一种局域网;

  • 令牌环网是通过对主机进行标识,来保证在任意时刻只有得到特殊表示的主机才能进行发送数据,进而防止数据碰撞的。

IP :标识一个特定主机在全网中的唯一性。
Mac地址:对每个局域网中的主机进行唯一标识。

IP 地址,通过对目的主机进行标识,来指引着数据应该往哪一个局域网中走;而Mac地址记录当前数据要去当前局域网中的哪一个位置/主机。

  • IP 地址是一直不变的,是最终目标;而Mac地址在每个局域网中都是不一样的。

IP协议有两个,IPv4和IPv6:IPv4采用4个字节来保存地址,IPv6采用16字节进行保存。

要进行跨网段通信,就必须先将数据发送从当前子网中发送出去,而发送到哪一个子网中就由路由器来做。

具体流程如下:

  1. 先将数据向下进行封装,最后要发送的数据中包含着目的IP地址,以及发送到局域网中的哪一个Mac地址处,其中该Mac地址就填写的是路由器的地址;
  2. 最终路由器拿到数据,进行解包向上传递,到网络层后,路由器再根据IP地址看发送到哪一个局域网中;
  3. 最后路由器根据目的局域网的链路层协议对有效载荷在进行封装向下传递。

通过IP协议屏蔽了底层的差异化,依靠的就是路由器的解包和重新封装。

在主机中使用ifconfig可以查看网络信息,包含IP地址以及Mac地址等。

相关推荐
叫我詹躲躲8 小时前
Linux 服务器磁盘满了?教你快速找到大文件,安全删掉不踩坑!
linux·前端·curl
sailwon8 小时前
自己搭建远程桌面服务器——私有化部署RustDesk
运维·服务器·云计算·远程工作
skyeeeeee8 小时前
一小时学会PHP
php
叫我詹躲躲8 小时前
3 分钟搞定 Linux 磁盘清理:实用命令 + 自动脚本,新手也会
linux·curl
Garc8 小时前
Zookeeper删除提供者服务中的指定IP节点
linux·运维·服务器
沐浴露z9 小时前
【深入理解计算机网路07】详解局域网:以太网、VLAN与无线局域网
网络·网络协议·计算机网络·408
过往入尘土9 小时前
Linux:虚拟世界的大门
linux·人工智能
Wang's Blog9 小时前
Linux小课堂: Linux 系统的多面性与 CentOS 下载指南
linux·运维·centos
FengyunSky9 小时前
高通Camx内存问题排查
android·linux·后端