数据在网络中是怎么传输的?

计算机通信场景大致如下所示:

1.同一个子网中两台计算机通信

2.不属于同一个子网,两台计算机进行通信


以下内容,将围绕这两种场景进行阐述,在阐述之前,先举个场景示例,帮助大家理解一些名词

场景一:

秦岭中学开学,高三一班来了一大批新同学,由于老师不认识,于是他按照班级名称找到教室,然后按照花名册进行点名。

现在老师想要认识一下【张三】同学,于是他先吼了一嗓子【张三】,整个高三一班都听到了,于是,不叫【张三】的不作回应,叫【张三】的回复了一声【到】

这下老师知道谁是张三了,下次有事情就可以直接到张三的位置找他了,不用再在整个班级里吼那一嗓子了。

同理,如果老师想找别人,也可以先吼一声,直到对方应答。这种方式就称为**广播。**广播后会记住对方的位置方便日后找人。

场景二:

高三一班的李四想找素未谋面的高三二班王麻子商议日后如何一统高三,该怎么办呢?

于是他通过对比,自己是高三一班,王麻子是高三二班的,发现不是一个班的。

所以他先出门,找到王麻子所在的高三二班。

但他也不认识王麻子是谁,所以他也大吼一声【王麻子】,【王麻子】听到后回复【到】,于是李四就知道了王麻子的位置,日后就可以直接到高三二班找王麻子了。

接下来,我们拿上述的例子,解释下述名词

  • 主机:学生

    在网络技术中是用于发送与接收信息的终端设备。

  • 子网:班级就对应的是互联网中的子网要与计算机通信,必须要先找到计算机所在的子网

    一定范围内的局域网,不同局域网的IP可以重复

  • 网络地址:【高三一班】【高三二班】这些班级编号,就是网络地址。相当于子网的编号,主要是用来判断互相通信的设备是否在同一个子网

    在计算机领域中,网络就是用物理链路将各个孤立的工作站或主机相连在一起,组成数据链路,从而达到资源共享和通信的目的。网络地址则是互联网上的节点在网络中具有的逻辑地址,可对节点进行寻址。IP地址是在互联网上给主机编址的方式,为每个计算机分配一个逻辑地址,这样不但能够对计算机进行识别,还能进行信息共享。

  • 主机地址:【张三】【李四】这些学生姓名就相当于主机地址,确认好班级后,就可以分配学生

    IP地址是TCP/IP网络中用来唯一标识每台主机或设备的地址,IP地址由32位(共四个八位组)的二进制组成。IP地址分为两部分,左边网络编号部分用来标识主机所在的网络;右边部分用来标识主机本身,这部分称为主机地址。连接到同一网络的主机必须拥有相同的网络编号。

  • IP地址:IP地址等于网络地址+主机地址,即【高三一班张三】

    IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽的差异。IP地址是一个32位的二进制数,通常被分割为4个“8位二进制数”(也就是4个字节)。IP地址通常用“点分十进制”表示成(a.b.c.d)的形式,其中,a,b,c,d都是0~255之间的十进制整数。例:点分十进IP地址(100.4.5.6),实际上是32位二进制数(01100100.00000100.00000101.00000110)。

  • 子网掩码:但只知道IP地址是无法反推出网络地址(班级名称)的,所以必须指定哪几位为网络地址。用【高三一班张三】这个ip来举例,前4个字表示网络地址,我们就可以写为高三一班张三/4,用于表示前4位为网络地址。在计算机中我们一般用前24位表示网络地址,例如:192.168.1.1/24。

    子网掩码(subnet mask)又叫网络掩码、地址掩码、子网络遮罩,它用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。子网掩码不能单独存在,它必须结合IP地址一起使用。子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分

  • mac地址:一个班级里有可能有多个重名的人,所以需要身份证(唯一标识)来确定具体的学生,身份证就相当于计算机的mac地址,即网卡地址

    MAC地址(**英语:Media Access Control Address)**网络中每台设备都有一个唯一的网络标识,这个地址叫MAC地址或网卡地址,是一个用来确认网络设备位置的位址。在OSI模型中,工作在第二层数据链路层

  • 网关:如果不在一个班级,就需要出门寻找,这个门就是网关

    网关(Gateway)又称网间连接器、协议转换器。网关在网络层以上实现网络互连,是复杂的网络互连备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。 网关是一种充当转换重任的计算机系统或设备。使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器。与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。

  • 交换机

    交换机(Switch)意为“开关”是一种用于电(光)信号转发的网络设备。它可以为接入交换机的任意两个网络节点提供独享的电信号通路。交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过将MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不能划分网络层广播,即广播域

  • 路由

    路由(routing)是指分组从源到目的地时,决定端到端路径的网络范围的进程,路由工作在OSI参考模型第三层——网络层的数据包转发设备。路由器通过转发数据包来实现网络互连。虽然路由器可以支持多种协议(如TCP/IP、IPX/SPX、AppleTalk等协议),但是在我国绝大多数路由器运行TCP/IP协议。路由器根据收到数据包中的网络层地址以及路由器内部维护的路由表决定输出端口以及下一跳地址,并且重写链路层数据包头实现转发数据包。路由器通过动态维护路由表来反映当前的网络拓扑,并通过网络上其他路由器交换路由和链路信息来维护路由表。

1.同一个子网中两台计算机通信

进入正题之前,我们先思考几个问题

怎么判断两台设备是否属于同一个子网?

只要网络地址相同,就可以认为是在同一个子网

怎么计算网络地址呢?

假如以 IP 为192.168.102.3 ,子网掩码为:255.255.255.0为例

第一步:先将ip和子网掩码都转换成二进制(除2取余,逆序排列),即如下所示

192.168.1.10 =

11000000.10101000.01100110.00000011

255.255.255.0 =

11111111.11111111.11111111.00000000

第二步:进行“”运算

11000000.10101000.01100110.00000011 &

11111111.11111111.11111111.00000000 =

11000000.10101000.01100110.00000000

第三步:将结果转化成十进制,即得出网络地址为:192.168.102.0

在这里插入图片描述

回归正题,此时两台设备(A和D)想要通信。

首先,需要判断A和D的网络地址是否相同

A(192.168.1.10/24)和 D(192.168.1.13/24)的网络地址是一样的(都是192.168.1.0),代表它们是同一个子网

第二步,已知A和D处于同一个子网,A知道D的IP,但是不知道这个IP具体是哪一台设备,所以A在子网里发了一个广播包:IP地址为192.168.1.13的机器是谁的啊?

由于是一个广播消息,所以B,C,D都收到了这个广播包,拿到这个包之后,会将包中的IP与自身的IP做一个对比,B,C发现与自身不同,所以就不响应,但是在自己的机器中默默更新192.168.1.10对应的mac地址为macA(A的mac地址)。

但D发现与自己的IP相同,于是它使用单播的方式,把自己的IP和mac地址发给A,同时在自己的机器中更新192.168.1.10对应的mac地址为macA(A的mac地址)。

A收到后,就在自己的机器中更新192.168.1.13对应的mac地址为macd(D的mac地址)

这个过程也被称为ARP(Address Resolution Protocol),即根据 IP 获取 mac 地址的一个协议

另外在此过程中,如果交换机是中间设备,发现A的数据流经端口1,D的响应数据时从端口4流出,经过此次ARP,所以它就在“交换表”中记录下

端口mac地址
1macA
4macD

由于此时A和D都已经知道了IP所对应的mac地址,所以A再次发给D数据时,此数据包会带上四项内容:源IP(A的IP)和源mac(A的mac),目标IP(D的IP)和目标mac(D的mac)。

交换机收到数据后,看到上面附带的“目标mac”,发现自己的“交换表”里有存储对应的端口信息,就直接把数据包从端口4丢给D。

以此可以看出,交换机是工作在“数据链路层”的,因为它记录了mac地址和端口的关系,不涉及到IP

2.不属于同一个子网,两台计算机进行通信

2.1不属于同一个子网,但是属于同一片私网

回顾一下,上面环节所说,判断两台设备是否属于同一片子网,是通过判断网络地址是否相同,若是相同,则是属于同一子网。反之,则属于不同子网

涉及两个不同子网之间的设备想要通信,必须要先通过网关,然后再进行寻址。(示例:两个班级的同学想要通信,必须要先走出教室门,这个门在网络中被称为网关。一般是由路由器充当,网关地址是子网的第一个主机地址,假设网络地址为 192.168.1.0/24,则默认网关 IP 为 192.168.1.1,子网中的每台主机都会有一个默认网关)

在这里插入图片描述

继续拿A和D来举例:

1.首先计算A和D是否属于同一子网,A所在的子网是192.168.1.1/24,即它的网络地址为 192.168.1.0,子网掩码为 255.255.255.0,将 D的子网掩码与 D 的 IP 地址 192.168.2.13 相与得到 192.168.2.0,说明A 与 D 不在同一个子网

2.于是 A 要把包发到网关,即 192.168.1.1,一开始 A 也不知道网关的 mac 地址,于是 A 首先发了个 ARP 包获取网关的 mac 地址(即mac网关),然后将以下包发给网关

源mac:macA源ip:192.168.1.10
目标mac:mac网关r1目标IP:192.168.2.13

注意:此时发给网关的包,目标mac是网关的mac,但目标IP是D的IP,并不是网关的IP。例如,送一件快递,虽然快递会在各个网点来回流转,但是起始地点和目标地点不会变。

3.路由器收到上面这个包后,会取出它的目标IP,然后查一下路由表。

目的网络IP地址子网掩码下一跳IP地址接口
192.168.2.0255.255.255.0directE1
192.168.1.0255.255.255.0directL0
122.122.2.0255.255.255.128122.122.3.1L1

路由表大致有四项基本数据,【目的网络IP地址】【子网掩码】【下一跳IP地址】【接口】。

处理逻辑如下所示:

①因为目标IP(D的IP:192.168.2.13)的前三位是192,查一下路由表,所以我们将该IP与子网掩码255.255.255.0(路由表中的符合条件的子网掩码)进行“与”计算,得出目的网络IP地址为192.168.2.0

②通过路由表中数据对比,即可确认下一跳是通过E1接口直接前往

4.此时路由器不知道192.168.2.13的mac地址,于是它也用ARP先获取此IP对应的mac地址,得到macD

5.然后将数据包的目标mac地址改为D的mac地址进行发送,此时源mac地址也要修改为路由器接口对应的mac地址。

源mac:mac网关r2源ip:192.168.1.10
目标mac:macD目标IP:192.168.2.13

在转发过程中可以看到:源 IP,目标 IP 不会变,而源 mac和目标 mac 地址会不断变化

6.最终交换机再把上述的包转发给D即完成完成

所以,大家也就明白了路由器为啥属于三层设备,三层是网络层,负责根据 IP 寻址。
路由器的一个端口就是一个广播域,同一台路由器不同端口对应的网段(网络地址)是不同的

总结:整体来看,上述的传输过程就是,A先把包给到子网网关子网网关再通过路由器找到D所在的子网网关D的子网网关再把包给D。

2.2不属于同一个子网,涉及公网间的通信

说完上面的不属于同一个子网,却属于同一片私网,接下来我们唠唠不属于同一个子网,也不属于同一片私网,即涉及公网之间的通信。

在此之前,再给大家先解释几个概念:

私网

私网也称内网,也叫局域网,企业或者家庭用户搭建的网络为私网,比如公司里的很多台计算机就组成了一个子网,它们内部之间是可以互相通信的,而且它们组成的子网地址是私有地址,不同的子网私有地址是可以相同的,但如果你要访问“百度”那就要出这个子网,到公网上去找,公网才是我们所说的广义上的的互联网。

NAT协议

私网中的主机如果想要访问公网,必须将私网中的 IP 转为公网上的 IP,我们把这个过程称为 NAT(Network Address Translation,网络地址转换

此时肯定就有人问了,为什么要将私网IP转为公网IP?

我们来举个例子,在陕西秦岭中学一班,有张三、李四、隔壁老王几位同学。

但此时隔壁老王要给日本的尾田荣一郎发信息催更,尾田收到信息后,看到发送人是隔壁老王,一脸懵逼,世界上隔壁老王太多了,他不晓得该回给哪个隔壁老王。

所以,为了杜绝这种情况,隔壁老王发信息后,学校就自动把隔壁老王转换成”陕西秦岭中学“,同时把这个信息转换先记录下来。

然后把信息再转给尾田,尾田一看,陕西秦岭中学世界上就一个,他就可以回信息给学校了。

收到回复的信息后,学校再把这个信息转给隔壁老王。

这个例子中,隔壁老王就是私网IP,学校就是NAT网关,陕西秦岭中学就是公网IP(具备唯一性),尾田荣一郎就是外网IP。由此可见NAT的重要性。

特别注意:学校只负责地址转换,并不负责寻址等操作。

NAT网络地址转换主要分两种:SNAT和DNAT

snat是源地址转换(把隔壁老王变成秦岭中学),dnat是目标地址转换(把秦岭中学变为隔壁老王)。都是地址转换的功能,将私有地址转换为公网地址。

基础流程了解后,我们再稍微深入一些。

刚才我们说,隔壁老王发信息在学校是由记录的,后续尾田回信后,学校也是根据这个记录,给到了隔壁老王。

学校这块的记录,到底记了啥?

上面也说了,学校只负责地址转换,但是单纯的把名字和学校名称做一个映射关系,这样肯定是不够的。

例如张三也给尾田发消息了、隔壁老王给女朋友也发信息了、隔壁老王预约洗脚城……

上述的事项,如果在学校的记录为:

隔壁老王-----陕西秦岭中学

张三-----陕西秦岭中学

隔壁老王-----陕西秦岭中学

隔壁老王-----陕西秦岭中学

此时,尾田回消息到学校,学校一查表,直接懵逼。所以我们就会发现只有名称映射是无法满足要求的。

在网络世界,进程是通过IP地址+端口号来表示的,

于是,学校将记录调整为:

隔壁老王:10000-----陕西秦岭中学:20001

张三:10000-----陕西秦岭中学:20002

隔壁老王:10001-----陕西秦岭中学:20003

隔壁老王:10002-----陕西秦岭中学:20004

这样的话,尾田回消息的对象是“陕西秦岭中学:20001”,通过这个进程,就知道回信要给隔壁老王。

在这里插入图片描述

回归整体,我们拿上面的例子来看下实际场景的数据访问(隔壁老王是A、秦岭中学是nat、尾田就是D)

我们分别在1、2和3、4环节,看看IP变化。

SNAT:源地址转换

节点1:192.168.2.10:1234——>6.6.6.6:80

节点2:4.4.4.4:345——>6.6.6.6:80

DNAT:目标地址转换

节点3:6.6.6.6:80——>4.4.4.4:345

节点4:6.6.6.6:80——>192.168.2.10:1234

通俗的说,snat是作为客户端向外访问外网服务器,dnat是作为服务器端为外网提供访问服务;也可以理解为snat是修改网络包源ip地址的。而dnat是修改网络包目的ip地址的。

3.总结:

同一子网,使用ARP协议(IP获取mac)寻址,在数据链路层进行通信

同一公网,不同子网,通过网关进入网络层,找到另一个子网的网关,然后再下沉至数据链路层进行通信

不同公网,私网地址先通过nat转换成公网地址,然后再通过公网地址,访问另一公网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/239758.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器学习---Boosting

1. Boosting算法 Boosting思想源于三个臭皮匠,胜过诸葛亮。找到许多粗略的经验法则比找到一个单一的、高度预 测的规则要容易得多,也更有效。 预测明天是晴是雨?传统观念:依赖于专家系统(A perfect Expert) 以“人无…

Reinfocement Learning 学习笔记PartⅠ

文章目录 Reinfocement Learning一、基本概念二、贝尔曼公式(bellman equation)2.1 为什么return重要2.2 state value function的定义2.3 贝尔曼公式推导2.4 如何求解贝尔曼公式2.5 Action value的定义 三、贝尔曼最优公式(bellman optimalit…

HarmonyOS—实现UserDataAbility

UserDataAbility接收其他应用发送的请求,提供外部程序访问的入口,从而实现应用间的数据访问。Data提供了文件存储和数据库存储两组接口供用户使用。 文件存储 开发者需要在Data中重写FileDescriptoropenFile(Uriuri,Stringmode)方法来操作文件&#xf…

在做题中学习(32):只出现一次的数字 III

260. 只出现一次的数字 III - 力扣(LeetCode) 根据题目可知:有两个元素只出现一次,其余出现两次。 而在只出现一次的数字 I 里,只有一个元素出现一次,可以用异或的方式直接得到最后的答案,而此…

PaddleOCR:超越人眼识别率的AI文字识别神器

在当今人工智能技术已经渗透到各个领域。其中,OCR(Optical Character Recognition)技术将图像中的文字转化为可编辑的文本,为众多行业带来了极大的便利。PaddleOCR是一款由百度研发的OCR开源工具,具有极高的准确率和易…

Linux嵌入式配置USB鼠标支持+触摸板

在linux嵌入式中加入鼠标支持,首先在内核里面将mice驱动加入编译,这里用到的是usb所以还要有usb的支持,下载到板子上启动 1、定位鼠标 要用鼠标,首先要知道生成的鼠标设备是哪个,直接直接ls input目录,当…

2023.12.6-12.11 黑马知行教育项目实战,访问咨询意向线索主题

目录 简单介绍: 一.项目背景介绍 二.项目架构介绍 三.项目内容 3.1访问和咨询分析主题: 3.1.1 表与表之间的关联 3.1.2访问咨询主题需求汇总:最终需在ADS层制作六张表 3.1.3 访问咨询DWS大宽表建表与导入数据 3.2意向线索主题需求分析 3.2.1意向线索主题需求汇总:最终需在…

【数据结构(六)】希尔排序、快速排序、归并排序、基数排序的代码实现(3)

文章目录 1. 希尔排序1.1. 简单插入排序存在的问题1.2. 相关概念1.3. 应用实例1.3.1. 交换法1.3.1.1. 逐步推导实现方式1.3.1.2. 通用实现方式1.3.1.3. 计算时间复杂度 1.3.2. 移动法 2. 快速排序2.1. 相关概念2.2. 实例应用2.2.1. 思路分析2.2.2. 代码实现 2.3. 计算快速排序的…

华清远见作业第二十五天

使用三个程序来完成输出ABCABCABCABCABC #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include <sys/sem.h>#define NUM_SEMS 3 // 信号量集中的信号量数量union semun {int val;struct semid_ds *…

隔离电源与非隔离式电源

开关电源 文章目录 开关电源前言一、它们之间的区别是什么&#xff1f;二、如何区分它们呢&#xff1f;三、隔离电源与非隔离电源的优缺点四、隔离电源与非隔离电源的选择总结 前言 在产品设计时&#xff0c;倘若没有考虑应用环境对电源隔离的要求&#xff0c;产品到了应用时就…

Linux服务器安装vim命令

1、查看是否安装vim命令 vim /etc/hosts2、检查系统中是否存在安装包 rpm -qa|grep vim2、 安装vim yum -y install vim*4、测试是否安装成功 vim /etc/hosts

深度学习——第3章 Python程序设计语言(3.7 matplotlib库)

3.7 matplotlib库 目录 1 matplotlib库简介 2 pyplot的plot函数 3 matplotlib基础绘图函数示例 数据可视化有助于深度理解数据。 本节介绍绘制图形的基本方法。 1. matplotlib库简介 matplotlib官网 1.1 matplotlib库概述 matplotlib是Python优秀的数据可视化第三方库&a…

Python 神奇解码器:pyWhat 库全面指南

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 在当今数字化的世界中&#xff0c;理解和处理文本数据是许多应用程序的关键任务。而PyWhat库作为一个用于处理文本的Python库&#xff0c;提供了强大的功能&#xff0c;帮助开发者在文本中识别和提取有意义的信息…

【Qt开发流程】之2D绘图1:概述及基本绘制与填充和渐变填充

概述 Qt的绘图系统可以使用相同的API在屏幕和打印设备上进行绘图&#xff0c;并且主要基于QPainter, QPaintDevice和QPaintEngine类。 QPainter用于执行绘图操作&#xff0c;QPaintDevice是一个二维空间的抽象&#xff0c;可以使用QPainter在其上绘制&#xff0c;QPaintEngine…

Mybatis核心配置文件加载流程详解

Mybatis核心配置文件加载流程详解 本文将介绍MyBatis在配置文件加载的过程中&#xff0c;如何加载核心配置文件、如何解析映射文件中的SQL语句以及每条SQL语句如何与映射接口的方法进行关联。 映射配置文件 在介绍核心配置文件加载流程前&#xff0c;先给出一个简单的MyBati…

从概念到现实,2024中国式元宇宙如何落地?

前几个月&#xff0c;马斯克和扎克伯格隔空约架愈演愈烈&#xff0c;网友拱火也其乐无穷。两位顶级富豪贴身肉搏&#xff1f; 想想就刺激&#xff01; 随之&#xff0c;老马的X&#xff08;原Twitter&#xff09;和小扎的Threads&#xff08;X竞品&#xff09;也获得了颇多关注…

为什么看书或者看文章有时候晕?

我今天发现&#xff0c;当我看了一篇深度学习相关的文章&#xff08;我是0基础机器学习&#xff09; 当我尝试理解的时候&#xff0c;头就开始晕了&#xff08;也有些人是犯困&#xff09;&#xff0c;并不是你的错&#xff0c;而是因为看不懂。 仔细观察就发现&#xff0c;看…

Python从入门到精通九:Python异常、模块与包

了解异常 什么是异常 当检测到一个错误时&#xff0c;Python解释器就无法继续执行了&#xff0c;反而出现了一些错误的提示&#xff0c;这就是所谓的“异常”, 也就是我们常说的BUG bug单词的诞生 早期计算机采用大量继电器工作&#xff0c;马克二型计算机就是这样的。 19…

Java实现插入排序及其动图演示

插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的元素插入到已经排序好的序列中的适当位置&#xff0c;从而得到一个新的、元素个数加一的有序序列。 具体的插入排序算法过程如下&#xff1a; 从第一个元素开始&#xff0c;认为第一个元素已经是有序序列。取…

Jmeter场景设置与监听

Jmeter场景设置 场景的概念: 场景是用来尽量真实模拟用户操作的工作单元&#xff0c;场景设计源自于用户真实操作。 场景设计: 场景设计是根据收集分析用户的实际操作而定义的Jmeter脚本的执行策略。 性能测试中涉及的基本场景有两种&#xff0c;即单一业务场景和混合业务场景…