Linux —— 网络基础(一)
一、概要
本篇打算从宏观的角度,先去整体的理解一遍整个关于网络的基本知识和架构,并不具体的细谈其中的详细知识,是从一个初学者对网络最基础的了解去切入,也算是为后续的深入学习做准备。
(ps:本篇很多概念都是比较简陋的,目的是先对网络建立一些粗糙的理解,概念可能并不全面和准确,只是为了后续的学习进行的铺垫和简单认识。)
二、协议分层
1. 什么是协议?
协议就是我们共同遵守的一套标准和准则,网络的目的是为了让不同的机器能够实现远距离的通信,为了实现这个通信,我们需要制定一套共同的标准。
2. 什么是协议分层?
协议分层就是我们为了实现远距离的、不同机器之间的通信,我们需要设计合理的模式去解决这个过程中遇到的问题,例如如何远距离传输、如何定位到其他的主机等等,这些问题我们需要去解决,并且将相关性强的部分放到一起去解决,实现高内聚、低耦合的设计模式。
2.1 OSI七层网络模型
OSI七层网络模型是称为开放式系统互联参考模型,是一个逻辑上的定义和规范,它把网络从逻辑上分成了7层,每一层都有各自的核心功能,也有相对应的各种物理设备。
OSI七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输,它最大的优点是将服务、接口、协议三个概念明确的区分开来,通过七个层次化的结构模型使得不同的系统不同的网络之间实现可靠的通讯;
2.2 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
OSI七层模型的设计是非常完善且符合逻辑的,但在实际设计中,但在实际应用中过于复杂,实现起来难度较大。而 TCP/IP 五层模型则更加简洁实用,能够更好地满足实际网络通信的需求。
实际就是把会话层、表示层和应用层统一简化成了应用层
物理层: 负责光/电信号的传递方式. 比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决 定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层.
数据链路层: 负责设备之间的数据帧的传送和识别. 例如网卡设备的驱动、帧同步(就是说从网线上检测 到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太 网、令牌环网, 无线LAN等标准. 交换机(Switch)工作在数据链路层.
网络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规 划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层.
传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标 主机.
应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问 协议(Telnet)等. 我们的网络编程主要就是针对应用层.
3. 网络协议分层与操作系统体系结构的关系
这里的应用层指的一般就是各种APP啊、各种封装后的计算机语言啊等等,用户更多的指对计算机应用技术进行开发的一批人,也可以指一般用户,但我们默认这里的用户泛指程序员一类的人
传输层和网络层是位于操作系统的文件管理系统部分的,Linux下一切皆文件,网络设备,网络资源也可以被看做为文件进行管理,但又由于其特殊性,单独成为一门学科去深入学习
数据链路层对应的则是驱动那部分,物理层对应硬件设备部分的设计
三、网络传输的基本流程
1. 同一个局域网
(1)每一层,都会把上层交付给自己的数据(上层的报头和有效载荷),作为自己的有效载荷
(2)每一层都有自己的协议报头
(3)每一层都会将自己拿到的有效载荷进行封装,并把自己的报头一起传输给下一层
(4)在逻辑上,我们只需要关注同一层之间的通信,例如我作为用户在用户层发送的信息,其它层并不关注该信息,而只有同在用户层的对方,才关注我传递的信息,各个层都只关注自己层的信息
(5)同层协议,能够互相认识对方的报头,这是因为彼此之间是相同的协议!
(6)基于此,我们认为协议报头至少需要基本两个功能,一是将报头和有效载荷进行分离,二是能够将有效载荷交给上层的具体的某种协议
(7)左边自上往下为封装,右边自下往上的行为为解包和分用
2. 跨路由器的两个子网
同样的,在跨网络(子网)的网络通信中,我们这里同样是每一层将自己的协议报头和有效载荷进行封装,根据IP地址去找到目的主机,而MAC地址可以认为是设备的地址,在整个过程中IP地址是不会变的(源IP地址和目的IP地址),而MAC则可以认为是当前设备的地址和下一个要去的设备地址(源MAC地址和目的MAC地址),这里由于要跨网络实现信息交流,我们是根据IP地址去找到那个唯一的目的主机,而MAC地址的作用就是在进行跨网络的时候,需要通过其他的设备机器去中转,这个MAC地址就是去标记这一个个设备的地址
这是我对跨网络传输的一个简单浅显的理解,可能存在错误或者偏差,但目前先这样简单的有个印象,下面是较为详细的,对上述理解的补充和纠错
在跨网络(子网)的网络通信中:
- 当数据包在网络中传输时,网络层根据 IP 地址进行路由决策,确定数据包从源主机到目的主机的最佳路径。这个路径可能会经过多个路由器和不同的网络。
- 数据链路层使用 MAC 地址在直接相连的两个网络节点之间进行数据帧的传输。每个网络接口都有一个唯一的 MAC 地址,它在本地网络中用于标识设备。
- 当数据包从源主机出发时,源主机通过 ARP(Address Resolution Protocol,地址解析协议)查询目的 IP 地址对应的 MAC 地址。如果目的主机在本地网络中,ARP 可以直接找到目的主机的 MAC 地址;如果目的主机在不同的网络中,ARP 找到的是本地网络中的默认网关(通常是路由器)的 MAC 地址。
- 数据包在传输过程中,每经过一个路由器,路由器都会根据数据包的目的 IP 地址进行路由选择,并修改数据包的源 MAC 地址为自己的出接口 MAC 地址,目的 MAC 地址为下一跳设备的 MAC 地址。
- IP 地址在整个跨网络通信过程中确实保持不变,它是逻辑地址,用于在整个网络中唯一标识一个主机。而 MAC 地址在不同的网络段之间会不断变化,它是物理地址,用于在本地网络中标识设备。
不能简单地认为 MAC 地址只是当前设备的地址和下一个要去的设备地址。MAC 地址在本地网络中用于直接连接的设备之间的通信,但在跨网络通信中,它也起到了在不同网络设备之间逐跳传输数据帧的作用。并且,MAC 地址不仅仅是为了中转,它也是数据链路层进行通信的重要标识。
3. 网络中的地址管理
3.1 IP地址
IP协议有两个版本, IPv4和IPv6,接下来我们提到的都默认是IPv4
(1)IP地址是在IP协议中,用来标识网络中不同主机的地址
(2)对于IPv4来说,IP地址是一个4字节,32位的整数
(3)我们通常也用“点分十进制”的字符串表示IP地址,如 192.168.0.1 ;用点分割的每一个数字表示一个字节,范围是0~255;
3.2 MAC地址
(1)MAC地址用来标识数据链路层中相连的节点
(2)长度为48位,及6个字节,一般用16进制数字加上冒号的形式来标识(例如:08:00:27:03:fb:19)
(3)在网卡出厂时就确定了,不能修改。MAC地址通常是唯一的
4. 网络中不同层对数据的称呼
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame)。
总结
本篇只是简单的建立一个关于网络的基本概念和框架,有很多概念上不太完整,只是自己为了自己在初入学习网络时的简单粗俗理解,方便后续深入的学习网络相关的知识,如果有需要纠错的地方,可以评论一起讨论。