• 【网络编程】- 背景知识


    目录

    1.网络互联的两种规模

    1.1 局域网LAN

    1.2 广域网WAN

    2.协议

     2.1 什么是协议

    2.2 协议分层

    3.封装和分用

    3.1 如何理解封装和分用


    1.网络互联的两种规模

    1.1 局域网LAN

    局域网,即 Local Area Network ,简称LAN。
    什么是局域网呢?
    把多个机器连接在一起,就构成了一个局域网。

     从上图可以看出来,机器之间两两相连是不靠谱的,没那么多网线,没那么多网口,成本很高!

    因为我们就发明了交换机和路由器,通过交换机和路由器完成多台机器之间的通信。

    交换机是把多个机器连接到一个 "局域网" 中了。

    1.2 广域网WAN

    路由器则是把多个局域网连接起来。在交换机和路由器的反复连接之下,就可以把很多的设备都连接在一起,使它们直接可以进行通信。当机器足够多的时候,就可以将其称为 "广域网" 。但事实上,局域网和广域网之间没有明确的界限。


    2.协议

     2.1 什么是协议

    简单来说,协议就是 "约定",通过一些约定,来表达一定的含义。

    举个例子,就比如相亲,男方和女方在没见过的情况下,要在约定的地点见面。万一当天相亲的人很多,并且约在附近的人也很多,就容易出现约错人的情况,于是就可以在来之前约定好 "暗号"。这个"暗号"就相当于这里的协议。

    网络上传输的数据,本质上是通过 光信号(电磁波) / 电信号(网线)来实现的,通过这两信号,就可以传输二进制数据了。在传输数据的时候,我们假设高低电频用 1 / 0 来区分,那么不同的 0,1 排列组合,表达的是什么信息,就需要通过 "协议" 来约定!!

    2.2 协议分层

    网络通信其实是一个非常复杂的过程,有很多问题,很多细节要处理。如果就使用一个协议,来解决所有问题,就会造成这个协议,复杂无比!!

    🍃1.于是聪明的程序猿就将协议拆分,把一个协议拆成多个协议。这就和我们平时写代码一样,一个类如果写的太复杂,我们就将其拆成多个类,一个方法如果写的太复杂,就将其拆成多个方法。

    🍃2.协议在拆分的过程中,程序猿们就发现,部分拆出来的协议,解决的问题都大致相同。因此,程序猿们就将这些协议分成很多类,每一层都有很多协议,这些协议做的工作都差不多,这就是写一分层!(类似于,我们的类定义很多的时候,为了方便管理,功能相似的类都放在同一个包下面)

    🍁协议分层的好处

    1.下层协议给上层提供服务,上层调用下层协议。起到了一个封装的效果,实现上层协议的人,不必考虑下层协议的细节。

    2.起到解耦合的效果,可以把同一层的协议替换成其他协议,对于其他层次的协议来说,基本无感知的(透明的)。结合下图理解

    🍁两种分层模式 

    1.OSI 七层网络模型。(只是理论上存在,实际上没有这么实现)

    2.TCP/IP 五层网络模型。

    这两种分层模式有很多相似之处,重点看一下第二种分层模式。

    🍃1.物理层:网络通信的基础设施。

    🍃2.数据链路层:两个相邻的结点之间如何传输。

    🍃3.网络层:两个点之间的路径规划。

    🍃4.传输层:两个点之间的通信。(不考虑路径规划)

    🍃5.应用层:数据传输过去之后,具体怎么使用。

     如何结合实例理解这五层模型??

    比如我在淘宝上买了一双鞋,下单后,卖家就把货通过快递发给我。

    🍃1.卖家在发货的时候,只需要考虑发件人(起点)和收件人(终点),这里的卖家就相当于传输层。

    🍃2.当卖家将货交到物流公司的手里时,物流公司就要规划好从那条路线走,成本最低,这里的物流公司规划路径就相当于网络层。

    🍃3.规划好路线后,就进行两个集散点的之间的运输,运输过程中既可以是通过飞机,也可以是汽车,具体咋运输的这个过程就相当于数据链路层。

    🍃4.运输可能走高速公路,也可以走普通马路,这里的高速公路,马路就相当于物理层。

    🍃5.最后货送到我手里的时候,我可能自己穿,我也可能卖给别人,怎么使用取决于我自己,这里的如何使用就相当于应用层。

    这五层模型中,只有应用层,是咱们自己写代码处理的。下面的四层,都是由操作系统以及硬件设备处理好的了。所以网络编程的主要工作,就是写应用层的代码,来处理应用层的协议数据。

    【经典面试题】

    我们知道了交换机和路由器的功能都是用来组建局域网,那么它们分别工作在什么层?

    交换机是工作在数据链路层。

    路由器是工作在网络层。

    (这里只针对经典的交换机和经典的路由器,实际上,当下的交换机和路由器功能都越来越强大了,彼此之间也有很多功能重叠了,甚至这些设备可能有一些传输层,应用层的功能)


    3.封装和分用

    封装和分用描述了网络是如何传输数据的。(注意这里的"封装"和面向对象的封装、继承、多态中的封装还不太一样)

    3.1 如何理解封装和分用

    例如我们使用QQ发送消息,主机 A 给主机 B 发送一条 "hello",看似一个很简单的发送过程,它背后其实要做的工作是非常多的。

    🍁封装

    1.首先,主机A 先到应用层(QQ应用程序),把用户输入的数据,整理成应用层数据报。相当于通过类似于"字符串拼接的方式",将其构造成更完整,信息更多的数据,再传输。(加报头都是通过类似字符串拼接的方式)

     接下来就需要把这个数据报交给传输层(操作系统内核)。

    2.传输层会根据当前使用的传输层协议,给应用层数据报,进行进一步的组装。假设现在使用 UDP 协议。(传输层的协议)

    组装好了之后,继续把这个数据报,交给网络层。

    3.网络层,主要使用的是 IP 协议,再进行进一步组装。

     这里组装好之后,再交给数据链路层。

    4.数据链路层,比如使用以太网协议,再进一步的组装。

     这样就构造了一个以太网的数据帧(本质上是一堆二进制序列)再把这个数据交给物理层。

    5.物理层,拿到数据之后,把这里的二进制序列,转化成 光信号 / 电信号,再把光电信号,发送出去即可。

    上述1,2,3,4,5 从上至下,依次添加报头的过程,就成为封装!!(这就好比,发一个快递,快递要套上恒多层包装一样)。

    🍁分用

    忽略中间的传输过程。当主机 B 收到上述数据的时候,做的工作就是封装的 "逆过程",称为 "分用"。每一层协议把对应的协议报头给解析出来,并且去掉报头。(类似于拆快递)

    1.物理层,把光电信号转换回二进制的数据,得到以太网的数据帧,如何交给数据链路层。

    2.数据链路层,去掉数据帧头和帧尾,把载荷去取出来,然后交给网络层。

    3.网络层,IP 协议解析出 IP 报头,并去掉报头,然后把载荷取出来,交给传输层。

    4.传输层,UDP 协议再进行解析报头,并去掉报头,把载荷取出来,然后交给应用程序。

    5.应用层,QQ应用程序再解析这里的信息,显示到界面上。

    上述过程体现出了,网络通信中,各个层次的协议是如何分配工作的。

    【补充】:

    上述的封装分用,不仅仅出现在主机上,也会出现在传输过程中,包括在交换机和路由器上。

     经典路由器是封装分用到网络层,经典交换机是封装分用到数据链路层。


    本篇博客就到这里了,谢谢观看!!

  • 相关阅读:
    MySQL主从同步
    flink-cdc同步mysql数据到hive
    基于SSM实现的儿童疫苗信息管理系统设计与实现毕业设计源码311930
    c-const修饰指针-day16
    【Python从入门到进阶】34、selenium基本概念及安装流程
    练习计划 05——这一天是这一年的第几天?
    离散数学 --- 二元关系 --- 序偶,笛卡尔积与关系的定义和表示
    vue自定义组件 事件修饰符 表单修饰符
    【论文阅读笔记】Explicit Visual Prompting for Low-Level Structure Segmentations
    yolov9 tensorrt推理结果全为None
  • 原文地址:https://blog.csdn.net/xaiobit_hl/article/details/126175575