• 网络基础(一)


    计算机网络背景

    网络发展

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

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

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

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

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

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

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

    在这里插入图片描述

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

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

    在这里插入图片描述

    认识协议

    “协议” 是一种约定.

    在这里插入图片描述

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

    • 如果code的值为1,则表示需要将data的值存储进数据库。
    • 如果code的值为2,则表示需要将data的值写入日志信息。
    • 如果code的值为3,则表示需要将data的值进行打印输出。
      -在这里插入图片描述

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

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

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

    不可以

    • 计算机生产厂商有很多;
    • 计算机操作系统, 也有很多;
    • 计算机网络硬件设备, 还是有很多;
    • 如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是 网络协议

    网络的位置

    操作系统除了进程管理、文件管理、内存管理、驱动管理之外,还有一个内嵌的软件协议栈

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

    目标服务器和对端服务器都有自己的协议栈

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

    在这里插入图片描述

    协议栈是网络标准组织定义的,是具有全球性质的,所有的操作系统都必须支持

    也就是说,虽然客户端和服务端可能使用的是不同种类的操作系统,但每个操作系统实现网络协议栈的方法包括各种细节都是一样的,因此双方对数据进行的封包和解包操作都是一样的。

    操作系统除了有四大管理模块,还与网络协议栈有密切的关系。

    网络协议栈主要负责数据的通信,其自顶向下可分为四层,分别是应用层、传输层、网络层、数据链路层。

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

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

    网络协议栈分层的目的

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

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

    网络协议初始

    协议分层

    协议分层的好处

    网络协议栈设计成层状结构,其目的就是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性。
    在这里插入图片描述

    OSI七层模型

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

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

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

    在这里插入图片描述
    在这里插入图片描述

    网络传输基本流程

    同一个网段内的两台主机进行文件传输.

    在这里插入图片描述

    同局域网的两台主机通信

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

    在这里插入图片描述
    当用户要将文件传输给另一台主机前,该文件数据需要先通过网络协议栈进行封装:

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

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

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

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

    数据包封装和分用

    在这里插入图片描述

    封装过程

    在这里插入图片描述

    数据分用过程

    在这里插入图片描述

    什么是报头?

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

    数据的封装与解包:

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

    有效载荷

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

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

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

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

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

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

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

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

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

    跨网络的两台主机通信

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

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

    在这里插入图片描述

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

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

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

    这种情况实际是由路由器来处理的,路由器是工作在网络层的一个设备,我们可以认为路由器当中的协议栈是下面这样的。
    在这里插入图片描述
    此时当数据要从局域网1发送到局域网2时,路由器收到局域网1的数据后,会先将以太网对应的报头进行解包,然后将剩下的数据向上交付给网络层,在网络层进行一系列数据分析后,再将数据向下交付给链路层,此时在链路层当中就会给该数据添加上令牌环对应的报头信息,然后再将该数据发送到局域网2当中,此时该数据就能够在令牌环网当中传输了。
    在这里插入图片描述

    网络中的地址管理

    认识IP地址

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

    需要注意的是,IP协议有两个版本,分别是IPv4和IPv6。IPv4用32个比特位来标识IP地址,而IPv6用128个比特位来标识IP地址。

    认识MAC地址

    • MAC地址用来识别数据链路层中相连的节点;长度为48位, 及6个字节. 一般用16进制数字加在上冒号的形式来表示(例如: 08:00:27:03:fb:19)
    • 网卡出厂时就确定了, 不能修改. mac地址通 常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可能会冲突; 也有些网卡支持用户配置mac地址).
  • 相关阅读:
    什么蓝牙耳机颜值高音质好?颜值高音质好的蓝牙耳机推荐
    CCNA-NAT协议(理论与实验练习)
    【vue2高德地图api】高德地图forEach批量添加marker点标记,点击获取item对象『全网最详细』【翻遍csdn总结】
    计算小于或等于n的非负整数区间包含的1的数量
    vue-elementPlus自动按需导入和主题定制
    队列的实现---超详细
    gRPC入门学习之旅(十)
    Linux:进程管理 | 进程创建 | 进程终止 | 进程等待 | 进程替换
    【LeetCode热题100】--55.跳跃游戏
    Python基础学习__测试报告
  • 原文地址:https://blog.csdn.net/weixin_74461263/article/details/138662228