计算机网络基础(一)


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


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)我们来模拟一下 加报头的过程:

在这里插入图片描述

  • 先得填入报头的数据:
my_hdr hdr;
hdr.str =0X1;
hdr.des =0X2;
hdr.typr =0X3;
hdr.len = 0X4;
  • 然后利用 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. 结尾语

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

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

动名词

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值