文章目录
- 🌈 一、计算机网络的发展
- ⭐ 1. 独立模式
- ⭐ 2. 网络互联
- ⭐ 3. 局域网 LAN
- ⭐ 4. 广域网 WAN
- 🌈 二、计算机网络的协议
- ⭐ 1. 协议的概念
- ⭐ 2. 协议分层
- ⭐ 3. OSI 七层参考模型
- ⭐ 4. TCP / IP 五层模型
- 🌈 三、网络传输基本流程
- ⭐ 1. 同局域网的网络传输
- 🌙 1.1 局域网的通信原理
- 🌙 1.2 数据包封装和分用
- 🌙 1.3 报头与有效载荷
- 🌙 1.4 碰撞的概念
- ⭐ 2. 跨局域网的网络传输
- 🌙 2.1 路由器如何知道数据应该转发到哪一个局域网
- 🌈 四、网络中的地址管理
- ⭐ 1. 认识 IP 地址
- ⭐ 2. 认识 MAC 地址
🌈 一、计算机网络的发展
⭐ 1. 独立模式
- 在计算机发展的早期,计算机之间相互独立,这种情况的通信效率非常低下。
- 计算机之间如果想要进行业务协同,就需要将数据从一台计算机种拷贝到硬盘上,然后将硬盘中的数据再拷贝到另一台计算机。
⭐ 2. 网络互联
- 多台计算机通过服务器连接在一起,从而实现数据共享。
- 当某个业务需要多台计算机协同完成时,可以将共享的数据放到服务器中集中管理,各个计算机就能通过服务器获取这些共享的数据。
⭐ 3. 局域网 LAN
- 需要通信的计算机数量变的更多,这些计算机通过交换机和路由器连接在一起,形成局域网。
- 交换机:局域网中有一种叫做交换机的设备,其主要用于完成局域网内的数据转发工作。
- 数据转发:在局域网内将数据从一台主机转发给另一台主机。
- 路由器:各局域网之间通过路由器连接起来,其主要用于完成数据的路由转发工作。
- 路由转发:在局域网之间路由器根据路由信息,将数据包从一个局域网转发到另一个局域网。
⭐ 4. 广域网 WAN
- 广域网的作用是,将远隔千里的计算机都连接在一起。
- N 个局域网之间通过路由器相互连接在一起,就形成了一个更大的网络结构,这个网络结构被称为广域网。
- 局域网和广域网是一种相对的概念,因为某些懂得都懂的原因,也可以将国内的广域网看成一个比较大的局域网。
🌈 二、计算机网络的协议
⭐ 1. 协议的概念
- 协议本身是一种约定,通信双方只有通过同一种协议才能进行通信。
- 从语言的角度看,协议是通信双方都认识的一种结构化的数据类型,双方的 OS 能通过同一种协议 (结构体) 进行通信。
struct protocol
{
int a;
int b;
int c;
};
- 假设当前有如上这么一个协议 (结构体),因为主机 A、B 的操作系统都是用 C/C++ 写的,并且都有相同的
struct protocol
结构体类型。 - 也就是说 A、B 使用了同样的代码来实现协议,这两台主机天然就具备着共识,能够识别出这个协议中的信息。
⭐ 2. 协议分层
- 协议栈是分层的,每层通信双方都有协议,同层之间互相可以认识对方的协议。
- 将协议栈设计成层状结构,其目的是为了将层与层之间进行解耦,保证代码的可维护性和可扩展性。
- 分层最大的好处在于 “封装”,在分层的情况下,将某层的协议进行替换后,通信双方之间并不会受到影响。
- 纯软件的网络协议分为四层,每一层都能解决一种因为网络通信距离变长时所产生的问题。
每一层都能解决一种因为网络通信距离变长时所产生的问题
- 应用层:解决如何使用送达的数据的问题。
- 传输层:解决报文在传输过程中出现错误,或者丢失的问题。
- 网络层:解决在转发中,如何进行路径选择、目标主机定位的问题。
- 数据链路层:解决如何保证将数据交给下一跳主机的问题。
⭐ 3. OSI 七层参考模型
- OSI 七层网络模型被称为开放式系统互联参考模型,是一个逻辑上的定义和规范。
层级 | 层名 | 功能 | 常用协议 |
---|---|---|---|
7 | 应用层 | 针对特定应用的协议 | HTTP、FTP、SMTP、POP3 |
6 | 表示层 | 设备固有数据格式和网络标准数据格式的转换 | LPP、NBSSP |
5 | 会话层 | 通信管理、负责建立和断开通信连接,管理传输层以下的分层 | SSL、TLS、DAP、LDAP |
4 | 传输层 | 管理两个结点之间的数据传输,负责可靠性传输 | TCP、UDP |
3 | 网络层 | 地址管理与路由选择 | IP、ICMP、RIP、IGMP、OSPF |
2 | 数据链路层 | 互联设备之间传送和识别数据帧 | 以太网、网卡、交换机、PPTP |
1 | 物理层 | 以 0 / 1 代表电压的高低和灯光的闪灭,界定连接器和网线的规格 | 物理线路、光纤、中继器、集线器、双绞线 |
⭐ 4. TCP / IP 五层模型
-
OSI 参考模型和它的名字一样,仅供参考。
-
因为 OSI 七层网络模型实现起来难度很高,对其具体实现进行了调整,将 OSI 的上三层合并成一个应用层,就成了常见的 TCP / IP 模型。
1. TCP / IP 中各层负责的功能
- 物理层:负责 光 / 电 信号的传递方式,物理层的能力决定了最大的传输速率、传输距离、抗干扰性等,集线器 hub 工作在物理层。
- 数据链路层:负责设备之间的数据帧的传送和识别,例:帧同步、冲突检测、差错校验等,交换机 switch 工作在数据链路层。
- 网络层:负责地址管理和路由选择,路由器 router 工作在网络层。
- 传输层:负责两台主机之间的数据传输,如传输控制协议 TCP,该协议能够确保数据可靠的从源主机发送到目标主机。
- 应用层:负责应用程序间的沟通,平时的网络变成主要就是针对应用层进行。
2. TCP / IP 模型名字的由来
- 网络层最典型的协议是 IP 协议,传输层最典型的协议是 TCP / UDP 协议。
- 传输和网络这两层本质上,位于操作系统的内核中,用户想使用协议栈,本质就是要使用操作系统,因此这个模型才被叫做 TCP / IP 协议。
🌈 三、网络传输基本流程
- 以两台主机之间的文件传输为例,在纯软件方面,TCP / IP 模型各层对应的协议如下:
层级 | 纯软件的 TCP / IP 层级名 | 常见协议 |
---|---|---|
5 | 应用层 | HTTP、FTP、DNS |
4 | 传输层 | TCP、UDP |
3 | 网络层 | IP、ICMP、IGMP |
2 | 链路层 | 设备驱动程序及接口卡 (网卡) |
⭐ 1. 同局域网的网络传输
- 在最初设计局域网时,就是为了能够让局域网内的主机能够进行通信,因此同局域网内的主机可以直接进行通信。
🌙 1.1 局域网的通信原理
- 局域网中的每台主机都有一张网卡,每张网卡都有一个唯一 的 MAC 地址,局域网中的主机就是通过 MAC 地址进行通信的。
- 局域网中,A 主机向 B 主机通信采用的是 MAC 地址 + 广播的方式,该局域网中的其他主机都能听到 A 的消息,但因为 A 所指定的 MAC 地址是 B 主机的的,因此其他主机会丢弃 A 的通信消息,只有 B 会接收这段消息。
🌙 1.2 数据包封装和分用
- 用户 A 想和用户 B 进行通信时,用户 A 的消息并不是直接通过主机 A 的应用层直接交给主机 B 的应用层。
- A 的数据要依次通过应用层、传输层、网络层、链路层,在每一次对数据进行封装之后,才能将数据通过主机 A 的链路层发给主机 B 的链路层。
- 用户 B 想收到消息,主机 B 的链路层需要将收到的数据包依次通过链路层、网络层、传输层、应用层,在每一次对数据进行解包分用之后,用户 B 才能看到用户 A 的消息。
1. 数据包封装
- 当应用层想将一段数据交给另一个主机时,TCP / IP 软件方面的 4 层协议从上至下要分别对该数据包进行封装。
- 将数据交给应用层,应用层会为该数据添加上对应的应用层协议的报头信息,然后将数据交给传输层。
- 传输层收到数据后,传输层会为该数据添加上对应的传输层协议的报头信息,然后将数据交给网路层。
- 网络层收到数据后,网络层会为该数据添加上对应的网络层协议的报头信息,然后将数据交给链路层。
- 链路层收到数据后,链路层会为该数据添加上对应的链路层协议的报头信息,到此数据彻底封装完毕。
- 最后就可以通过局域网将封装好的数据发送给对端主机。
2. 数据包分用
- 当对端主机的链路层收到一段数据包后,需要由下至上经过 TCP / IP 的 4 层,对该收到的数据机型解包和分用。
- 链路层收到数据后,将数据包中关于链路层协议的报头信息分离出来,然后将剩下的数据交给网络层。
- 网络层收到数据后,将数据包中关于网络层协议的报头信息分离出来,然后将剩下的数据交给传输层。
- 传输层收到数据后,将数据包中关于传输层协议的报头信息分离出来,然后将剩下的数据交给应用层。
- 应用层收到数据后,将数据包中关于应用层协议的报头信息分离出来,到此数据的解包分用彻底完成。
🌙 1.3 报头与有效载荷
-
报头:本质也是一种数据,报头一般是通过位段实现的,协议栈的每一层都有一个对应的位段来表示当前层的报头。
-
有效载荷:数据包中,除了当前曾的报头以外的数据就叫做有效载荷。
如何分离报头与有效载荷
- 要将数据中的报头取出来,就得知道报头与有效载荷之间的界限在哪。
- 又因为报头往往都在数据包的最前端,只要知道报头的大小,就可以确定报头与有效载荷的界限了。
- 有两种获取报头大小的方式
- 定长报头:报头的大小是固定的,发送方和接收方都能够知道报头的大小,这就是一种约定。
- 自描述字段:报头当中提供一个用来表示报头长度的字段。
🌙 1.4 碰撞的概念
- 局域网中,同时有多台主机在发送数据,如果某个主机发送的数据与其他主机发送的数据之间互相干扰,这种情况被称为数据碰撞。
1. 如何判断发送的数据是否发生了碰撞
- 因为是采用广播的形式将数据发送到局域网中,当 A 主机发送数据后,A 主机自己也能收到这个数据。
- 当 A 主机收到数据后,可将其与之前发送出去的数据进行对比,如果此时收到的数据和之前发送的不一致,就说明发生了数据碰撞。
2. 发生了碰撞后该如何处理
- 当 A 主机发现自己发送的数据产生了数据碰撞后,A 主机可以选择等待一段时间,过一阵子在重新发送该数据。
- 从系统的角度看,局域网就是临界资源,碰撞的检测和避免,本质上就是在进行互斥访问。
3. 主机如何判断数据是否是发送给自己的
- 发送出去的数据包会带有源 MAC 和目的 MAC 地址,其中源 MAC 地址表示的是发送数据的主机,目的 MAC 地址就不用说了。
- 主机在收到数据包后,会对比该数据包中的目的 MAC 地址和自己的 MAC 地址,如果不一致则该数据就不是发给自己的。
⭐ 2. 跨局域网的网络传输
-
局域网之间通过路由器连接起来,因此一个路由器至少能够横跨两个局域网。
-
而这些被路由器级联局域网都认为,该路由器就是本局域网内的一台主机,因此路由器可以和这些局域网内的任意一台主机进行直接通信。
-
假设局域网 1 中的 A 主机想和局域网 2 中的 主机进行通信,A 主机就可以先将数据发送给路由器,然后路由器再将数据转发给局域网 2 当中的 B 主机。
🌙 2.1 路由器如何知道数据应该转发到哪一个局域网
- 路由器会通过 IP 地址来确定数据的转发方向,互联网中的每一台主机都有一个唯一的 IP 地址,而在数据自定向下进行封装时,在网络层封装的报头中会包含两个字段,分别是 源 IP 地址和目的 IP 地址。
- 源 IP 地址和目的 IP 地址分别标识从哪来和到哪去,在数据转发的过程中,所持有的IP 地址不会改变。
- 网络中有很多的路由器,数据在每经过一个路由器时,路由器都会分析这个数据的上一站从哪来,然后根据这个数据包中得目的 IP 地址,选择这个数据下一站该到哪去最终才能走到目的地,这个一直会变得地址就是 MAC 地址。
- IP 地址的意义就在于路径选择,只要有了目标,途中的路由器就能够为数据包指定越来越靠近目的 IP 地址的下一站路由器。
🌈 四、网络中的地址管理
⭐ 1. 认识 IP 地址
- IP 地址处在 IP 协议中,用来标识网络中唯一的一台主机。
- 对于 IPV4 来说,IP 地址是一个 4 字节,32 位比特的整数。
- 对于 IPV6 来说,IP 地址是一个 16 字节,128 位比特的整数。
- 通常会使用 “点分十进制” 的字符串来标识 IP 地址。
Linux 中如何查看自己的 IP 地址
- 在 Linux 的命令行中,可以输入
ifconfig
指令查看当前主机的配置信息,其中 inet 对应的就是当前主机的 IP 地址。
⭐ 2. 认识 MAC 地址
- MAC 地址用来识别链路层中相连的结点,用来表示上一跳路由和下一跳路由。
- 每张网卡上的 MAC 地址都是唯一的,不能被修改。
- MAC 地址的长度一般为 6 字节,48 位比特,一般用 16 进制 + 冒号的形式标识 (如:08:00:27:03:fb:19) 。
Linux 中如何查看自己的 MAC 地址
- 在 Linux 的命令行中,可以输入
ifconfig
指令查看当前主机的配置信息,其中 ether 对应的就是当前主机的 MAC 地址。
用来识别链路层中相连的结点,用来表示上一跳路由和下一跳路由。
- 每张网卡上的 MAC 地址都是唯一的,不能被修改。
- MAC 地址的长度一般为 6 字节,48 位比特,一般用 16 进制 + 冒号的形式标识 (如:08:00:27:03:fb:19) 。
Linux 中如何查看自己的 MAC 地址
- 在 Linux 的命令行中,可以输入
ifconfig
指令查看当前主机的配置信息,其中 ether 对应的就是当前主机的 MAC 地址。