• 计算机网络基础(一)



    前言: 本文主要带大家认识计算机网络,对其有一个初步的认识,有个大体的了解,所以基本是概念,没有实践的操作,不过后续的文章会有实践内容的。


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

    最开始计算机是如何进行数据通信的?就是人为的操作,就是用磁盘等存储介质(类似于现在的U盘),进行拷贝,从一个电脑拷贝到另一个电脑上,这样效率很低,这种模式被称为独立模式。

    然后,当时主要需要用计算机的还是实验室里用的较多,所以就搞了一个小规模的计算机通信,多台计算机连在一起,完成数据共享,这个可以想象一下 我们初中时上的微机课。

    在这里插入图片描述

    但是随着链接的主机越来越多,单纯的链接不足以满足需求,所以加入了交换机和路由器,从而扩大了可链接的范围,这被称为局域网。也就是说完成了 小片范围的网络通信。

    在这里插入图片描述

    最后呢?需要链入的人越来越多。就是加入了多个路由器,满足更多的人链接入网络。这形成了广域网。

    在这里插入图片描述

    这就是网络的发展,非常的delicious,但是还有一点要说明,局域网和广域网只是一个相对的概念,它并没有明确指出:有多少台 机子 联网是局域网,或者是广域网。这只是一个相对的概念。


    2. 网络协议初识

    2.1 协议的感性认识

    计算机之间通信用的是光电信号,用频率和强弱来表示 0 1 这样的信息,这就需要 约定好通信双方的数据格式。通俗一点来说:对传来的光电信号有一个 统一 的规范,假如传来一个光电信号,不能你看成一个int 我看成一个char ,必须都 看成一种类型的数据,才行。

    2.2 为什么要有协议

    协议本质就是一种约定,它的存在使得通信更加的高效。这有点 秦始皇统一语言 一样,统一语言之后,人们之间的通信更快了,高效,从而带动了发展。协议也是一样,不过是计算机之间通信做一些规范。

    这里可以举一个例子:

    假如我要给家长打长途电话,但是通话话费太贵,所以双方搞了点协议:

    • 响一下:我没钱了,给打点生活费
    • 响俩下:我想和母亲通话
    • 响三下:我想和父亲通话

    就类似这种,所以协议的本质就是约定。计算机协议是大佬程序员们定制的协议,它提高了通信的效率。

    2.3 网络协议栈

    上面呢 我们对协议有了一定的认识,那么操作系统中 网络协议是 怎样体现的呢?

    我先画一下操作系统的图:

    在这里插入图片描述
    首先 我们知道软件 是分层的,网络也是软件,所以网络协议栈是层状的结构。

    在这里插入图片描述
    网络就是以上图的方式 分布的,网络协议栈是TCP\ IP 贯穿 体系结构,属于操作系统的一部分:
    在这里插入图片描述

    3. 协议分层

    协议分层最大的好处在于封装,其次协议分层也完成了解耦。

    比如:人之间通信 这件事,以下 是两层协议

    在这里插入图片描述
    假如是老外 要用英语通信,那么只需要改一下 人之间的协议:

    在这里插入图片描述
    假如 之间通信要用 微信通信,那么 就改一下 底下的协议:

    在这里插入图片描述

    通过上面的例子,也许大家就能体会到 协议分层的好处。

    3.1 TCP/IP 五层协议模型

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

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

    也就是下图,对照着看:

    在这里插入图片描述

    3.2 协议分层具体体现

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

    4. 网络传输基本流程

    主机之间通信靠的是网络,其本质是一个软件,网络是如何完成数据传输呢?根据网络协议,完成网络传输。

    4.1 网络传输初识

    在这里插入图片描述

    就比如 上图,客户端要给服务端传数据,是如何传输的呢?

    数据可不能直接就从客户端传输到服务端,它需要被封装,怎么封装?是一层一层的往下封装,一个协议加一个报头,最后传到物理层也就是以太网上的是携带着多个报头的数据。

    在这里插入图片描述
    这个过程就是封装,然后还得解封,也就是 解包:

    在这里插入图片描述
    客户端自顶向下封装数据,服务端从下到上解包数据,然后就有一个奇怪现象,貌似每一层都是直接进行通信的,注意看 上图 每一层的数据格式都相同,这很巧妙。


    4.2 报头的理解

    4.2.1 为什么要有报头

    这个可以从邮寄快递这件事上去理解:假如我要从北京邮寄一个快递到张家口,一般情况下,不可能 商家用手直接给你扔过来,需要通过各个站点的邮寄:

    假如是下面这样的一个过程:
    在这里插入图片描述
    快递在邮寄中,是不是会有一个邮寄单子,这个快递单子就可以理解为报头。

    商家和用户之间虽然都知道自己的目的地,但是之间是如何流通快递,是不是得一步一步的来。

    在这里插入图片描述
    上面的过程就是封装的过程,也就是加报头的过程,加报头是为能够准确的传输到下一层,但是还有一个解包的过程,这个就不能联想上面的例子了。解包就是 将快递单子 一个一个撕掉。

    4.2.2 加报头和解包的过程

    报头是数据吗?是的,它是一种结构化数据。也就是一个结构体,而且用到了位段的知识,这里关于位段,就考验大家的C语言基础了。

    我自定义一个报头数据结构:

    struct my_hdr
    {
      int str:16;
      int des:16;
      int type:16;
      int len:16;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    (1)我们来模拟一下 加报头的过程:

    在这里插入图片描述

    • 先得填入报头的数据:
    my_hdr hdr;
    hdr.str =0X1;
    hdr.des =0X2;
    hdr.typr =0X3;
    hdr.len = 0X4;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 然后利用 memcpy或是memmove ,将报头加到数据的前面

    (2)再来模拟解包的过程:

    • 先用 void* ptr指针指向这个数据段

    在这里插入图片描述

    • 然后对 ptr进行强转,就可以访问报头中的数据

    在这里插入图片描述

    • 现在要解包,怎么操作?指针+1,是不是就跳过这个报头了?

    在这里插入图片描述
    对某个类型的指针+1,跳过的是这个类型的大小,也就是跳过了上面的那个报头。


    5. 加上路由器的网络传输

    上面的网络传输只是服务端与客户端两台主机的网络交流,只是帮助大家理解,但是网络传输并不是那么的简单。

    先拿局域网来说说:

    在这里插入图片描述
    这种情况下,我提一个问题:主机2和主机3可以接收到 带报头的数据吗?

    答案是当然可以,因为数据传输到物理层是以光电的形式,无法控制它具体传送到何处。就比如:一个教师里 老师说 李四你去一趟办公室。其它同学听到了吗?当然听到了,但是他们会有所行为吗?不会动的,因为这个信息不属于他们,李四也听到了,昂,就是叫我呢。所以李四出了教师。

    关键在于:这些主机怎么判断传出的数据 是给谁的?靠的是什么?给出两个概念 IP和MAC地址。后面讲这俩概念,现在就可以理解成 主机的名字。这俩货存在哪?存在报头种,也就是说:传来的带报头的数据,在每个主机中进行解包,发现 这个数据不是给我的,那我就不处理。是通过报头来判断的。


    5.1 网络传输中的互斥和同步

    还是上面的例子,如果有多个主机往物理层传数据,会发生什么?数据碰撞。它会导致 数据出现问题,那么就应该避免这个情况。

    多个主机共享网络资源(以太网),那么这个网络资源就是临界资源,它需要被保护,也就是说:任何时刻只允许一台主机在局域网中发送数据。这像不像 进程中的 互斥。进程互斥靠的是,局域网靠的是令牌环,也就是说 持有令牌的才能发送数据。

    但是 如果只有一个主机手持令牌,这就导致了其它主机的饥饿问题,所以还得怎么办?那就是需要同步呗。同步也是靠的令牌环,它不允许一台主机长期霸占令牌。

    在这里插入图片描述

    我画个通信的路线图:

    在这里插入图片描述

    有点潦草,但是我想表达的意思就是,数据经过路由器也是一个 加报头,解包的过程。

    其实聊点题外话:如果想要攻击局域网怎么办?那就是破环临界资源,怎么破环,不停的往局域网中发送数据,导致数据碰撞,是不是就完成了 攻击?


    5.2 广域网网络通信的示意图

    在这里插入图片描述

    6. 网络中的地址管理

    6.1 认识IP地址

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

    6.2 认识MAC地址

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

    6.3 总结

    对于以上地址,后续文章还会讲到,毕竟这是网络基础(一),没必要大彻大悟,咱们对网络个大概的认识,就达标了。

    IP地址:在通信中是不变的,在网络中标识唯一个一台主机。
    MAC地址:在通信中是变化的,而且是一直在变化。

    举个例子:

    唐僧取经,唐僧每到一个地方就对人说:我从东土大唐而来,前往西天取经。那么唐僧的IP地址就是 东土大唐,他的目的地IP地址就是 西天 。这是不变,走哪都这样说。

    然后,他到了具体的一个地方,他还得问 我该去向何处?也就是下一个站点是哪?人家可能说:你下一个地点就是女儿国。这个就是MAC地址,唐僧每到一个地方,它的MAC地址就会变化。


    7. 结尾语

    以上就是本期内容,有问题私信或者评论,感觉有帮助可以点个小赞。

  • 相关阅读:
    C语言程序设计笔记(浙大翁恺版) 第二周:计算
    Web3和低代码开发:下一代Web应用开发的合作与创新
    解决between and不包含有边界问题
    存关于nest js 相关的 文档项目
    Tilemap瓦片资源
    494.力扣每日一题6/30 Java(三种解法)
    python实现中缀表达式转后缀表达式
    “论大数据处理架构及其应用”写作框架,软考高级,系统架构设计师
    35 LRU缓存
    mysql存储过程实现 定时删除指定表中指定时间点的数据
  • 原文地址:https://blog.csdn.net/lyzzs222/article/details/127561312