当前位置:网站首页>网络基础入门理解

网络基础入门理解

2022-07-06 14:26:00 GSX_MI

一.体系结构中,网络的位置

1.通过生活中的例子理解

  • 我们平时在手机或者电脑上使用的APP都是在应用层运行的。当用户在应用层发起请求时 , 最终会下达给OS,OS内部有一个内嵌的软件协议栈,协议栈将用户的请求数据进行层层封包后,通过网卡将数据传递到网络当中,数据在网络内部经过各种路由转发,最终将数据传送到了目标服务器。
  • 目标服务器本身也是一台计算机,该计算机的操作系统就是Linux,而我们在访问目标服务器时使用的可能是Windows/安卓/IOS等操作系统。此外,对端服务器也有自己的协议栈,对端服务器将拿到数据通过协议栈进行各种解包操作后上交给应用层的服务软件,软件服务器内部对收到的用户请求进行各种分析处理后,再将对应的数据以相同的方式返回给用户

                 

2.网络协议栈各层在OS中的位置

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

                        
3.网络协议栈各层之间的功能 

  • 数据链路层和物理层 :  要实现通信我们首先要能够将数据发送出去,而数据链路层和物理层就是负责数据真正的发送过程的
  • 网络层:在数据链路层和物理层的支持下,现在能够将数据发送出去了,但是我们还应该知道数据应该往哪里发,而网络层完成的就是数据转发,解决了数据去哪里的问题。
  • 传输层 : 现在有了发送数据的能力,也知道数据应该往哪里发,但是我们并不能保证发出去的数据能够成功的到达对端主机,比如在传输过程中可能会出现丢包或对端主机关机,甚至对端服务器出错,导致数据传送出现问题。而传输层的工作就是处理传输时遇到的问题,主要是保证数据可靠性。
  • 应用层 : 网络协议栈的下三层能够保证把数据交付给对端主机,但现在我们还需要明确的是,我们将数据发送给对端主机的目的是什么,而这就是应用层要解决的问题。应用层需要根据特定的通信目的,对数据进行分析与处理,以达到某种业务性的目的。

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

                                

4.网络协议分层

(1)层状结构的本质:软件工程上面的解耦 

  • 层与层之间,只有接口的互相调动关系
  •  增加代码的可维护性和可拓展性

 (2)关于可维护性和可拓展性

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

                

                        

                

                

二.计算机网络发展的背景

1.网络发展

(1)独立模式: 计算机独立执行任务 

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

                                 

(2)网络互连: 多台主机连接在一起,数据共享

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

                                         

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

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

                                 

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

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

 

                                 

2.认识" 协议 " 

  • “协议”本质就是一种约定,通信双方只要曾经做过某种约定,之后就可以使用这种约定来完成某种事情。而网络协议是通信计算机双方必须共同遵从的一组约定,因此我们一定要将这种约定用计算机语言表达出来,此时双方计算机才能识别约定的相关内容。
  • 计算机想定义出协议本质就是一堆信息,以特定的结构组织起来,双方在通信时先发的信息叫做协议信息,—旦识别到协议信息就知道你想要干啥。
  • 计算机之间的传输媒介是光信号和电信号.通过"频率"和“强弱"来表示0和1这样的信息.要想传递各种不同的信息,就需要约定好双方的数据格式.
  • 所谓的约定最大的力量在与让所有人都认为这个约定是合理的,这样共识就形成了。我们把行业当中共同遵循的标准称之为网络协议。
  • 快递单就是—种协议 , 收到的快递是比实际物品多的,多的那一部分可以看做协议。
     

                                        

                        

三.网络协议初始

1.OSI七层模型

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

                          

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

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

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

                 

(1)一般而言:

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

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

                 

(2)面试:OSl和TCP/IP四层在层状结构上的差别?

OSI上三层压缩成一层应用层,其他的没差别。

 

(3)对于集线器(交换机)的补充: 

  •   对于集线器来说,他只是简单的把主机之间的线连接起来,并没做什么其他的处理,所以所有相连的主机将构成一个冲突域。这也就意味着:当一个主机在发送数据的时候,其他任何一个主机都不能再发送数据了,因为在一个介质上面两个同时发送会引起冲突。所以这是一种共享带宽的方式,代价就是冲突域变大.
  • 电磁信号在长距离传输过程中信号是会衰减的,而集线器的主要功能就是对接收到的信号进行再生整形放大,以扩大网络的传输距离,同时把所有节点集中在以它为中心的节点上。
  • 需要注意的是,集线器属于纯硬件网络底层设备,基本上不具有类似于交换机的“智能记忆”能力和“学习”能力,也不具备交换机所具有的MAC地址表,所以它发送数据时都是没有针对性的,而是采用广播方式发送,也就是说,当集线器要向某节点发送数据时,不是直接把数据发送到目的节点,而是把数据包发送到与集线器相连的所有节点。
     

                                

        

        

                         

四.网络传输的基本流程

1. 同局域网内两台主机通信

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

                         

(1)数据包的封装和分用概念

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

①封装

②分用 

 

                                 

(2)封装和解包具体过程

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

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

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

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

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

 (3)报头与有效载荷: 向下封装时,上层协议对数据进行进行封装成一个整体后交给下一层协议时,这个整体对于下层协议来说就是有效载荷.

(4)每一层协议都要能够做两件事: 

①如何将报头和有效载荷分离

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

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

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

                

②解包后交付给上层的那一个协议

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

                

(5)在同一个局域网内通信该局域网内的所有主机都能收到

①单对单通信

局域网相当于一个教室。每个人站起来说一句话所有人都能听见,张三和李四通话其他人也能听见。老师提问某个同学就相当于进行了一次网络通信(当然其他人也听到了但是没站起来);正在提问时有两个同学在讨论其他的话题我们彼此会有干扰(这叫数据碰撞),导致彼此之间谁都无法通信。会产生垃圾数据,被所有人识别,发送的主机会进行检测再发送(这叫局域网的碰撞检测);重新发的过程仍有可能发生碰撞,要避免碰撞,而且在不断的检测有没有人发。碰撞避免之后还有可能碰撞但是概率降低。

 ②单对多通信

广播:所有人都收到数据,都要进行处理,约定的广播地址。单对多
                        

(6)碰撞

  • 但同一局域网中的所有主机在通信时,使用的都是一个共同的通信信道,因此如果局域网内的多台主机同时进行通信,此时这些数据之间就可能会相互干扰。
  • 每一个局域网都可以看作是一个碰撞域,如果某个主机发送出去的数据与其他主机发送的数据之间产生了干扰,我们就称这两台主机在该碰撞域中发生了碰撞。

(7)主机实际是能够通过某种方式,知道曾经发送出去的数据是否发生了碰撞的 ; 一个局域网中数据越多越容易发生碰撞问题,就像一个教室就那么大,人越多碰撞就越多;底层有避免碰撞算法.

                

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

  • 在局域网中发送的数据实际叫做MAC数据帧,在这个MAC数据帧的报头当中会包含两个字段,分别叫做源MAC地址和目的MAC地址。
  • 每一台计算机都至少配有一张网卡,而每一张网卡在出厂时就已经内置了一个48位的序列号,我们将这个序列号称之为“MAC地址”,这个MAC地址是全球唯一的。
  • 在局域网中进行通信的时候,每一个主机在收到一个MAC数据帧后,都会提取该MAC数据帧的报头,找到对应的目的MAC地址与自己的MAC地址进行比对。如果该MAC地址与自己的MAC地址不匹配,则直接将该MAC数据帧丢弃,只有MAC地址匹配时,该主机才会将该数据帧的有效载荷继续向上进行交付处理。

 (9)如何划分碰撞域?
局域网中有个设备交换机,它的作用就是当我们的某一个片区发生碰撞,碰撞报文就不用再转发了,只会转发合法报文。

                
(10)知道原理之后如何黑掉局域网?
黑掉局域网的原理,我一直往局域网塞垃圾数据,任何一个数据发出来就和我碰。所有人的数据就都发不出去了,上层表现就是局域网已连接但是尚不可用。但是基于用户层向局域网塞垃圾数据,底层驱动有碰撞避免算法。但是有的可以避开Mac帧的碰撞避免算法。

                

2.跨网络的两台主机通信 

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

(1)使用两个不同的通信标准的局域网内主机如何通信 

 

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

②路由器的协议栈结构

                

③具体通信过程

当数据要从以太网的主机发送到令牌环网的主机时,在以太网中的主机封装发送到路由器,然后路由器从数据链路层到物理层进行解包在网络层拿到目的IP查找路由表,在网络层进行一系列数据分析后,再将数据向下交付给链路层,此时在链路层当中就会给该数据添加上令牌环对应的报头信息,然后再将该数据发送到令牌环网中,此时该数据就能够在令牌环网当中传输了。
 

④路由器为的转发

  • 一个路由器可能会连接多个局域网,当路由器需要将一个局域网的数据转发到另一个局域网时,路由器如何知道该数据应该转发到哪一个局域网的呢?
  • 路由器其实是通过IP地址来确定数据的转发方向的,因特网上的每台计算机都有一个唯一的IP地址,而在数据向下进行封装时,在网络层封装的报头当中就会包含两个字段,分别是源IP地址和目的IP地址。
  • 当路由器需要将一个局域网的数据转发到另一个局域网时,在路由器的链路层会先将数据的在当前局域网对应的底层报头去掉,然后将剩下的数据向上交付给网络层,此时在网络层就可以获取到该数据对应的目的IP地址,然后路由器就可以根据该IP地址在路由表当中进行查找,最终就能够确认该数据应该发送到哪一个局域网。

                 

⑤“屏蔽”底层差异

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

类似的技术还有:

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

                

                

                

                

五.网络中的地址管理

1.认识IP地址

  • IP地址是在IP协议中,用来标识网络中不同主机的地址。
  • 对于IPv4来说,IP地址是一个4字节,32位的整数。
  • 我们通常也使用“点分十进制”的字符串表示IP地址,例如192.168.0.1,用点分割的每一个数字表示一个字节,范围是0-255。
  • 需要注意的是,IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

2.认识MAC地址

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

3.IP vs MAC

两者的关系就像:唐僧取经

  • 从东土大唐->西天  :  从哪来到哪去   IP
  • 上—个地方->下一个地方  : mac地址
     

4.Linux中查看MAC地址

ifconfig  可以查看当前主机所对应的网卡信息 

云服务器上的MAC地址可能不是真正的MAC地址,该MAC地址可能模拟出来的。 

         


        

原网站

版权声明
本文为[GSX_MI]所创,转载请带上原文链接,感谢
https://blog.csdn.net/m0_52169086/article/details/125622463