【网络篇】第一篇——网络入门基础

2023-10-26

计算机网络背景

网络发展

认识"协议"

初识网络

网络协议初始

协议分层

OSI七层模型

TCP/IP五层(或四层)模型

网络传输基本流程

同局域网的两台主机通信

跨网络的两台主机通信

网络中的地址管理

认识IP地址

认识MAC地址


计算机网络背景

网络发展

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

早期,计算机之间是相互独立的,如果我们想要多个计算机协同完成某个任务,只能等到一台计算机处理完后再将数据传递给下一台计算机,然后下一台计算机再接着去处理任务,这样效率是很低的。

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

 由于引起的效率低下问题,于是有人就设想把这些计算机连接在一起,当某个任务需要多台计算机共同完成时,就可以将共享的数据放到服务器中进行集中管理,此时各个计算机都能获取这些共享的数据,所以各个业务在处理就能随时进行切换了。

 局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起

 后来这样的网络逐渐发展,连入这个网络中的机器变得越来越多,于是就出现了局域网的概念。在局域网中有一种设备叫做交换机,交换机主要完成局域网内数据的转发工作,也就是在局域网内将数据从一台主机转发给另一台主机。各个局域网之间通过路由器链接起来,路由器主要完成数据的路由转发工作。

 广域网WAN:将远隔千里的计算机连在一起

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

 当然,你可能还听说过城域网和校园网这样的概念,城域网实际就是在一个城市范围内所建立的计算机通信网,而校园网对应的就是在一个校园范围内所建立的计算机通信网。城域网和校园网实际也是一种相对的概念,我们都可以将它们看作一个大的局域网。

认识"协议"

协议本质就是一种"约定",它是多方协商出来的一种通信方案,达成一种"共识"。双方想要通信,就要按照双方事先都知道的约定进行通信,例如,双方之间发送电报,事先约定了0代表收到,1代表发起进攻等,这个约定是双方都知道的。

例子:

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

  • 如果code的值为1,则表示需要将data的值存储进数据库
  • 如果code的值为1,则表示需要将data的值写入日志信息
  • 如果code的值为3,则表示需要将data的值进行打印输出。
struct cmd{
    int code:4;
    int data:8;
}

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

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

另外我们应该都知道,计算机之间的传输媒介是光信号和电信号,通过“频率”和“强弱”来表示0和1这样的信息,因此要想传递各种不同的信息,就需要约定好双方的数据格式,这就是一种纯硬件的一种约定方案。

思考:只要通信的两台主机,约定好协议就可以了吗?

当然不是, 计算机生产商很多;计算机操作系统,也有很多;如何让这些不同厂商之间生产的计算机能够相互顺畅的通信?这时候就需要有一个权威人士站出来,约定一个共同的标准,并且让大家都来遵守这个标准,这个就是网络协议。

而那个站出来的人必须是该领域的佼佼者,正所谓"一流的企业做标准,二流的企业做品牌,三流的企业做产品"。

初识网络

我们通常在手机或者电脑上使用的APP,比如抖音、快手、淘宝等,这些APP都是在应用层的。用户在应用层的各种请求最终会下达给操作系统,操作系统内除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈,协议栈将用户的数据进行各种封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了目标服务器。
目标服务器本身也是一台计算机,该计算机的操作系统就是linux,而我们在访问目标服务器的时候使用的可能是windows,安卓等操作系统,此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层,在对端服务器的应用层就有一个对应的软件服务器,比如抖音服务包,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户。

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

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

我们知道的是,操作系统中包含进程管理、文件管理、内存管理、驱动管理这四大模块,操作系统层与用户层之间有着系统调用层,操作系统层往下是驱动层,而驱动层再往下就是各种硬件设备了。

 操作系统中的进程管理,文件管理,内存管理,驱动管理是隶属于系统部分的,系统部分的核心工作就是管理好各种软硬件资源,对上提供一个良好的运行环境。

操作系统除了有这四大管理模块之外,还有与网络协议栈有着密切的关系,网络协议栈主要负责数据的通信,其自顶向下可分为四层,分别是应用层,传输层,网络层,数据链路层。

网络协议栈各部分所处位置:

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

 整个网络协议栈呈现出一种层状结构,该协议栈贯穿整个体系结构。

网络协议栈的其他分层方法

在其他书上可能将网络协议栈分为了五层,这多出来的一层就是最底层的物理层,物理层主要就是利用传输介质为数据链路层提供物理连接,实现比特流的透明传输,是与硬件强相关的。

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

 将通信过程进行抽象

 此时我们可以将通信过程进行抽象,可以将通信理解成不是两台机器在通信,而是这两台机器当中的网络协议栈之间在进行通信。

 网络协议栈中各层的功能

  •  数据链路层

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

  • 网络层

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

  • 传输层

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

  • 应用层

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

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

 网络协议栈分层的目的

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

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

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

网络协议初始

协议分层

协议分层的好处

  • 各层之间是独立的。某一层并不知道它的下一层是如何实现的,而仅仅需要知道该层通过层间的接口所提供的服务。这样,整个问题的复杂度就下降了,也就是说上一层的工作如何进行并不影响下一层的工作,这样我们在进行每一层的工作设计时只要保证接口不变可以随意调整整层内的工作方式。
  • 灵活性好。当任何一层发生变化时,只要层间接口关系保持不变,则在这层以上或以下层均不受影响。当某一层出现技术革新或者某一层工作中出现问题时不会连累到其他层的工作,排除问题时也只需要考虑这一层单独的问题即可。
  • 结构上可以分开。各层都可以采用最合适的技术来实现,技术的发展往往不对称的,层次化的划分有效避免了木桶效应,不会因为某一方面技术的不完善而影响整体的工作效率。
  • 易于实现和维护。这种结构使得实现和调试一个庞大又复杂的系统变得易于处理,因为整个的系统已经被分解为若干个相对独立的子系统。进行调试和维护时,可以对每一层进行单独的调试,避免了出现找不到、解决错问题的情况。

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

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

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

分层最大的好处在于“封装”,在分层情况下,将某层的协议进行替换后,通信双方之间是不会受到影响的。

 理解各层之间直接通信

从上述例子我们还可以看出,虽然在打电话时我们并不是直接进行沟通的,但是我们可以认为我们是在直接进行沟通,并且这两台电话也不是直接在进行沟通的,数据经过电话后,还需要各种基站,各种电信网络来进行数据转发,但是这两台电话依旧可以认为是直接在和对方电话进行通信的。

因此对于网络协议我们需要有一个基本的认识:关于通信,同层协议可以认为自己在和对方层直接进行通信,从而达到简化对于网络协议栈的理解。

也就是说,在网络协议栈中我们可以认为通信双方的应用层之间直接在进行通信,也可以认为通信双方的传输层之间直接在进行通信,对于网络层和数据链路层也同样如此。

OSI七层模型

上面所说的是TCP/IP四层协议,而实际当初那个站出来的人定的协议叫做OSI七层协议:

七层模型从上到下依次是:

  • 应用层:协议有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP
  • 表示层:数据的表示、安全、压缩。格式有,JPEG、ASCll、DECOIC、加密格式等
  • 会话层:建立、管理、终止会话。对应主机进程,指本地主机与远程主机正在进行的会话
  • 传输层:定义传输数据的协议端口号,以及流控和差错校验。协议有:TCP UDP,数据包一旦离开网卡即进入网络传输层
  • 网络层:进行逻辑地址寻址,实现不同网络之间的路径选择。协议有:ICMP IGMP IP(IPV4 IPV6) ARP RARP
  • 数据链路层:建立逻辑连接、进行硬件地址寻址、差错校验等功能。将比特组合成字节进而组合成帧,用MAC地址访问介质,错误发现但不能纠正。
  • 物理层:建立、维护、断开物理连接。

TCP/IP五层(或四层)模型

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

  • 物理层:负责光/电信号的传递方式。主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0.

  • 数据链路层负责设备之间的数据帧的传送和识别。单纯的电信号0和1没有任何意义,必须规定电信号多少位一组,每组什么意思。数据链路层的功能就是定义了电信号的分组方式

1.以太网协议

(1)ethernet规定

  一组电信号构成一个数据包,叫做"帧",每一数据帧分成:报头head和数据data两部分。

 (2)head包含

发送者/源地址,6个字节;接收者/目标地址,6个字节;数据类型,6个字节。

2.mac地址(局域网内广播时,根据mac地址定位)

head中包含的源和目标地址由来:ethernet规定接入internet的设备都必须具备网卡,发送端和接收端的地址便是指网卡的地址,即mac地址

mac地址:每块网卡出厂时都被烧制上一个世界唯一的mac地址,长度为48位2进制,通常由12位16进制数表示(前六位是厂商编号,后六位是流水线号):

3.广播

有了mac地址,同一网络内的两台主机就可以通信了(一台主机通过arp协议获取另外一台主机的mac地址)

ethernet采用最原始的方式,基于MAC地址广播的方式进行通讯,即计算机通信基本靠吼。

 pc1按照上图格式以广播的方式发送以太网包给pc4,然而pc2,pc3,pc5都会收到,大家都受到pc1发来的包,拆开后发现目标mac如果不是自己就丢弃,如果是自己就响应

  • 网络层: 负责地址管理和路由选择引入一套新的地址用来区分不同的广播域/子网,这套地址即网络地址。有了ethernet、mac地址、广播的发送方式,世界上的计算机就可以彼此通信了,问题是世界范围的互联网是由一个个彼此隔离的小的局域网组成的,那么如果所有的通信都采用以太网的广播方式,那么一台机器发送的包全世界都会收到,这就不仅仅是效率低的问题了,这回事一种灾难。

 世界大网络是由一个个彼此隔离的局域网组成,以太网包只能在局域网内发送,一个局域网是一个广播域。 以太网的广播包只能在一个广播域内发送,跨广播域通信只能通过路由转发。

  • 传输层: 负责两台主机之间的数据传输。传输层的由来:网络层的ip帮我们区分子网,以太网层的mac帮我们找到主机,再通过端口来标识主机上的应用程序。端口即应用程序与网卡关联的编号。传输层功能,建立端口到端口的通信,补充:端口范围0-65535,0-1023为系统占用端口。传输层的两种协议,TCP和UDP。
  • 应用层: 负责应用程序间沟通。比如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层的。

与OSI七层模型各层的对应关系:

网络传输基本流程

同一时段两台主机进行文件传输:

同局域网的两台主机通信

首先需要清楚的是,同一个局域网内的主机是可以进行直接通信的,因为最初局域网的设计目的就是让局域网内的主机能够进行通信。

其实局域网内的主机直接进行通信,并不像我们看到那样,例如应用层,直接可以通过FTP协议传过去,而是当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装,具体步骤如下:

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

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

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

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

数据包封装和分用

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

下图为数据封装的过程:

 下图为数据分用的过程:

什么是报头?

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

数据的封装与解包:

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

报头与有效载荷 

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

因为每一层的协议实际上只关心数据中与当前层对应的报头信息,而剩下信息的具体内容根本不必关心,我们将数据中除当前层的报头以外的数据叫做“有效载荷”。

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

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

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

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

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

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

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

网络协议栈的每一层都可能会对应多种协议,即便将报头与有效载荷分离了,那当前层应该将有效载荷交付给上层对应的哪个协议呢?

实际在每种协议的报头当中,几乎都会包含一个字段,表明我们应该把分离出来的有效载荷交付给上层的哪个协议,这就是分用的过程。

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

在一个局域网当中,除了当前正在进行通信的A主机和B主机以外,还有其他的主机,那A主机是如何将数据成功发送给B主机的呢?

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

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

什么是碰撞? 

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

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

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

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

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

也就是说,主机实际是能够通过某种方式,知道曾经发送出去的数据是否发生了碰撞的。

发生碰撞后是如何处理的?

当一个主机发现自己发送出去的数据产生了碰撞,此时该主机就要执行“碰撞避免”算法。“碰撞避免”算法实际很简单:当一个主机发送出去的数据产生了碰撞,那么该主机可以选择等一段时间后,再重新发送该数据。这就像现实生活中的两个人同时想要说话,此时对方就都会说“你先说吧”,这实际上就是一种碰撞避免。

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

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

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

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

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

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

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

跨网络的两台主机通信

跨网络的两台主机通信

上面说的都是同一局域网内的主机之间的通信,那跨局域网的两台主机之间是如何进行通信的呢?

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

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

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

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

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

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

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

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

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

屏蔽底层的差异

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

这种类似的技术还有:

  • 虚拟地址空间:屏蔽了内存之间的差别,让所有的进程看到的都是同一块内存,并且这块内存的布局都是一样的。

网络中的地址管理

认识IP地址

  • IP地址:IPV4、IPV6,uint32_t类型,总共不到43亿个IP地址,用于在网络中唯一标识一台主机。
  • IP地址的组成:网络号 + 主机号
  • 网络号:是一个网络的标识,俗称网段
  • 一个网络中所分配的IP地址都会带有这个网络的标识,这样可以保证每个网络的网络号不同,即可以保证它们分配的IP地址不同
  • 主机号:是一个主机在一个网络中的标识
    一个网络中有很多主机,主机号就是用于在一个网络中标识不同的主机

网段的早期划分

  •  A:用于组建大型网络,高1位固定为0,7位网络号,24位主机号。网络号范围:0-127。IP地址范围:0.0.0.0-127.255.255.255。
  • B:用于组建中型网络,高2位固定为10,14位网络号,16位主机号。网络号范围:128.0 ~ 191.255。IP地址范围:128.0.0.0 ~ 191.255.255.255。如:128.1.0.0 ~ 128.1.255.255,这就是128.1这个网段所能分配的IP地址范围,这种网络可以容纳65536个主机。
  • C:用于组建小型网络,高3位固定为110,21位网络号,8位主机号。网络号范围:192.0.0 ~ 223.255.255。IP地址范围:192.0.0.0 ~ 223.255.255.255。如:192.168.1.0 ~ 192.168.1.255,这就是192.168.1这个网段所能分配的IP地址范围,这种网络可以容纳256个主机。

早期的这种划分方式造成了大量的IP地址浪费(大部分企业申请的都是B类网络),划分网络不够精细。

网络的现在划分

CIDR方案:使用子网掩码划分网络
子网掩码:uint32_t类型,由连续的二进制1组成
子网掩码和IP地址相与:可以得到当前网络的网络号
子网掩码取反:可以得到当前网络中的主机号范围。如子网掩码是255.255.255.0,则这个网络中的主机号范围:0 ~ 255

公网与私网

公网:我们经常所说的互联网

私网:一个私有的网络,仅限于内部通信

IP地址不够用:

  • DHCP动态地址分配
  • NAT网络地址转换(主要就是用于组建私网,私网中的主机要么只能内部通信,要么就使用统一一个对外的IP地址上网)

认识MAC地址

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

详细介绍,请看以下博客:

(62条消息) 对于MAC地址的认识,以及MAC地址和IP地址的区别,MAC地址和IP地址各起到什么作用?_马小超i的博客-CSDN博客_知道对方mac地址可以干嘛

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【网络篇】第一篇——网络入门基础 的相关文章

  • APB协议UVM验证环境的搭建

    APB协议UVM验证环境的搭建 一 编译文件 只需编译这两个文件即可 apb pkg sv 里面包含了 apb svh 即编译apb pkg sv这个文件的同时 也会编译所需要的所有的头文件 ifndef APB PKG SV define
  • 字节青训营第十三课之深入浅出RPC框架的笔记与总结.md

    基本概念 本地函数调用 函数调用完整过程如图 藏实际上编译器经常优化 参数和返回值少时直接将其存在寄存器 不需操作栈 直接online不需call 将a和b的值入栈 经函数指针找到calculate 进入函数取栈中值2和3赋给x和y 计算x
  • 【网络编程】【UDP】UDP协议介绍

    一 UDP介绍 UDP和TCP相比是截然不同的 是一个简单的传输协议 全称是用户数据包协议 User Datagram Protocol 是一个无连接协议 UDP不保证UDP数据报会到达其最终目的地 不保证各个数据报的先后顺序跨网络后保持不
  • 【基础计算机网络1】认识计算机网络体系结构,了解计算机网络的大致模型(下)

    前言 在上一篇我们主要介绍了有关计算机网络概述的内容 下面这一篇我们将来介绍有关计算机网络体系结构与参考模型的内容 这一篇博客紧紧联系上一篇博客 这一篇博客主要内容是 计算机网络体系结构与参考模型 主要是计算机网络分层结构 协议 接口 服务
  • 位置式和增量式PID控制

    PID控制是一个二阶线性控制器 定义 通过调整比例 积分和微分三项参数 使得大多数的工业控制系统获得良好的闭环控制性能 优点 a 技术成熟 b 易被人们熟悉和掌握 c 不需要建立数学模型 d 控制效果好 e 鲁棒性 通常依据控制器输出与执行
  • 蓝牙之八-HFP

    HFP 在调试安卓的HFP client时遇到了如下问题 其中有一个E提示 因为AT命令的错误 所有创建SLC失败 然后断开RFCOMM链接 表现出来的是已经配对的手机不停的断开重连 HFP协议 HFP Hands free Profile
  • 一文详解 RSA 非对称加密算法

    RSA加密算法是一种非对称加密算法 RSA是1977年由罗纳德 李维斯特 Ron Rivest 阿迪 萨莫尔 Adi Shamir 和伦纳德 阿德曼 Leonard Adleman 一起提出的 当时他们三人都在麻省理工学院工作 RSA就是他
  • SPI协议代码

    软件模拟SPI程序代码 文章目录 SPI协议简介 SPI接口介绍 SPI数据传输方向 SPI传输模式 通过两个单片机模拟SPI来加深理解 硬件连接方式 SPI模式 程序思路 主机C代码 波形 从机C代码 波形 概述 通过两个MCU STM3
  • protobuf介绍和语法

    目录 前言 语法 标识符 字段 字段类型 proto2和proto3区别 前言 Protobuf即Protocol Buffers 是Google公司开发的一种跨语言和平台的序列化数据结构的方式 是一个灵活的 高效的用于序列化数据的协议 与
  • 内网和外网的区别是什么?

    内网和外网的区别重要依据主要是判断它是不是与广阔的外界相连 内网和外网最大的区别 内网IP局域网 网线都是连接在同一个 交换机上面的 也就是说它们的IP地址是由交换机或者路由器进行分配的 而且每一个IP也是有所不同的 并且这些连接在同一个路
  • 网络数据管理协议(NDMP)--网络大典

    网络数据管理协议 NDMP 是一种基于企业级数据管理的开放协议 NDMP 中定义了一种基于网络的协议和机制 用于控制备份 恢复 以及在主要和次要存储器之间的数据传输 NDMP 第5版 结构基于客户机 服务器模型 文件备份管理软件用作客户机
  • OSI和TCP/IP

    OSI和TCP IP是两种不同的计算机网络协议体系 OSI协议体系 即开放式系统互联通信参考模型 Open Systems Interconnection 是一种抽象的理论网络体系结构 由国际标准化组织 ISO 制定 这个体系结构包括七层
  • IEC104协议的参数设置

    本文主要是IEC104协议的参数的定义及个人的理解 如有错误请指正 重要参数 104规约规定了两个参数K和W 其取值为1到32767 其中K表示发送方在有K个I格式报文未得到对方的确认时 将停止数据发送 W表示接收方最迟在接收W个I格式报文
  • openssl做HMAC实例(C++)

    1 HMAC简介 1 MAC Message Authentication Code 消息认证码算法 可以将其认为是含有秘钥的散列 Hash 函数算法 即兼容了MD和SHA算法 并在此基础上加上了秘钥 因此MAC算法也经常被称作HMAC算法
  • Apache License 2.0

    Apache License 2 0 是 Apache 软件基金会发布的开源软件许可证 它是一种宽松的 允许商用的许可证 适用于开源项目和商业项目 Apache 2 0 许可证是一个相对较新的版本 于2004年发布 取代了早期的 Apach
  • OSI网络结构的七层模型--网络大典

    OSI开放式系统互联模型是1984年国际标准化组织 ISO 提出的一个参考模型 此模型作为网络通信的概念性标准框架 使通信在不同的制造商的设备和应用软件所形成的网络上的进行成为可能 现在此模型已成为一個主要的结构模型用于计算机之间和网络间的
  • 计算机网络应用层协议分析总结

    1 应用层协议原理 1 1 网络应用程序体系结构 C S结构 有一个总是打开的主机称为服务器 它服务于来自许多其他称为客户机的主机请求 客户机主机既可能有时打开 也可能总是打开 C S结构之下 客户机之间不直接通信 服务器有固定的IP地址
  • verilog_串口实现

    verilog 串口实现 概述 先了解串口的基础知识 串口是怎样传数据的 什么是波特率 波特率怎么计算 说明 通过Verilog编写串口 通过逻辑分析仪与串口模块的对接来进一步了解串口的应用 文章目录 1 什么是波特率 波特率怎么计算 1
  • MQTT协议详解一

    首先给出MQTT协议的查看地址 http public dhe ibm com software dw webservices ws mqtt mqtt v3r1 html 当然也有PDF版的 百度一下 不过个人感觉还是官网上的字体和排版最
  • 协议茶馆:TLV 格式及编码

    本篇是多年前的存篇 出处不详 旧酒换新瓶 温故知新 有了新的理解 一 什么是 TLV 格式 几乎所有的通信都有协议 而几乎所有的需要在卡片和终端之间传送的数据 结构 都是 TLV 格式的 TLV 是 tag length 和 value 的

随机推荐

  • TCP洪水攻击(SYN Flood)的诊断和处理

    1 SYN Flood介绍 前段时间网站被攻击多次 其中最猛烈的就是TCP洪水攻击 即SYN Flood SYN Flood是当前最流行的DoS 拒绝服务攻击 与DDoS 分布式拒绝服务攻击 的方式之一 这是一种利用TCP协议缺陷 发送大量
  • postman 配置统一的ip地址

    1 建立个开发环境 编辑配置一个 base url 地址 2 在请求的地址中直接使用 base url 使用配置的地址 开启方便切换各个环境的地址ip 转载于 https www cnblogs com yangjiming p 93413
  • Windows10下python-pcl的安装步骤说明,亲测ok

    Windows10下python pcl的安装步骤说明 1 环境依赖 2 安装步骤 2 1 安装visual studio 2017 2 2 安装pcl并配置环境变量 2 3 编译python pcl并且导入moudle 2 4 验证安装成
  • 有点牛,10分钟把小程序直接迁移到APP

    大家好 我是北妈 0 没想到现在的APP都已经卷成这样了 最近一个朋友跟我吐槽他最近接手的一个APP项目 说现在的APP都想把自己从工具发展成平台 堆砌了各类形形色色的功能 然后如果APP一有点小问题或者增加一个小功能就需要发版迭代 同时代
  • Flask框架七:ORM操作MySQL(一)

    1 ORM基础操作 注意点 创建新表时必须写Base metadata create all 数据库中已存在这张表就可以不写 写了不会报错 代表将创建的 类 表映射到数据库中 如果数据库中已经存在这个表了 则不会改变表结构 如果后续操作有冲
  • AI绘画

    今天用Midjourney生成了质量极高的美少女武士后续会作为固定栏目来分享美图接下来请欣赏作品 提示词分享 1 an asian girl dressed in samurai style in the style of anime ae
  • (基于Python的毕业设计)微博舆情分析系统(附源码+论文)

    大家好 我是岛上程序猿 感谢您阅读本文 欢迎一键三连哦 目录 一 项目简介 二 系统设计 2 1软件功能模块设计 2 2数据库设计 三 系统项目部分截图 3 1管理员功能模块 3 2热搜数据 3 3热搜 四 论文目录 五 部分核心代码 4
  • 共阳极数码管与共阴极数码管联合使用来循环显示数字00-99。

    使用两个分立式数码管分别连接在P0和P2端口上 实现数字从00 99的循环显示 与上篇文章一样先查询一下共阴极与共阳极数码管数字0到9的数码表 共阴极数码管0 9的数码表 code int SEG CODE1 0x3f 0x06 0x5b
  • vue.config配置多个地址跨域

    本博客是本人在开发过程中遇到问题所积累下的经验 在前端想要实现跨域 在前端使用接口的时候 如果需要使用来源不同的接口 可以在vue config配置多个跨域 例如下面例子中的两个配置 一个是局域网内的接口 一个是部署在外网上的接口 在使用时
  • C练题笔记之:Leetcode-662. 二叉树最大宽度

    题目 给你一棵二叉树的根节点 root 返回树的 最大宽度 树的 最大宽度 是所有层中最大的 宽度 每一层的 宽度 被定义为该层最左和最右的非空节点 即 两个端点 之间的长度 将这个二叉树视作与满二叉树结构相同 两端点间会出现一些延伸到这一
  • Ubuntu22.04安装opencv4并配置VsCode

    一 安装Opencv 第一步 下载opencv 下载地址 https github com opencv opencv 第二步 解压安装 unzip opencv 4 6 0zip 第三步 安装编译文件 sudo apt get insta
  • shell文本去重

    shell文本去重 1 单个文件去重 2 两个文件的交集 并集 求两个文件的并集 求两个文件的交集 求两个文件的差集 3 两个文件合并 上下合并 左右合并 4 多个文件合并去重 1 单个文件去重 参考 https blog csdn net
  • SVN客户端TortoiseSVN基本使用方法步骤-初人指南

    本文将讲述SVN客户端TortoiseSVN基本使用方法步骤 模拟两个客户端与服务器之间的关系 操作包括 SVN commit 提交 SVN checkout 检出 SVN Update 更新 如上图所示 工作模式是 客户端从服务器中SVN
  • 神经网络 专业术语解释(Step、Batch Size、Iteration、Epoch)

    目录 1 名词解释 2 换算关系 3 举例说明 1 名词解释 Step 步 训练模型的步数 遍历学习一次训练集数据所需要的Batch数量 跟iteration一样 Batch Size 批尺寸 计算梯度所需的样本数量 太小会导致效率低下 无
  • oracle生成uuid函数

    sys guid
  • 抖音自媒体平台上最容易上热门的7大领域,你知道吗?

    抖音覆盖的内容领域日益广泛 因此 运营者在入驻抖音平台的时候不能过于草率 不能单纯地根据个人偏好来确定账号的运营方向 本文将主要介绍在抖音平台上最容易上热门的7大领域 以此来帮助运营者更好地进行账号的定位 接下来运营喵就和大家分享下 1 搞
  • 机器人学重点知识点总结

    机器人学重点知识点总结 坐标转换与机械臂运动学 雅克比矩阵 机械臂逆向动力学 牛顿欧拉递推 机械臂正向动力学 运动轨迹生成 动力学轨迹跟踪控制 这篇博客主要用来记录一下现代机器人学里面比较基础也比较重要的一些知识点 所有内容均仅仅记录是什么
  • [蓝桥杯][2013年第四届真题]幸运数

    题目 题目链接 题解 两种方法 DFS 模拟 先讲大佬的DFS 再讲我的模拟 分别对应代码1和代码2 代码3是根据大佬代码改进的我的模拟 推荐代码1和代码3 从幸运数字3开始每次都将 通过幸运数字更新过的数组中当前幸运数字的下一个数字 作为
  • 一文搞懂线性回归和逻辑回归

    1 线性回归 Linear Regression 1 介绍 线性回归是机器学习中最基础 最经典的算法之一 它利用线性函数对一个或多个自变量和因变量之间关系进行建模 建模过程就是使用数据点来寻找最佳拟合线 线性回归分为两种类型 单变量线性回归
  • 【网络篇】第一篇——网络入门基础

    计算机网络背景 网络发展 认识 协议 初识网络 网络协议初始 协议分层 OSI七层模型 TCP IP五层 或四层 模型 网络传输基本流程 同局域网的两台主机通信 跨网络的两台主机通信 网络中的地址管理 认识IP地址 认识MAC地址 计算机网