当前位置: 首页 > news >正文

网络基础认识

目录

一、计算机网络背景

1.1 网络发展

1.2 "协议"由来

二、网络协议初识

2.1 协议分层

2.2 OSI七层模型

2.3 TCP/IP五层模型

三、网络协议栈

四、数据包封装与分用

五、网络传输基本流程

5.1 同局域网的两台主机通信

5.2 跨网络的两台主机通信

六、网络中的地址管理

6.1 IP地址

6.2 MAC地址


一、计算机网络背景

1.1 网络发展

独立模式:计算机之间相互独立

在早期,计算机之间相互独立,此时若多个计算机要协同完成某种业务,那么就只能等一台计算机处理完后再将数据通过光盘等硬件传递给下一台计算机,然后下一台计算机再进行相应的业务处理,效率非常低下

网络互联:多台计算机连接,完成数据共享

这时就有人设法将这些计算机连接在一起,当某个业务需要多台计算机协同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机就都能获取到这些共享的数据,所以各个业务在处理就能随时进行切换了

局域网LAN:通过交换机和路由器将多台计算机连接

后来这样的网络雏形逐渐发展,连入这个网络中的机器越来越多,于是就出现了局域网的概念

在局域网中有一种设备为交换机,交换机主要完成局域网内数据的转发工作,即在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器连接起来,路由器主要完成数据的路由转发工作

广域网WAN:将远隔千里的计算机连接

各个局域网之间通过路由器相互连接在一起,便组成了一个更大的网络结构,被称为广域网。实际局域网和广域网是一种相对的概念,广域网也可以看作一个较大的局域网

还有类似于城域网和校园网的概念,城域网实际就是在一个城市范围内所建立的计算机通信网,而校园网对应的就是校园范围内所建立的计算机通信网。城域网和校园网实际都是一种相对的概念,都可以将其看作一个较大的局域网

1.2 "协议"由来

"协议"本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,只有将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容

如通信计算机双方曾经做过如下约定:

  • 若code的值为1,则表示需要将data的值存储进数据库
  • 若code的值为2,则表示需要将data的值写入日志信息。
  • 若code的值为3,则表示需要将data的值进行打印输出

上图为一个位段结构,可以通过位段来表示某种协议规定的,而实际上计算机网络里面的协议报头就是通过位段来实现的

有了约定后,当甲计算机向乙计算机发送类似于{1, 0x1234}的数据时,乙计算机识别到code的值是1,于是就知道了甲计算机是让自己将data的值存储进数据库(纯软件的约定方案)

计算机之间的传输媒介是光信号和电信号,通过"频率"和"强弱"来表示0和1这样的信息,因此要想传递各种不同的信息,就需要约定好双方的数据格式(纯硬件的约定方案)

二、网络协议初识

2.1 协议分层

网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性

如在打电话时,站在工程师的角度实际这两个人并不是直接进行沟通的,而是甲的电话将甲说的话记录下来,经过一系列编码转码后,通过通信网络将信息从甲的电话传递到了乙的电话,然后信息在乙的电话中再经过对应的编码转码,最后乙才通过话筒听到了甲所说的话

其中,人与人之间通信使用的是汉语,可以将其称为语言层;而电话和电话之间通信使用的是电话系统相关的一些接口,可以将其称之为通信设备层

后来随着科技的发展,开始使用智能手机,此时下层使用的通信设备变化,或是手机卖到了其他国家,此时上层使用的通信语言变了,但仍然可以正常沟通

分层的益处在于"封装",在分层情况下,将某层的协议进行替换后,通信双方之间不会受到影响

实际上,在设计协议栈时也可以不进行分层,将各个层的功能全部写在一起,将这些小模块合并成一个更大的模块。但这样的设计方式对设计人员的要求就非常高了,设计人员必须能够编写从物理层到应用层的整个通信过程的代码,并且最终设计出来的代码的可维护性和可扩展性是很低的

层状结构的本质是软件工程上面的解耦,此时层与层之间只有接口的相互调用关系,此时就可以让研究不同领域的开发人员编写不同层的代码,最后再将各层的代码联调起来,由于每一层的代码都是对应领域的专业人员编写的,因此代码联调后整体的性能也是很高的

并且这样的层状结构可以增加代码的可维护性和可扩展性。比如有一天觉得数据链路层的代码已经无法承担起通信的能力了,那么此时就可以用一个新的协议对它进行替换,而其他各层对应的协议都不用换,即可扩展性。而若协议栈的某一层出现了问题,只要确定了是哪一层出了问题,就可以直接去对应层去找问题,即代码的可维护性

2.2 OSI七层模型

最开始指定的协议为OSI七层协议

  • OSI(Open System Interconnection,开放系统互联)七层网络模型称为开方式系统互联参考模型,是一个逻辑上的定义和规范
  • OSI把网络从逻辑上分为了七层,每一层都有相关的、相对应的物理设备,如路由器,交换机
  • OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,如手机和电视之间数据的传输
  • OSI七层模型最大的优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也较为完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯
  • OSI七层模型较为复杂,所以后来在具体实现的时候就对其进行了调整,于是就有了后来的TCP/IP四层协议

2.3 TCP/IP五层模型

TCP/IP是一组协议的代名词,还包括许多其他协议,共同组成了TCP/IP协议簇。TCP/IP通讯协议采用了五层的层级结构,每一层都呼叫其下一层所提供的网络来完成自己的需求

  • 物理层:负责光/电信号的传递方式。如现在以太网通用的网线(双绞线)、早期以太网采用的同轴电缆(现在主要用于有线电视)、光纤,现在的WiFi无线网使用的电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)就是工作在物理层的
  • 数据链路层:负责设备之间的数据帧的传送和识别。如网卡设备的驱动、帧同步、冲突检测(若检测到冲突就自动重发)、数据差错校验等工作。数据链路层底层的网络通信标准有很多,如以太网、令牌环网、无线LAN等。交换机(Switch)就工作在数据链路层
  • 网络层:负责地址管理和路由选择。如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间数据传输的线路(路由)。路由器就是工作在网络层的
  • 传输层:负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机
  • 应用层:负责应用程序间沟通。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。网络编程主要就是针对应用层的

下面几层几乎没有区别,操作系统对应的是传输层和网络层,数据链路层和物理层都是对应在驱动层的,而TCP/IP协议当中的应用层就对应到OSI七层协议当中的应用层、表示层和会话层

  • 对于一台主机,操作系统内核实现了从传输层到物理层的内容
  • 对于一台路由器,它实现了从网络层到物理层的内容
  • 对于一台交换机,它实现了从数据链路层到物理层的内容
  • 对于集线器,其只实现了物理层的内容

但并不是绝对的,如现在很多交换机也实现了网络层的转发,很多路由器也实现了部分传输层的内容(比如端口转发)

集线器了解

电磁信号在长距离传输过程中信号是会衰减的,而集线器的主要功能就是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上

集线器属于纯硬件网络底层设备,基本上不具有类似于交换机的“智能记忆”能力和“学习”能力,也不具备交换机所具有的MAC地址表,所以发送数据时是没有针对性的,而是采用广播方式发送,即当集线器要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点

三、网络协议栈

通常在手机或者电脑上使用的APP,如抖音、快手、淘宝等,这些APP都是在应用层的。用户在应用层的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了目标服务器

目标服务器本身也是一台计算机,假设该计算机的操作系统就是Linux,而访问目标服务器时使用的可能是Windows、安卓或者IOS等操作系统。此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,如抖音服务器、快手服务器、淘宝服务器等,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户

不同操作系统的进程管理、文件管理、内存管理、驱动管理的实现方式可能是不一样的。如Windows和Linux实现多线程的方式就是不一样的,Linux中的线程是用轻量级进程模拟的,而Windows中是有真正意义上的线程的

而协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持。虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作基本一致

网络协议栈

操作系统与网络协议栈有着密切的关系。网络协议栈主要负责数据的通信,其自顶向下可分为四层,分别是应用层、传输层、网络层、数据链路层

网络协议栈各层所处位置:

  • 应用层是位于用户层的。 这部分代码是由网络协议的开发人员来编写的,如HTTP协议、HTTPS协议以及SSH协议等
  • 传输层和网络层是位于操作系统层的。 其中传输层最经典的协议叫做TCP协议,网络层最经典的协议叫做IP协议,这就是我们平常所说的TCP/IP协议
  • 数据链路层是位于驱动层的。 其负责真正的数据传输

有些地方可能将网络协议栈分为了五层,多了最底层的物理层,物理层主要就是利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,是与硬件强相关的 

有的书还会将数据链路层和物理层统称为网络接口层,也有书会将网络层称为网际层

网络协议栈各层功能 

  • 数据链路层和物理层

要实现通信首先要能够将数据发送出去,而数据链路层和物理层就是负责数据真正的发送过程的

  • 网络层

在数据链路层和物理层的支持下,现在能够将数据发送出去了,但是还应该知道数据应该往哪里发,而网络层完成的就是数据转发,解决了数据去哪里的问题

  • 传输层

有了发送数据的能力,也知道数据应该往哪里发,但是并不能保证发出去的数据能够成功的到达对端主机,比如在传输过程中可能会出现丢包或对端主机关机,甚至对端服务器出错,导致数据传送出现问题。而传输层的工作就是处理传输时遇到的问题,主要是保证数据可靠性

  • 应用层

即网络协议栈的下三层能够保证把数据交付给对端主机,但现在还需要明确的是,将数据发送给对端主机的目的是什么,而这就是应用层要解决的问题。应用层需要根据特定的通信目的,对数据进行分析与处理,以达到某种业务性的目的

网络协议栈的下三层主要的完成的工作就是处理通信细节,而应用层主要完成的就是某种具体的业务细节

四、数据包封装与分用

  • 不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)
  • 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)
  • 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息.
  • 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的 "上层协议字段" 将数据交给对应的上层协议处理

数据封装的过程:

数据分用的过程:

报头

报头本质也是一种数据,报头一般是通过位段实现的,因此协议栈的每一层都有一个对应的位段来表示当前层的报头

  • 数据封装,实际就是不断给数据加上各种对应的报头,这些报头里面填充的就是对应的各种协议细节
  • 数据解包,实际就是不断从数据中提取对应的报头,并对提取出来的报头进行数据分析

有效载荷

当对端主机收到数据后,需要自底向上贯穿协议栈,依次进行数据的解包与分用。在这个解包的过程中,每一层的协议只需要提取出数据中对应的报头,然后对该报头进行分析处理,而剩下的数据则直接交付给上层即可

因为每一层的协议只关心数据中与当前层对应的报头信息,而剩下信息的具体内容根本不必关心,数据中除当前层的报头以外的数据就被称为"有效载荷"

上层协议在数据封装时添加的报头信息,在下层协议进行数据解包时看来就是有效载荷。比如数据封装时应用层添加的报头信息,在对端主机进行数据解包时,在对端主机的传输层、网络层以及链路层看来,该应用层曾经添加的报头信息就是有效载荷

如何将报头与有效载荷进行分离?

协议栈的每一层都要从数据中提取对应的报头信息,而要将数据中的报头提取出来,首先就需要明确报头与有效载荷之间的界限,这样才能进行分离。而每一层添加报头时都是将报头添加到数据的首部的,因此只要知道了报头的大小,就能够讲报头和有效载荷进行分离

获取报头大小的方法通常有两种:

  • 定长报头。报头的大小是固定的
  • 自描述字段。报头当中提供了一个字段,用来表示报头的长度

每个协议都要提供一种方法获取到报头的大小,这样才能在解包时将报头与有效载荷进行分离

当前层如何知道应该将有效载荷交付给上层的哪个协议?

网络协议栈的每一层都可能会对应多种协议,即便将报头与有效载荷分离了,那当前层应该将有效载荷交付给上层对应的哪个协议呢?实际在每种协议的报头当中,几乎都会包含一个字段,表明我们应该把分离出来的有效载荷交付给上层的哪个协议,这就是分用的过程

协议共性

  • 提供一个将报头与有效载荷分离的方法。
  • 协议当中必须包含一个字段,表明应该将有效载荷交付给上层的哪个协议。

在解包时必须将报头与有效载荷分离,在分用时必须知道应该将有效载荷交付给上层的哪个协议

五、网络传输基本流程

5.1 同局域网的两台主机通信

同一个局域网内的主机是能够直接进行通信的,因为最初局域网设计的目的,就是为了让局域网内的主机能够进行通信

当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:

  • 文件数据先交给应用层,应用层添加上对应应用层协议的报头信息后,将数据再交给传输层
  • 传输层收到数据后,再添加上对应传输层协议的报头信息,并将数据继续向下进行交付
  • 网络层收到数据后,再添加上对应网络层协议的报头信息,接着将数据再交给链路层
  • 链路层收到数据后,最后再添加上对应链路层协议的报头信息,至此数据封装完毕

数据封装完毕后就可以通过局域网将其发送给对端主机了,而当对端主机收到数据后,对应也需要通过网络协议栈对该数据进行解包与分用:

  • 链路层收到数据后,先将数据中对应链路层协议的报头信息提取出来,然后将剩下的数据交给网络层
  • 网络层收到该数据后,再将数据中对应网络层协议的报头信息提取出来,然后将剩下的数据继续向上进行交付
  • 传输层收到该数据后,再将数据中对应传输层协议的报头信息提取出来,然后将剩下的数据再交付给应用层
  • 应用层收到数据后,最后将数据中对应应用层协议的报头信息提取出来,至此便完成了数据的解包与分用

任何一台主机在发送数据之前,该数据都要先自顶向下贯穿协议栈来完成数据的封装,在这个过程中,每一层协议都会添加上对应的报头信息;而任何一台主机收到数据后,都要先自底向上贯穿协议栈来完成数据的解包和分用,在这个过程中,每一层协议都会将对应的报头信息提取出来

 局域网内传输数据时,该局域网内的所有主机都能收到

在一个局域网当中,除了当前正在进行通信的A主机和B主机以外,还有其他的主机

实际当主机A想要发数据给主机B的时候,该局域网内的其他主机也都收到了该数据,只不过除了主机B以外,其他主机识别到该数据并不是发给自己的,此时其他主机就把收到的数据丢弃了

即在局域网(以太网)通信时,该局域网内所有的主机在底层其实都收到了所有数据,只不过经过筛选后只提交上来了发给自己的数据

碰撞

主机A在向主机B发送数据时,其他主机彼此之间可能也正在进行通信,甚至主机A在和主机B通信的同时也在和其他主机进行通信

但同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此若局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰

每一个局域网都可以看作是一个碰撞域,若某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我就称这两台主机在该碰撞域中发生了碰撞

如何判断发送出去的数据是否发生了碰撞?

因为发送到局域网当中的数据是所有主机都能够收到的,因此当一个主机将数据发送出去后,该主机本身也是能够收到这个数据的。当该主机收到该数据后就可以将其与之前发送出去的数据进行对比,若发现收到的数据与之前发送出去的数据不相同,则说明在发送过程中发生了碰撞

发生碰撞后如何处理?

当一个主机发现自己发送出去的数据产生了碰撞,此时该主机就要执行"碰撞避免"算法。"碰撞避免"算法实际很简单:当一个主机发送出去的数据产生了碰撞,那么该主机会随机等一段时间后,再重新发送该数据

实际在网络通信压力不大的时候发生碰撞的概率是不大的,不要小瞧计算机的处理速度,也不要小瞧网线传播数据的速度

每个主机如何判断该数据是否是发送给自己的?

在局域网中发送的数据实际叫做MAC数据帧,在这个MAC数据帧的报头当中会包含两个字段,分别叫做源MAC地址和目的MAC地址

每一台计算机都至少配有一张网卡,而每一张网卡在出厂时就已经内置了一个48位的序列号,这个序列号被称之为"MAC地址",这个MAC地址是全球唯一的

在局域网中进行通信的时候,每一个主机在收到一个MAC数据帧后,都会提取该MAC数据帧的报头,找到对应的目的MAC地址与自己的MAC地址进行比对。若该MAC地址与自己的MAC地址不匹配,则直接将该MAC数据帧丢弃,只有MAC地址匹配时,该主机才会将该数据帧的有效载荷继续向上进行交付处理

扩展:

  • 单向数据发送: 主机发送数据帧时,将数据帧当中的目的MAC地址指定为某一台主机,此时每台主机对数据帧进行识别后,最终只有那台指定的主机会将该数据帧向上交付进行处理
  • 局域网内进行数据广播: 主机发送数据帧时,将数据帧当中的目的MAC地址设置为全1,此时所有主机收到该数据帧后都会对该数据帧进行处理

与碰撞相关的一种局域网攻击机制

若局域网内的某台主机一直向该局域网内发送一些无用的数据,那么其他主机一发数据就会产生碰撞,此时该局域网也就瘫痪了,这实际就是局域网本身的一个攻击原理。但需要注意的是,这台一直发送垃圾数据的主机,必须要通过某种方式绕过"碰撞避免"算法,否则当其发送的数据产生碰撞后,该主机自己也会执行“碰撞避免”算法

5.2 跨网络的两台主机通信

局域网之间都是通过路由器连接起来的,因此一个路由器至少能够横跨两个局域网。而这些被路由器级联的局域网都认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信

比如局域网1中的主机A想要和局域网2中的主机H进行通信,那么主机A可以先将数据发送给路由器,然后路由器再将数据转发给局域网2当中的主机H

采用不同通信标准的两个局域网内的主机通信

若路由器级联的两个局域网采用的是相同的通信标准,那么通信过程大致与上述一致。但被路由器级联的局域网可能采用的是不同的通信标准,比如局域网1采用的是以太网,而局域网2采用的却是令牌环网

由于以太网和令牌环网是不同的通信标准,给数据添加的报头也是不一样的,因此令牌环网中的主机无法对以太网当中的数据帧进行解包

这种情况实际是由路由器来处理的,路由器是工作在网络层的一个设备,可以认为路由器当中的协议栈是下面这样的

此时当数据要从局域网1发送到局域网2时,路由器收到局域网1的数据后,会先将以太网对应的报头进行解包,然后将剩下的数据向上交付给网络层,在网络层进行一系列数据分析后,再将数据向下交付给链路层,此时在链路层当中就会给该数据添加上令牌环对应的报头信息,然后再将该数据发送到局域网2当中,此时该数据就能够在令牌环网当中传输了

路由器为什么能够“认路”?

一个路由器可能会级联多个局域网,当路由器需要将一个局域网的数据转发到另一个局域网时,路由器如何知道该数据应该转发到哪一个局域网的呢?

路由器是通过IP地址来确定数据的转发方向的,公网上的每台计算机都有一个唯一的IP地址,而在数据向下进行封装时,在网络层封装的报头当中就会包含两个字段,分别是源IP地址和目的IP地址

当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网

屏蔽底层的差异

IP地址的存在除了帮助数据"路由"以外,还可以屏蔽底层网络的差异。对于通信主机双方的IP层及其往上的协议来说,并不需要关心底层采用的是以太网还是令牌环网,只要填写了源IP地址和目的IP地址就能够将数据发送出去,因此现在主流的网络也被称为"IP网络"

这种类似的技术还有:

  • 虚拟地址空间:屏蔽了内存之间的差别,让所有的进程看到的都是同一块内存,并且这块内存的布局都是一样的
  • 一切皆文件:通过文件结构体和函数指针的方案,以对待文件的方式对待某些资源

六、网络中的地址管理

6.1 IP地址

  • IP地址是在IP协议中,用来标识网络中不同主机的地址
  • 对于IPv4来说,IP地址是一个4字节,32位的整数
  • 通常也使用"点分十进制"的字符串表示IP地址,如192.168.0.1,用点分割的每一个数字表示一个字节,范围是0-255

IP协议有两个版本:IPv4和IPv6。IPv4用32个bit位来标识IP地址,IPv6用128个bit位来标识IP地址

理解源IP地址和目的IP地址

因特网上的每台计算机都有一个唯一的IP地址,若一台主机上的数据要传输到另一台主机,那么对端主机的IP地址就应该作为该数据传输时的目的IP地址。但仅仅知道目的IP地址是不够的,当对端主机收到该数据后,对端主机还需要对该主机做出响应对,因此端主机也需要发送数据给该主机,此时对端主机就必须知道该主机的IP地址。因此一个传输的数据当中应该涵盖其源IP地址和目的IP地址,目的IP地址表明该数据传输的目的地,源IP地址作为对端主机响应时的目的IP地址

在数据进行传输之前,会先自顶向下贯穿网络协议栈完成数据的封装,其中在网络层封装的IP报头当中就涵盖了源IP地址和目的IP地址。而除了源IP地址和目的IP地址之外,还有源MAC地址和目的MAC地址的概念

6.2 MAC地址

  • MAC地址用来识别数据链路层中相连的节点
  • 长度为48位,及6个字节,一般用16进制数字加上冒号的形式来表示(如08:00:27:03:fb:19)
  • 在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突,也有些网卡支持用户配置MAC地址)

大部分局域网都是以太网标准,其中 ether 对应就有"以太"的意思,而 ether 后面的这个地址就是当前云服务器所对应的MAC地址。但实际云服务器上的MAC地址可能不是真正的MAC地址,该MAC地址可能模拟出来的

理解源MAC地址和目的MAC地址

大部分数据的传输都是跨局域网的,数据在传输过程中经过若干个路由器,最终才能到达对端主机

源MAC地址和目的MAC地址是包含在链路层的报头当中的,而MAC地址实际只在当前局域网内有效,因此当数据跨网络到达另一个局域网时,其源MAC地址和目的MAC地址就需要发生变化,因此当数据达到路由器时,路由器会将该数据当中链路层的报头去掉,然后再重新封装一个报头,此时该数据的源MAC地址和目的MAC地址就发生了变化

在图中主机1向主机2发送数据的过程中,数据的源MAC地址和目的MAC地址的变化过程如下:

数据在传输的过程中是有两套地址: 

  • 源IP地址和目的IP地址,这两个地址在数据传输过程中基本是不会发生变化的(存在一些特殊情况,比如在数据传输过程中使用NET技术,其源IP地址会发生变化,但至少目的IP地址是不会变化的)
  • 源MAC地址和目的MAC地址,这两个地址是一直在发生变化的,因为在数据传输的过程中路由器不断在进行解包和重新封装

相关文章:

网络基础认识

目录 一、计算机网络背景 1.1 网络发展 1.2 "协议"由来 二、网络协议初识 2.1 协议分层 2.2 OSI七层模型 2.3 TCP/IP五层模型 三、网络协议栈 四、数据包封装与分用 五、网络传输基本流程 5.1 同局域网的两台主机通信 5.2 跨网络的两台主机通信 六、网络…...

【蓝桥杯_练习】

蓝桥杯1.创建工程2.LED灯点亮led.c3.LCD液晶屏显示lcd.c4.定时器按键单机interrupt.hinterrupt.cman.c5.定时器(长按键)interrupt.hinterrupt.cmain.c6.PWMmain.c7.定时器-输入捕获(频率,占空比测量)interrupt.cmain.c…...

【C语言蓝桥杯每日一题】——跑步锻炼

【C语言蓝桥杯每日一题】—— 跑步锻炼😎前言🙌排序🙌总结撒花💞😎博客昵称:博客小梦 😊最喜欢的座右铭:全神贯注的上吧!!! 😊作者简介…...

Qt之实现类似软件安装时的新功能介绍界面

一.效果 在软件安装时,一般会轮播软件的新功能,安装后,如果还想查看这些新功能该怎么办呢,我们可以把这个介绍新新功能的小应用集成到软件的“帮助”菜单中,比起纯黑文字的无趣介绍,图文方式的呈现会生动得多。 最近在看《赘婿》,借几张图过来用用。 二.原理 1.分层结…...

echarts地图不同地区设置不同的颜色

var myChart ec.init(document.getElementById(main));let option {tooltip: {trigger: item,},dataRange: {//左下角的颜色块。start:值域开始值;end:值域结束值;label:图例名称;color:自定义…...

网易云音乐API部署Vercel获取接口过程

前提:部署自己的网易云接口主要用途在于在完成前端的仿网易云播放器的时候,根据自己部署的接口可以用于获取数据。大体流程是通过在github上fork别人的API接口项目,然后在Vercel部署即可获得自己的网易云后端数据接口了,不过根据我…...

Java基础:字符串(String)及常用操作

目录 字符串的声明及创建 字符串的操作 连接字符串(或concat) 获取字符串的长度 length 查找字符串 indexOf 获取字符串某个位置的字符 charAt 查询某个字符串是否存在 contains 截取字符串 substring(一) 截取字符串 su…...

FL Studio 21中文版支持主题随心换,FL Studio 21Mac版新增对苹果M2/1家族芯片原生支持。

FL Studio 21.0.0 官方中文版重磅发布 纯正简体中文支持,更快捷的音频剪辑及素材管理器,多样主题随心换! Mac版新增对苹果M2/1家族芯片原生支持。 更新版本:21.0.0支持语言:简体中文/英语更新时间:2022.12…...

【蓝桥杯集训·周赛】AcWing 第96场周赛

文章目录第一题 AcWing 4876. 完美数一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第二题 AcWing 4877. 最大价值一、题目1、原题链接2、题目描述二、解题报告1、思路分析2、时间复杂度3、代码详解第三题 AcWing 4878. 维护数组一、题目1、原…...

【数据结构】顺序表的深度刨剖析

前言:在上一篇文章中,我们已经对数据结构有了一定了解,我们可以通过优化空间复杂度或者时间复杂度从而提高我们程序运行或存储速率。至此我们就知道了数据结构的重要性,所以今天我们将要了解和学习一种实用的数据结构——线性表。…...

Unity 之 使用原生UGUI实现随手移动摇杆功能经典实例

Unity 之 使用原生UGUI实现随手移动摇杆功能实现效果一,实现思路1.1 原理解析1.2 思路概述二,实现代码2.1 随手落下2.2 摇杆转动三,源码分享3.1 场景搭建3.2 完整代码3.3 实现效果实现效果 本文最终实现效果: 一,实现…...

Linux内核源代码概述

Linux内核源代码非常庞大,截止到2015年据统计代码总量就已经超过1500万行(LOC,Line of Code),看代码总量非常吓人,具体看这1500万行代码的大致分布情况如下图。 显然占比最大的drivers和arch目录下的代码合…...

Nginx 教程-动静分离

一、Nginx 动静分离理论1、概念今天学习和梳理Nginx动静分离,动静分离是将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,之所以要进行动静分离,其一为了提高前端…...

自己设计的网站,如何实现分页功能?(详细代码+注释)

目录 前言 实现分页功能 需求分析 客户端开发 服务器开发 前后端交互——两种前端得到 文章总页数 的方法,那种更合适? 前言 你在设计网站的时候是否有过这样的烦恼:“我设计的网站怎么就是从上到下一条线内容全部展开,一点都…...

STM32F407控制微型推拉式电磁铁(通过继电器)

1、继电器 继电器相当于开关,单片机通过io口高低电平的控制来控制继电器的开闭。采用继电器的好处除了能够用低电压控制高电压(如32单片机控制220V的电压)外,还可以防止电流反冲,弄烧单片机。 本文采用3.3v的电磁铁&am…...

VS Code工作区用法

背景VS Code可以通过"文件/打开文件夹"来打开本地项目,但是想要打开多个项目便需要来回切换,比较费劲。此时就可以使用工作区功能,将不同的项目放置到同一个工作区中,这样切换项目的时候就会非常方便。操作方法打开其中…...

Mybatis-Plus SQLFeatureNotSupportedException: getObject with type问题解决

问题描述: Error attempting to get column modify_time from result set. Cause: java.sql.SQLFeatureNotSupportedException: getObject with type ; getObject with type; nested exception is java.sql.SQLFeatureNotSupportedException: getObject with type…...

Unity | 发布Android的那些事儿

1.使用UnityWebRequest获取StreamingAssets中的json文件(1)直接根据不同平台指定url路径IEnumerator AITalPredZhanHui(){string url;string fileName "girl.json"; #if UNITY_EDITOR || UNITY_STANDALONEurl "file://" Applicat…...

git为什么要先commit,然后pull,最后再push?而不是commit完直接push?

情况是这样的,现在远程有一个仓库,分支就一个,是master。然后我本地的仓库是从远程的master上clone下来的。大家都是clone下来,再在自己本地改好,再commit然后pull然后push,大家都是这么做的。那么现在问题…...

若依框架----源码分析(@RateLimiter)

若依作为最近非常火的脚手架,分析它的源码,不仅可以更好的使用它,在出错时及时定位,也可以在需要个性化功能时轻车熟路的修改它以满足我们自己的需求,同时也可以学习人家解决问题的思路,提升自己的技术水平…...

页面的重排和重绘?

思路: 网页渲染HTML文件到浏览器的过程->定义->如何优化网页渲染HTML文件到浏览器的过程HTML 文件通过HTML解析器解析生成DOM树;CSS文件通过CSS解析器生成CSSOM树;DOM树和CSSOM树生成渲染树(render tree)&#x…...

人脸检测-python和c++实现

人脸检测是计算机视觉领域中的一个重要应用,其目的是从图像或视频中自动检测出其中的人脸,并对其进行识别、跟踪等操作。人脸检测技术已经广泛应用于安防、人机交互、娱乐等领域,具有广泛的应用前景。 人脸检测的基本思路可以分为以下几个步骤: 图像预处理:首先需要对输入…...

PowerJob源码环境搭建

一、IEDA导入PowerJob源码 gitgithub.com:PowerJob/PowerJob.gitPowerJob 由调度服务器(powerjob-server)和执行器(powerjob-worker)两部分组成 powerjob-server 负责提供 Web 服务和完成任务的调度powerjob-worker 则负责执行用…...

天梯赛刷题小记 —— L2

最近在重刷 天梯赛&#xff0c;浅浅记录一下&#xff0c;进入L2阶段了 L2-001 紧急救援 解题思路&#xff1a;典型的dijkstra模板题&#xff0c;带路径记录与权重&#xff0c;方案数记录&#xff0c;解析出过 Dijkstra(兼路径) #include <bits/stdc.h> #define inf…...

Prometheus监控实战系列十九:监控Kubernetes集群(上)

Kuberentes是一款开源的容器编排产品&#xff0c;由Google开发后发布到社区&#xff0c;并在2015年将该项目捐献给了云原生基金会&#xff08;Cloud Native Computing Foundation&#xff09;。从2014年第一个版本发布以来&#xff0c;Kubernetes便迅速获得开源社区的追捧&…...

番茄学习法——亲测超级好用

今天给大家分享下我最近使用的学习方法&#xff0c;真的非常好用&#xff01;大家用起来&#xff01; 在日常的学习和工作中&#xff0c;我们经常会遇到一些难以克服的问题&#xff1a;分心、效率低下、焦虑等。为了帮助人们更好地学习和工作&#xff0c;一些学习方法和工具应运…...

vue 项目中使用高德地图

一、账号准备 首先&#xff0c;需要注册并登录高德地图开放平台&#xff0c;申请密钥。操作指引&#xff1a;高德地图开放平台 二、安装高德地图加载器 npm 安装&#xff1a; npm i amap/amap-jsapi-loader --save或者 yarn 安装&#xff1a; yarn add amap/amap-jsapi-loa…...

【每日一题】病人排队

题目描述小理是个热爱生活的孩子。病人登记看病&#xff0c;小理想编写一个程序&#xff0c;将登记的病人按照以下原则排出看病的先后顺序&#xff1a;1. 老年人&#xff08;年龄 ≥≥ 60岁&#xff09;比非老年人优先看病。2. 老年人按年龄从大到小的顺序看病&#xff0c;年龄…...

【数据结构】链表OJ题

目录面试题 02.04 分割链表剑指 Offer II 027 回文链表160 相交链表141 环形链表142 环形链表 II138 复制带随机指针的链表面试题 02.04 分割链表 定义lesshead和greaterhead链接小于和大于等于k的值分别设置哨兵位和尾节点指针最后将两表去除哨兵位再链接 struct ListNode* p…...

冒泡 VS 插入 VS 选择——谁更胜一筹?(附排序源码)

文章目录什么样的“排序算法”更加优质&#xff1f;排序算法的执行效率排序算法的内存消耗排序算法的稳定性冒泡排序&#xff08;Bubble Sort&#xff09;插入排序&#xff08;Insertion Sort&#xff09;选择排序&#xff08;Selection Sort&#xff09;最终的胜利者&#x1f…...

福州专业网站建设/天津百度网站排名优化

lambda表达式含义 函数式接口 1.什么是函数式接口 2.自定义函数 3.作为参数传递Lambda表达式 4.四大内置核心函数式接口 方法引用与构造器引用 方法引用 构造器引用&#xff08;了解&#xff09; 数组引用&#xff08;了解&#xff09; lambda表达式含义 lambda表达…...

php做电影网站/小说排行榜百度

1、先上个图看下网页版数据、mysql结构化数据2、分析思路&#xff1a;该网页主要采用动态加载来实现的&#xff0c;通过刷新页面查看URL&#xff0c;最终发现想要的数据&#xff0c;在js链接当中&#xff0c;进行头文件分析&#xff0c;构造URL&#xff0c;完成数据获取数据存储…...

asp网站开发教程/网页

作者介绍 郑泰森 某共享平台集团风控负责人&#xff1b; “数据人创作者联盟”成员。 接&#xff1a;【干货】风控模型如何嵌入策略&#xff08;一&#xff09; 01 三种常见的风险定价方式 我来简单介绍一下三种常见的风险定价方式&#xff0c;刚才介绍的是整体的情况。风险…...

ps做素材下载网站有哪些/宁波做seo推广企业

/...

微信代运营公司/seo网站推广优化

如果您正在 寻找 一些很酷 的 下拉菜单解决 方案 &#xff0c; 那么这些要 。今天 &#xff0c; 我收集了 一些有用的 CSS和jQuery 下拉菜单 解决 方案 。Creating a pure CSS dropdown menuSexy Drop Down Menu w/ jQuery & CSSSliding Jquery MenuPerfect Dropdown Login…...

wordpress 自动发货/免费观看b站的广告网站平台

我在MyBatis v3 mapper xml中动态生成where子句.但放置括号真的很麻烦.是否有一种更简单的方法来处理问题而不使用if语句&#xff1f;file.lref #{filter.lref}(subject LIKE #{filter.forLike}OR requester_identifier LIKE #{filter.forLike}OR requester_name LIKE #{filte…...