【Linux】网络基础一
网络基础一
- 1.计算机网络背景
- 1.1 网络发展
- 1.2 认识 “协议”
- 2.网络协议初识
- 2.1 协议分层
- 2.2 OSI七层模型
- 2.3 TCP/IP五层(或四层)模型
- 3. 网络传输基本流程
- 3.1 网络传输流程图
- 4.数据包封装和分用
- 5.网络中的地址管理
从今天开始我们将要从系统横跨到网络的学习了,因此有些书我们就可以读起来了。
操作系统
原理:
《操作系统精髓与设计原理》、《现代操作系统》
Linux原理方面的书:
《Linux内核设计与实现》–陈莉君、《深入理解Linux内核》(选读–不作为重点)
Linux编程方面的书:
《Linux高性能服务器编程》、《Unix环境高级编程》
体系结构:
《深入理解计算机系统》
对于系统学过前面的知识建议读书顺序:先编程,后原理
1.计算机网络背景
1.1 网络发展
下面的网络的发展有一个逻辑链条,计算机本质是为了给人提供计算任务,而人之间是要相互协作的,注定计算机之间也必须相互协作。计算机一定是通过相通数据来相互协作的。所以网络的发展有它的必然性。
独立模式:计算机之间相互独立
网络互联: 多台计算机连接在一起, 完成数据共享
比如说清华大学实验室和贝尔实验室是两个不同的局域网,它们各自内部可以互相通信,并且它们之间还想互相通信。
而且学习网络一定不能忘记一个角色:运营商, 建基站,拉网线等等都是他们做的。
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起
路由器左边是一个局域网,右边也是一个局域网,用路由器连接已经属于跨网络了。
广域网WAN: 将远隔千里的计算机都连在一起
所谓 “局域网” 和 “广域网” 只是一个相对的概念。 比如,我们有 “天朝特色” 的广域网,也可以看做一个比较大的局域网。
假设有一台主机里面有很多设备CPU、显卡等等,我们知道这些都是用一条总线连接起来的。所以,一台计算机内部本质也是一个小型网络结构。并且计算机内部也有协议,驱动程序访问硬件就是通过协议来访问的。所以每一个硬件都是自己的协议。
现在假设把主机里的硬件拿出去,主机在浙江,硬盘在贵州,两个通过网线连接起来,以前我们写数据写到本地,现在无非就是通过网络写到远端。这里就相当于一台大型计算机。
总之:计算机体系结构中网络,网络中有体系结构。
1.2 认识 “协议”
可能我们所知道的 “协议” 是一种约定。那为什么要有协议呢?这个约定是什么呢?
假设两个人近距离沟通时,沟通不会有太大的障碍,毕竟离的近说话都能听到,有什么事情可以当面解决。
但是当两个人一个在桥头一个在桥尾距离500m,有可能这句话整体没听到,部分没听到。因为距离较远连对方的脸都看不到因此确定不了对方有没有收到。
因为通信距离变长了,可能会引入新的通信问题。所以我们要尽可能地减少通信成本:因此需要定制协议!
尽可能地减少通信成本:定制协议
所有网络的问题:本质都是传输距离变长了!
上面说了这么多只回答了为什么要有协议,下面我们谈谈什么是协议。
假如张三考上大学了但是家里比较一般,因此打电话的时候能省就省。当时打电话不通不要钱,通了没接不要钱,因此他走的时候和他父亲这样说,我在外面会给家里打电话,我们做个约定电话来了不要着急接,电话响一声就挂代表我到学校了,电话响两声就挂代表你该给我生活费了,电话响三声及以上代表我有事要和你说需要你接电话。当张三上学走了它和家人的距离就拉远了。然后在外地上学就通过这样打电话的方式和家里人互相交流。
这个故事我们抓住重点,电话响一声、两声、三声都代表不同的含义。而这个含义不用解释,双方早就已经有了共识了。-------->这就是我们的约定,而这种约定就是协议。而这种协议的约定是为了减少通信成本!
如果刚才的故事用计算机语言来表达, 这个就是计算机协议!
计算机之间的传输媒介是光信号和电信号. 通过 “频率” 和 “强弱” 来表示 0 和 1 这样的信息. 要想传递各种不同的信息, 就需要约定好双方的数据格式。
只要通信的两台主机, 约定好协议就可以了么?
比如一个土匪寨今天夜里的口号是天王盖地虎,对应的口号是宝塔镇河妖!下面的人都觉得这个约定很好。并且也知道这回事了。但是这个寨子不是同一个地方的人,有北京的、上海的、浙江的、河南的。他们的口音不一样。所以当守夜的人说天王盖地虎的时候,另一个人虽然知道回答宝塔镇河妖,但是用的是方言。因此守夜的人根本听不懂,认为你说错了。
所以说协议虽然约定好了,但是执行上不太一样,那可能也不太行!
- 计算机生产厂商有很多;
- 计算机操作系统, 也有很多;
- 计算机网络硬件设备, 还是有很多;
- 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议;
就好比上面的故事,寨主都让用普通话来进行口号的提问与回答。
2.网络协议初识
协议一定要有配套的数据结构,还有对应的算法来支持。所以协议我们依旧可以认为是软件。后面我们也能看见协议是按照层状结构来划分的。既软件是按照层状结构划分的。
2.1 协议分层
下面以打电话的例子来说明协议为什么要分层
当你在和你朋友打电话的时候,你认为你在和你的朋友在直接沟通吗?
理论上是这样,但实际上你和对方并不是直接沟通的,而是把你说的内容给电话,电话通过相关的协议交给另一部电话,另一部电话把你说的话解码语音播报让对方听到。这就是一种分层。一个语言层,一个通信设备层必须搭配使用,不然相隔百里之外就不能进行交流。
软件在层状结构中,一旦分层的好处:
可以对任意一层左任意的修改并不影响其他层,从而达到一定解耦的过程。
就如下面的图片所示。
上面是分层的好处,但这是一种普世性的说法。那为什么网络要成OSI七层,TCP/IP五层呢?为什么要这样分呢?
理解分层:
- 软件设计方面的优势 –低藕合
- 一般我们的分层依旧:功能比较集中,耦合度比较高的模块 一层 –高内聚
上面是我们从软件工程方面所理解的。下面是具体分层依据的理解。
- 每一层都要解决特定的问题!
那都要解决什么问题呢?
当网络通信的时候,并不能直接把主机A的数据传给主机B,中间需要经历各种设备一跳一跳的走。
就比如张三想从北京到新疆,只能选择自行车作为交通工具。他先需要先从北京到张家口,在从张家口到集宁等等,最后到新疆。
换句话说首先要解决的问题
- 如何把数据交付故给和自己相连的下一台主机
那从北京到新疆,现在已经从北京骑车到张家口并且路上了,那如何保证路径的方向就是正确的呢?
所以需要提前规划好路线,然后走到那问到那。
- 要有路径选择的能力
万一路上没钱了怎么办,不认识路了怎么办,大不了回来。对于网络来说也必须要解决这个问题大不了重传。
- 容错纠错能力
现在根据123能把自己送到新疆,但去新疆是你的目的吗?
去新疆不是我的目的,玩才是我的目的。去新疆是我的手段。
- 解决应用方面的问题
这就是为什么网络要化成接下面看到的若干层的原因。其中这里每一层都有自己匹配的协议,每一层协议都解决自己的问题。
2.2 OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
- 但是, 它既复杂又不实用; 所以我们按照TCP/IP四层模型来讲解.
物理层主要解决硬件电路方面的问题
数据链路层对应解决第1个问题,这里说的互联设备是和自己直接相连的下一台主机
网络层对应解决第2个问题
传输层对应解决第3个问题
会话层、表示层、应用层解决对应第4个问题
2.3 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇.
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求
- 物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层
数据在经过长距离传输的时候是会衰减的,为了支持能够更远距离传播就有了集线器这个物理设备。(信号衰减然后集线器放大信号)
调制解调器(猫)也工作在物理层。(把模拟信号->数字信号,数字信号->模拟信号),家里安装的wifi,先是光纤接入猫,然后猫拉一个先连接路由器,路由器帮我们构建一个局域网然后我们就可以连接wifi了,我们发送的消息先传给路由器,路由器在经过物理设备猫,帮我们做数模转换把数据打到网络里然后数据才能发出去。(路由器真正识别才是真正的01这种二进制对东西)。
双绞线 == 网线
还有一种设备网卡也是在物理层。网卡对各种数字信号做01的转化。可以理解网卡里也有各种寄存器,这些数字信号就是对网卡特定的寄存器特定的比特位充电,有就充没有就不充,最后就可以在网卡寄存器中存储上对应的01序列,然后这个这个网卡的01序列就可以被操作系统读走,然后数据就到内存里,就按照对应协议的格式慢慢解读了。
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
- 网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等. 我们的网络编程主要就是针对应用层.
物理层是硬件,从数据链路层开始就是软件了。
下面是OSI和TCP/IP模型
TCP/IP模型将应用层、表示层、会话层合成一层。
未来我们所写的网络代码就是在应用层。
物理层也叫硬件层。
数据链路层是对应设备驱动程序内部实现的叫做网卡驱动层。
传输层和网络层是由操作系统内部实现的。这里的操作系统指的是所有OS完全一样,保证全球主机互通互联。
到这里是不是和以前学得到计算机层状体系结构相似。硬件,驱动,操作系统,系统调用接口,应用层。实际上上面的图和这里是吻合的。
上图应用程序与操作系统之间也存在系统调用接口。所以应用层这些协议最终调的是系统调用,使用的是由操作系统提供的功能来达到通信的目的。
物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.
一般而言
- 对于一台主机, 它的操作系统内核实现了从传输层到网络层的内容;
- 对于一台路由器, 它实现了从网络层到物理层;
- 对于一台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
默认一台设备工作在那一层默认这一层下面的所有功能它都有。
但是并不绝对. 很多交换机也实现了网络层的转发; 很多路由器也实现了部分传输层的内容(比如端口转发);
3. 网络传输基本流程
在具体说之前,我们需要先谈谈背景知识
协议报头
- 协议每一层都有,而每一个协议最终表现就是协议都要有报头
下面举个例子帮助理解
比如我在淘宝上花了50块钱买个水杯,最后卖家他就想办法要把水杯交给我。并不是卖家骑着自行车来到我加楼下把水杯给我,真正发货的并不是卖家。在卖家楼下有一家顺丰快递点,而我家楼下也有一个顺丰快递点。所以那么卖家实际上是他把自己的水杯交给了顺丰,顺丰它通过自己内部自己的路由体系,坐火车、坐飞机、然后骑三轮车,反正把东西送到快递点,快递点或者快递员他直接把东西放进来,然后最后给我打电话让我进去取,或者给我送到楼下都有可能。
场景是这么个场景。那么实际上当我收到水杯的时候,我是不是只收到了水杯?
并不是,还有一个快递盒子,最重要的就是有一个快递单。
我要的实际上只有水杯,但你给我发过来的可不仅仅只有水杯,你会给我发过来一个水杯,水杯的盒子上贴了一个快递单。这里说明我要的东西,那么对方给我的实际上会比我要的东西多一点点!那么其中多的快递单我们称之为报头。
同理我今天要的数据,我要的就是那么一点数据,但是实际上它发的要比我要的多一点,多出来的东西是报头。
那这个快递单有什么意义呢?
我们不需要快递单,快递单是给快递员看的,快递单上会贴了联系人是谁、送货地点是啥?那么电话号码是什么、并且所有的快递单格式是一样的。其中快递单上面的固定格式我们就叫做顺丰自己定的协议!在他们物流体系当中,在他们公司里面的人全部都认识,所以在全国的任何一个快递点的快递单子大家都认识,这叫做共识,这叫做约定,这叫做协议!
这里的意思就是:
- 协议通常是通过协议报头来进行表达的
实际上在网络上进行交付的时候这个添加的报头我们看不到,只看到发送的数据。
- 每一份数据最终在被发送或者在不同的协议层中,都要有自己的报头
假设我这个快递现在是个洗面奶,拿到之后是我的目的吗?
不是。用它才是目的。
那现在洗面奶有没有自己的协议,标准呢?
有的,就是那个使用说明书,那个说明书就是应用层协议。
局域网
- 两台局域网的主机能够直接通信
- 每一台机器都有自己的 “名字”,指的是每一台主机都有网卡,而每一张网卡都有自己的地址,MAC地址
在全球范围内,每一张网卡都有自己类似序列化的的东西。48位二进制数据可以按16进制解释,最终它就是一串字符,用来表示网卡的唯一性。所以每个网卡都有自己的MAC地址,这个MAC地址是写在网卡里的是固定好的。MAC全球唯一,但是它并不应用于全球,而是运用于局域网中表明一台主机的唯一性。
ether就是以太的意思,后面就是MAC地址
下面说一说局域网的通信。
一个局域网有很多机器,这些机器通过网线连接起来。
假设在一间教室,老师叫张三站起来问它昨天作业为什么没做,那么此时这间教室的其他同学也都听到这句话,但是就张三站起来了。说他的作业交的比较晚你可能没看到。这里所有人都听到了这句话,但就张三站起来了。那老师是不是就认为他只在和张三通话,张三是不是只认为他只在和老师通话。其他人听到这句话认为叫的是张三和我又没关系,因此直接把这个消息过滤掉相当于把数据丢弃。只有张三会站起来。这就是局域网通信原理。同样的,当主机1向主机7发消息,这条消息所有主机全都收到了,只不过除主机7外的所有主机在判断的时候知道这是交付给主机7的,所有主机全都丢弃,最终只有主机7收到这条消息。反之主机7给主机1发都是一样的。
下面看看具体通信过程。
3.1 网络传输流程图
同一个局域网的两台主机进行数据传输。
左右代表不同的主机
这里省略了物理层
左边主机的用户A发送 ”你好“ 这条信息 ,右边主机的用户接收 ”你好“ 这条消息
首先这条消息会先给应用层,应用层并不是直接把消息给主机B的应用层的。应用层要添加应用层的报头。这个应用层报头什么样子一定是结合应用层协议来做的。接下来应用层就把这个报文交给下一层传输层
传输层收到这个报文之后,会把它当成一个整体添加上自己的报头,然后继续向下交付给网络层,(这里并不是拷贝,只是把做图痕迹留了下来)
网络层收到这个报文之后,会把它当成一个整体添加上自己的报头,然后继续向下交付数据链路层
数据链路层收到这个报文之后,会把它当成一个整体添加上自己的报头,然后发送到网络,这个局域网中所有主机都会收到这个消息,所有主机都会进行甄别这个消息是不是给我的,不是就丢弃,最终就只有对应主机收到这个消息。而且是该主机最底层先拿到的。
当我们从上往下做封装的时候,一定是最底层的协议在最外面做报头,那么当对方拿到的时候一定拿的加上最低层协议做报头的数据。这个数据叫做报文。
报文=报头+有效载荷
接下来对方数据链路层会将报文和有效载荷分开,然后将有效载荷作为整体交付给上一层
因为是同层协议,所有对方认识这个报头,这一层也认识这个报头,因此在将报头和有效载荷分开,然后将有效载荷交给上一层,一直到应用层,然后也将报头和有效载荷分开,然后将有效载荷交给上一层,最后把信息交给用户B。
我们发现这个过程,发送消息自顶向下添加报头,接收消息自底向上去掉报头。
我们将从上到下这个过程叫做:封装的过程。从下到上:解包 的过程。
当你在和对方发送消息的时候你认不认你在和对方直接通信呢?
肯定是的。
但是站在程序员视角认为发信息是先交给底层,而对方底层先收到然后向上传给用户。
但我们依旧认为和对方在直接通信,因为我们发现同层中它的报头和有效载荷是完全一样的,我怎么发的对方同层就怎么收的。
因此:在网络协议中,我们可以认为同层协议在直接通信,也可以理解成为向下交付,这是两种不同的认知。
下面还有问题,当接收方收到这个报文的时候,报文=报头+有效载荷。
- 如何判断哪里是报头,哪里是有效载荷?
- 如何判断自己的有效载荷要交给上层的哪一个协议呢?
实际上这两个问题是在网络通信中每层协议都必须面对的问题,也都需要解决的!
虽然现在一个协议都没有学,但是这里想说的是每一层协议的报头中,一定要涵盖上面的信息。 这也是所有协议的共性!
我们把报头和有效载荷分离的过程叫做解包的过程,把有效载荷定向交付给指定协议的过程叫做分用的过程。
整个报文在局域网通信的过程,要经过封装的过程、解包分用的过程
局域网可以分为:
1.以太网
2.令牌环网
3.无线LAN
以太网我们刚才就已经说过了,发送消息所有主机都可以收到。
现在主机1想把消息给主机7,主机3想把消息给主机5,它们可以同时往局域网中发消息吗?
不可以,因为我们的网线只有一个。
在局域网中,只允许一个主机在任何一个时刻在局域网中发送消息,否则发生碰撞。所有我们把这个局域网也称为碰撞域。
这种局域网的网络资源按照以往的知识如何看待呢?
站在系统的角度,它是一种临界资源、共享资源。
而令牌环网,就可以相当于互斥锁,谁拿到谁发送消息。这是令牌环网的原理。
无线LAN是以太网的一个变种这里不在细说。
跨网络的主机数据传输. 数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器
要进行数据报转换,首先一个设备至少要横跨两个网络,才能实现数据报跨网络转发,所以路由器必须要横跨至少两个网络,因此路由器必须有两个网络接口,对应有两个网络接口(两张网卡)。
在左边网络看来这个路由器是属于左边网络主机的的,在右边网络看来这个路由器是属于右边网络主机的。所以这个路由器既是左侧网络主机又是右侧网络主机。虽然两台主机没有办法直接传输,但是可以先把数据转给路由器,再由路由器传输给对方主机。
还是左边用户A发送 “你好” 右边用户B接收
自顶向下交付每一层都要添加报头。在经过网络层根据IP地址要进行路径选择进行跨网络传输(先不管这里细节)。然后在交付给数据链路层封装自己的报头之后,然后根据IP要把数据交给路由器,因此这个数据经过以太网交给路由器。
能不能直接交给路由器呢?
能,因为这个路由器和主机是属于同一个局域网。
但是不能直接交付,路由器工作在网络层,自底向上需要将报头和有效载荷分离,然后将有效载荷向上交付。
交给ip层,发现这个数据报是要给用户B的主机。但是不能直接交付,需要向下交付。向下交付需要重新添加报头。只不过以前用的是以太网的协议添加的是以太网的报头,现在它的底层早已经变了,变成了令牌环网,因此添加的是令牌环驱动程序的报头,然后再令牌环网上跑,然后被对方的令牌环驱动程序收到
收到之后向上交付,每层都需要做报头和有效载荷分离,将有效载荷交给上层,最后用户B收到用户A发送的消息。
在这个过程,我们可以看到以IP层作为分割,IP层上面的同层协议都是一样的,无论是在自己还是对方的主机看到的报文都是一样的,只有在IP层下面看到的协议是不一样的。
但是底层协议,因为要往路由器传输的,一次向上交付解包分用的过程,一次向下交付封装的过程。屏蔽底层网络的差异。
IP协议存在的第一个意义:屏蔽底层网络的差异。
在同一个局域网几个设备发送消息不需要经过路由器。一台机器在发送消息的时候就已经知道要发送的是给同一个局域网的另一台主机,还是另一个局域网的主机。如果是另一个局域网就要经过路由器。如果是同一个局域网就无脑发送了。
4.数据包封装和分用
- 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation).
- 首部信息中包含了一些类似于首部有多长, 载荷(payload)有多长, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部, 根据首部中的 “上层协议字段” 将数据交给对应的上层协议处理.
下图为数据分用的过程
5.网络中的地址管理
在网络中同通常用的有两种地址,一种是IP地址,一种是MAC地址。
MAC地址是全球唯一的序列值,但不应用于全球,而用来表明在局域网中的一台主机的唯一性。
关于局域网目前怎么理解呢?
两台主机可以直接通信,不用跨路由器转发就是局域网。
ifconfig --查看当前云服务器的MAC地址,IP地址
eth0是云服务器提供的入网接口
IP地址
IP协议有两个版本, IPv4和IPv6
- 对于IPv4来说, IP地址是一个4字节, 32位的整数,相当于一个unsigned int类型;
- 我们通常也使用 “点分十进制” 的字符串表示IP地址, 例如 192.168.0.1 ; 用点分割的每一个数字表示一个字节, 每个数字取值范围范围是 0 - 255;
IPv6,IP地址是一个16个字符,128位比特位的整数。
MAC地址
- 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
- 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
MAC地址通常在局域网中使用,IP地址在广域网和局域网都使用,不过我们不谈IP在局域网的使用。
MAC地址和IP地址都能表示主机的唯一性。那这两套地址有什么用?为什么需要这两套地址?
下面以一个小故事来说明:我们都听过西游记的故事,唐僧师徒走到女儿国的时候,国王问高僧:”你从哪里来,要到哪里去“,唐僧说:”我从东土大唐而来,向西天拜见佛祖求取真经而去“。唐僧接下来问国王:”我现在在女儿国,下一站应该去哪里。“ 国王说:”下一站应该去黑风岭“。当唐僧师徒去往黑风岭被拦住了,被问:”和尚你从哪里来,要到哪里去。唐僧说:”我从东土大唐而来,向西天拜见佛祖求取真经而去“。黑风岭领主说那你那你上一站从哪里来的啊怎么来我这里了。唐僧说:”上一站从女儿国哪里来的,国王让我到黑风岭这里来。
那么从这个故事,唐僧口中的地址一共有几套呢?
两套。
1.【从哪里来,到哪里去】
2.【上一站从哪里来,下一站到哪里去】
黑风岭领主让唐僧一行人去往西部火焰山,唐僧一行人到了火焰山被牛魔王拦住了,牛魔王问:“你从哪里来,要到哪里去”。唐僧说:”我从东土大唐而来,向西天拜见佛祖求取真经而去“。牛魔王问:“你上一站从哪里来,当前你到了哪里呢?”唐僧说:“上一站从黑风岭来,黑风岭领主让我到火焰山。”
为什么唐僧要去女儿国,黑风岭,火焰山呢?
根本原因在于它的终极目标要去西天。 因为要到达终极目标,所以要按照路径一个一个走最终到目标点。
我们称这个终极目标 --> 目的IP, 从哪里来 --> 源IP
【源IP,目的IP】 :为我们未来每一个阶段,提供方向目标,方便进行路径选择。
【上一站从哪里来,下一站到哪里去】:该类地址,一直在变化。像这种相邻的两个地址,从一个结点跳转到和它相连的下一个结点,我们称为MAC地址【源MAC,目的MAC】。
IP地址提供方向,MAC地址提供可行性。
IP与MAC就相当于终极目标和阶段性目标的关系。
最后我们在画一张图解释网络通信的原理
主机与路由器,路由器与路由器,路由器与主机直接相连的属于同一个局域网。
同属于一个局域网,所以可以把数据从一个局域网传到另一个局域网,因此最终可以把一个主机的信息跨网络传输到另一个主机
传输层和网络层在OS内部,数据链路层在驱动,物理层暂时不说了,应用层是由用户自己实现的,用户未来一定通过调用某些系统调用接口来完成向传输层下达网络发送的任务,最后发给对方主机。
数据包在整个网络中首先自顶向下做封装,然后被某个路由器收到,然后自底向下解包分用交给路由器。然后从路由器自顶向下封装。。。,最后交给用户B
有两个问题,我们在网络通信时,路由器往下传可以有多个选择,为什么会选择这个你,不选择它呢?
根本原因还是在于目的IP,它在网络层进行路径选择时选择了下一个跳转的路由器。
相关文章:

【Linux】网络基础一
网络基础一 1.计算机网络背景1.1 网络发展1.2 认识 “协议” 2.网络协议初识2.1 协议分层2.2 OSI七层模型2.3 TCP/IP五层(或四层)模型 3. 网络传输基本流程3.1 网络传输流程图 4.数据包封装和分用5.网络中的地址管理 从今天开始我们将要从系统横跨到网络的学习了,因…...

Redis-2 Redis基础数据类型与基本使用
高级Redis应用进阶 一站式Redis解决方案-Redis-2 Redis基础数据类型与基本使用 源代码在GitHub - 629y/food-social-contact-parent: redis项目-美食社交APP 1. Redis基本数据类型 1.字符串(strings) set username zhangsan get username mset age 18 …...
python提取身份证中的生日和性别
1.代码 def sfzAnalysis(idNum):#检查身份证长度是否正确if len(idNum)!18:raise ValueError("身份证号码长度不正确,请输入一个18位的身份证号码。")#raise关键字在Python中有多种用途,主要涉及异常的抛出和错误处理#提取出生日期year idN…...

opencv 傅里叶变换(低通滤波 + 高通滤波)
文章目录 1、傅里叶变换2、通过numpy实现3、高通滤波器5、通过opencv实现傅里叶变换6、低通滤波器7、C实现傅里叶变换 1、傅里叶变换 时域分析:以时间作为参照物,世间万物都是随着时间变化而变化,并且不会停止 频域分析:认为世间万…...
Educational Codeforces Round 163 (Rated for Div. 2)(A,B,C,D,E)
比赛链接 好忙好忙好忙,慢慢补老比赛的题解了。 这场没啥算法,全是思维。有也是BFS,屎。 A. Special Characters 题意: 您将得到一个整数 n n n 。 您的任务是构建一串大写的拉丁字母。此字符串中必须正好有 n n n 个特殊字…...

索引常见面试题
面试中,MySQL 索引相关的问题基本都是一系列问题,都是先从索引的基本原理,再到索引的使用场景,比如: 索引底层使用了什么数据结构和算法?为什么 MySQL InnoDB 选择 Btree 作为索引的数据结构?什…...
【Unity】旋转的尽头是使用四元数让物体旋转
// 导入必要的命名空间 using System.Collections; using System.Collections.Generic; using UnityEngine;// 创建一个名为 RotateObj 的 MonoBehaviour 类,该类可以附加到 Unity 中的游戏对象上并控制其行为 public class RotateObj : MonoBehaviour {// Update 函…...

哔哩哔哩秋招Java二面
前言 作者:晓宜 个人简介:互联网大厂Java准入职,阿里云专家博主,csdn后端优质创作者,算法爱好者 一面过后面试官叫我别走,然后就直接二面,二面比较简短,记录一下,希望可以…...

OSPF特殊区域(stub\nssa)
stub区域——只有1类、2类、3类;完全stub区域——只有1类、2类 NSSA区域:本区域将自己引入的外部路由发布给其他区域,但不需要接收其他区域的路由 在NSSA区域的路由器上,引入外部路由时,不会转换成5类LSA,…...
全球首位AI程序员诞生,将会对程序员的影响有多大?
随着全球首位AI程序员Devin的诞生,人工智能技术在编程领域的应用引发了广泛的讨论和思考。这一事件不仅标志着AI技术在软件开发领域的一大步进展,也引起了人们对未来编程职业发展的广泛关注。那么,AI程序员的出现究竟会对程序员的职业生涯产生…...
【晴问算法】提高篇—动态规划专题—最长上升子序列
题目描述 现有一个整数序列a1,a2,...,an,求最长的子序列(可以不连续),使得这个子序列中的元素是非递减的。输出该最大长度。 输入描述 第一行一个正整数n(1≤n≤100),表示序…...

天软特色因子看板(2024.3第5期)
该因子看板跟踪天软特色因子A08006(近一月日度买卖压力2),该因子为近一个月个股每日的相对价格位置,用以刻画股票所受买卖压力,取作 介于0~1间,指标值越大,反映股票在价格相对高位停留的时间越长,所面临的买…...

静态网络配置
一、查看网络命令 1.命令行查看网络配置 1、查看ip\硬件设备-网卡 ifconfig -a ifconfig ens160 网卡名称 ip addr show ip addr show ens160 nmcli device show ens160 nmcli con up ens160 2、主机名称 hostname hostname hfj.huaxia.com 3、查看路由和网关 rou…...
多种智能搜索算法可视化还原 3D 魔方
2024/03/19:程序更新说明(文末程序下载链接已更新) 版本:v1.0 → v1.2 ① 修复:将 CLOSED 表内容从优先级队列中分离开来,原优先级队列作 OPEN 表,并用链表树隐式地代替 CLOSED 表,以…...

Maven,pom.xml,查找 子jar包
在IDEA打开pom.xml,会看到这里: 然后如果有需要,把相关的 子jar包 去掉 <dependency><groupId>XXX</groupId><artifactId>XXX</artifactId><exclusions><exclusion><artifactId>xxx</a…...

MySQL中数据库表的监控
MySQL中数据库表的监控 (1)查看数据库中当前打开了哪些表:show OPEN TABLES ,如图6-1-5所示。另外,还可以通过show OPEN TABLES where In_use > 0过滤出当前已经被锁定的表。 查看数据库中表的状态:SHO…...

【S5PV210_视频编解码项目】裸机开发2:实现PWM波形驱动蜂鸣器
开发内容介绍 基于芯片自带的PWM定时器模块,实现对PWM波形的控制,掌握pwm定时器的驱动程序开发。 开发理论架构 1)pwm波形的产生的条件:在指定的IO口输出一定频率和占空比的波形 2)pwm波形频率的影响因素࿱…...
js进阶-深入对象-内置构造函数-包装类
一. 创建对象的三种方式 1.1 利用对象字面量创建对象 const p {name:"kebi" }1.2 利用 new Object 创建对象 // const obj new Object()// obj.uname maidi// console.log(obj)const obj new Object({ uname: maidi })1.3 利用构造函数创建对象 大写字母开头的…...
Linux作业
1.创建用户,用户名为user,user02密码均为123.com,创建完成后用tail查看用户是否存在。(截图)(10分) 2.在用户user主目录中用mkdir命令创建目录my.txt,在目录my.txt中创建文件a1.txt、1a1.txt、5…...

信息发布系统
特色功能 画布功能---可任意拖动各控件的播放位置及大小,可任意选择屏幕背景色或添加背景图 同步联屏---毫秒级同步功能 视频切换无黑屏 触摸查询系统 会议预定系统 终端显示-会议综合屏 终端显示-会议预定屏 终端显示-移动端 广告发布系统 硬件产品-智能终端 硬件…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...

vue3+vite项目中使用.env文件环境变量方法
vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量,这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...

解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...

Neko虚拟浏览器远程协作方案:Docker+内网穿透技术部署实践
前言:本文将向开发者介绍一款创新性协作工具——Neko虚拟浏览器。在数字化协作场景中,跨地域的团队常需面对实时共享屏幕、协同编辑文档等需求。通过本指南,你将掌握在Ubuntu系统中使用容器化技术部署该工具的具体方案,并结合内网…...

2025年- H71-Lc179--39.组合总和(回溯,组合)--Java版
1.题目描述 2.思路 当前的元素可以重复使用。 (1)确定回溯算法函数的参数和返回值(一般是void类型) (2)因为是用递归实现的,所以我们要确定终止条件 (3)单层搜索逻辑 二…...