【Linux网络】初识网络,网络的基础概念
前言:
上文我们讲到了对于线程安全与死锁问题的了解【Linux系统】线程安全与死锁问题-CSDN博客
本文我们来开启一个新篇章,计算机的网络部分学习,首先我们先来认识一下网络的基本知识。
网络的发展历史
网络的发展是从局部到整体的。
局域网诞生:网络最开始的诞生是在全世界中顶尖的实验室里,其目的就是为了数据的高效传输,当前这个网络只能在局部区域进行信息的传输。
局域网到广域网:随着科技的发展,一个个局域网在世界各地诞生。局域网与局域网之间也有了通信的需求,这就促进了广域网的诞生。漂亮国的国防部建立的阿帕网(ARPANET),用于军事通信,之后传遍了世界各地,成为首个国际互联网络。
在此基础上,随着科技的不断发展,网络技术也一直不断发展至今,直到我们如今看到的版本。
初识协议
我们可以将协议理解为大家都要遵守的“约定”
计算机之间的传输媒介是光信号、电信号。通过"频率"和"强弱"来表示0和1,这样的信息要想传递各种不同的信息,就需要约定好双方的数据格式。
谁制定协议
但是,仅仅是约定好协议就可以保证计算机之间可以正常通信了吗?
显然并不能,如果A用“频率”表示0和1,B用“强弱”表示0和1。那显然也不能正常通信,就好比我说中文,他说英文,都是遵照约定说的一样的内容,但是我们并不能理解对方的话。
所以想要无障碍的通信,需要更加完善的约定,并让参与进来的人都遵守。
而能够制定协议的无不是具有权威的组织或企业,例如:
组织名称 | 英文缩写 | 核心职责 | 代表性协议 |
---|---|---|---|
国际标准化组织 | ISO | 制定全球通用的信息技术标准,涵盖网络架构、安全、接口等 | OSI/RM(开放式系统互联参考模型,网络分层的基础框架)、ISO/IEC 7498(网络七层模型定义) |
互联网工程任务组 | IETF | 互联网最核心的协议制定组织,聚焦 TCP/IP 体系的协议设计与优化 | TCP(传输控制协议)、IP(网际协议)、HTTP/HTTPS(超文本传输协议)、DNS(域名系统)、DHCP(动态主机配置协议) |
电气和电子工程师协会 | IEEE | 侧重 “底层网络技术”(物理层、数据链路层),尤其是局域网和无线局域网 | IEEE 802.3(以太网协议,有线局域网核心)、IEEE 802.11(Wi-Fi 协议,无线局域网核心)、IEEE 802.1Q(VLAN 虚拟局域网协议) |
国际电信联盟电信标准化部门 | ITU-T | 由联合国主导,聚焦 “电信网络” 与互联网的融合,侧重长途通信、多媒体传输 | X.25(早期分组交换网协议)、ISDN(综合业务数字网)、H.264/H.265(视频编码协议,影响流媒体传输)、SDH/SONET(光纤传输协议) |
协议分层
协议分层的好处
协议其本质是一个软件,而协议分层,其目的为更好的模块化,解耦合。
协议的分层,可以让在修改协议的时候,只需要修改对应的模块即可。不需要整个协议一起修改的。
切换通信设备协议时,只需要变更通信设备上的协议即可。
切换语言协议时,只需要变更语言上的协议即可。
OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层模型,开放系统互连参考模型。
把网络设计成了7层,每一层都有相关的、相对应的物理设备,比如路由器,交换机等等。
OSI七层模型是一个框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整,通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。
从网络的角度上来看,OSI七层协议其实是非常完善的。但是在实际的操作过程中,会话层、表示层是无法与操作系统相结合的。所以最终工程落地下来就只有5层。
TCP/IP五层(或四层)协议
TCP/IP是⼀组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的网络来完成自己的需求
物理层:是网络的最底层,直接与物理传输介质(如网线、光纤、无线电波)交互,负责将二进制数据(比特流)转换为电信号、光信号或无线信号等物理信号进行传输,并定义物理接口的电气特性、机械规格等底层规则,仅关注信号的发送与接收,不涉及数据含义。
数据链路层:位于物理层之上,负责在相邻节点(如同一局域网内的设备)之间传输 “帧”(数据链路层的基本单位),通过封装帧头部(含源 / 目标 MAC 地址)和尾部(含校验码)实现数据标识与差错检测,同时通过介质访问控制(如以太网的 CSMA/CD)协调多设备对共享介质的使用,确保局域网内数据的可靠点对点传输。
网络层:其核心是实现跨网络的数据路由与转发,通过 IP 地址标识不同网络中的设备,借助路由协议(如 OSPF、BGP)计算从源网络到目标网络的最优路径,将传输层数据封装为 IP 数据报并转发,同时处理数据报的分片与重组,解决不同网络之间的通信问题,是实现广域网互联的关键。
传输层:负责 “端到端” 的可靠数据传输,通过端口号区分同一设备上的不同应用程序,将应用层数据拆分为适合传输的 “段”(TCP)或 “报文”(UDP)。其中 TCP 提供面向连接的可靠传输(支持重传、排序、流量控制),UDP 提供无连接的快速传输(不保证可靠性),满足不同应用对传输质量的需求。
应用层:是最上层,直接为用户应用程序提供服务,定义具体的通信规则与数据格式,如 HTTP/HTTPS 用于网页传输、SMTP 用于邮件发送、DNS 用于域名解析等,屏蔽底层传输细节,让应用程序专注于实现业务逻辑,是用户直接感知的网络服务接口。
物理层我们一般不考虑,只考虑软件层面的,所以我们有时也叫TCP/IP四层协议。
再识协议
通过上面的认识,我们对协议有了基本的概念。下面我再重新理解一下协议
为什么有TCP/IP协议
协议的存在:
即使我们的电脑不联网,不进行网络通信,计算机内部的各个硬件也是有协议的。比如:其他设备与内存的通信,要有内容协议;其他设备与磁盘通信,要有磁盘协议。只不过我们感知不到而已。
TCP/IP协议的存在:
而网络通信,其主要的变化就是通信距离变长了。而任何通信特征的变化,都会导致新的问题出现,而为了解决新的通信问题,自然也就有了新的通信协议:TCP/IP协议
所以TCP/IP协议的存在是为了解决网络通信的问题。
TCP/IP协议其本质就是一个解决方案,其中TCP/IP协议之所有能够分层,本质是因为对应要解决的问题可以分层!
TCP/IP协议如何与操作系统结合(宏观)
TCP/IP协议是分层的,实现这一块也是分成的:
物理层:就是底层硬件:网卡,再OS的底层硬件中
数据链路层:实现在OS的驱动程序中
网络层与传输层:实现在OS的操作系统内核中
应用层:实现在OS的上层,由用户实现
我们可以看到协议栈涉及了:底层硬件、驱动程序、操作系统以及用户,这就意味这要执行该协议就想要IT的各行各业都参与进来。而所有的操作系统都遵守这个协议,这也是为什么不同的操作系统之间可以相互通信的秘密!
TCP/IP协议名称的由来:
在这个协议中网络层最著名的协议叫做:IP协议;传输层最组名的协议叫做:TCP协议。所以就让TCP/IP协议代表了这个整体协议。
协议在代码上是什么东西
操作系统是由C语言主写的,而协议在代码上的实现其实就是一个特殊的结构体!
如图,主机A在传输层的数据,主机B在传输层可以识别这个数据吗?
当然可以!因为双方都有相同的结构体类型struct protocol,要传输的数据包含在这个结构体中。而协议的实现大家都是一样的,自然也就都认识这个结构体,从而获取数据!天然就具有“共识”。而能识别对方的数据信息,这不就是“约定”吗?
对协议的简单理解:就是通信双方都认识的特殊结构体!
因为协议的分层的,所以每层仅认识对应层的结构体。物理层认识物理层;数据链路层认识数据链路层....
网络基本传输流程
局域网传输流程
局域网有很多:以太网、无线LAN(既Wi-Fi)、令牌环网(已被以太网取代)....
局域网通信流程(以太网例)
首先,两个设备在同一个局域网中,是否可以之间通信?当然可以!
其次,每台主机想要的局域网通信的前提是,必须拥有标记主机的唯一性:mac地址!
认识MAC地址
mac地址是 “局域网内直接通信的设备” 在 “底层网络链路” 中的 “身份凭证”。
mac地址长48个比特位,既6个字节。我们通常用6个字节+冒号表示如:08:00:27:03:fb:19
mac地址在网卡出厂的时候就已经确定了,且不可更改。
但为什么硬件固定的 MAC 地址是数据链路层的标识?
因为数据链路层需要一个 “能精准定位硬件设备、且不会重复” 的标识,来完成 “局域网内直接传数据” 的任务—— 而 MAC 地址(出厂固定、硬件绑定、全局唯一)的所有特性,刚好完美适配这个需求。
假设现以太网中存在多个主机。
主机A想通过以太网将数据发送给主机E。发送的信息中包含了:发送主机mac地址与目标主机mac地址。
在局域网内所有主机都收到了这个信息,但是各个主机会解析这个信息是不是发给自己的。如果对比目标主机mac地址与自己的不一样,则说明不是发给自己的,会直接丢弃掉!最后主机E会收到这个信息。
从这里我们就会发现,在局域网中,信息是透明的!任何主机都可以收到。
总结在以太网中:
从这里我们就会发现,在局域网中,信息是透明的!任何主机都可以收到。 |
同一时间,只允许一个主机向以太网中发送信息。 |
如果有多态主机同时发送信息,会发生数据干扰,我们称作:数据碰撞。 |
所有要发送信息的主机,都会进行碰撞检测和碰撞避免(碰撞避免算法)。 |
在没有交换机的情况下,一个以太网就是一个碰撞域。 |
在局域网通信的过程中,主机对收到的信息是否给发自己,是通过目标主机mac地址判定的。 |
这时我们会发现,其实以太网是有临界资源属性的,碰撞检测与碰撞避免其实就是实现的互斥!
数据的封装、解包与分用
理解了局部网络的通信原理。我们再来看看在局部网络中,两个主机互发消息的原理。
如图。用户A与用户B想要通信,是依靠底层硬件:网卡来实现的。
用户A将信息通过一层层协议的“包装”贯穿了整个协议栈,将“包装”好了信息交给了网卡。通过局域网将信息传输给用户B的网卡,再向上一层层“解包”获取传递的信息。
详细过程如下:
每一层协议,都要对信息进行一层封装。解包也是在对应协议层一层一层的解开对应报头。不同主机都满足,这个协议只要在同层数据结构都是一样的。同层之间,都认为自己在和对方同层协议之间通信。
一个协议层对应的一个封装好了的信息,我们称作:报文。
报文 = 报头 + 有效载荷。
报头:就是对应协议层的结构体字段;有效载荷:除开报头的部分就是有效载荷。
细节一:
任何层的协议(不考虑应用层),其报头必须要做到可以与有效载荷分离;报头中必须包含,将有效载荷交付给上面具体的哪一层协议。
细节二:
底层网卡收到了报文,但是通过mac地址判断并不是发给“我”的,报文将在数据链路层被丢弃。
细节三:
我们通过观察报文一层层封装与解包的过程可以发现。封装时,报头一层层的封装在上层报文的前面;解包时,报头从最前面一层层解开。封装与解包的过程,就像是压栈与出栈!所有我们才会将其称为:协议栈。
认识每个协议对应完整的报文名称:
总结:
在网络传输的过程中,数据不是直接发送给对方的,而是先自上而下的将数据交付给下层协议,最后由网卡发送,然后对方在通过网卡接收,再自底向上进行解包,获取数据。
数据的分用:
跨网络传输流程
认识IP地址
IP地址有IPv4与IPv6两个版本,没有特殊说明,我们一般都是默认的IPv4
IP地址:
IP地址的作用是,在全球范围内,标记主机的唯一性(公网IP)。
IPv4指的是:IP地址长度为4字节,既32比特位。通常使用"点分十进制"的方式来表达IP地址,比如:192.168.0.1。一个点分隔一个字节长度,范围是0~255。
如图。使用IP地址 + 路由器,就可以实现跨网络的通信了!即使是两个不同的网络也可以无障碍通信。因为不论是什么网络都是遵循的同一个协议,这也是之间我们所说的协议分层的好处,底层的变动不会影响上层的协议。
当对比目标ip地址,发现当前这个报文并不是发送给当前这个局域网是,就会推送给路由器。通过路由器,在对应的局域网下寻找对应的主机(同一局域网下所有主机的 IP 地址第一个字节一定相同)
结合封装解包与mac地址,理解路由器重新解包和封装的过程。
详细步骤如下:
1. 用户A的上层(如应用层、传输层)将数据“你好”交付至网络层,网络层对其进行封装,生成IP数据报,其中源IP地址为用户A的IP(192.168.2.2),目的IP地址为用户B的IP(172.168.2.2),数据部分是“你好”。 |
2. 网络层的IP数据报被传递到数据链路层后,数据链路层将其封装为MAC帧。该MAC帧的源MAC地址是用户A的网卡地址(macA),目的MAC地址是路由器左侧接口的MAC地址(macLeft),因为数据需先发送至路由器,再由路由器转发到用户B所在网段,帧的数据部分包含了上述的IP数据报。 |
3. 用户A的网卡把MAC帧发送到局域网后,路由器的左侧接口(macLeft)接收到该帧,随后进行解包操作,剥离MAC帧的头部,从中提取出内部的IP数据报,此IP数据报的源IP为192.168.2.2、目的IP为172.168.2.2,数据是“你好”。 |
4. 路由器的网络层检查IP数据报的目的IP(172.168.2.2),发现该地址不属于当前的192.168.2.0网段,于是决定进行路由转发。接着,路由器的数据链路层对该IP数据报重新封装,生成新的MAC帧。新MAC帧的源MAC地址为路由器右侧接口的MAC地址(macRight),目的MAC地址为用户B的网卡地址(macB),帧的数据部分依旧是原来的IP数据报(源IP、目的IP、“你好”均未改变)。 |
5. 路由器右侧接口将重新封装的MAC帧发送到用户B所在的局域网,用户B的网卡收到该帧后,执行解包操作,剥离MAC帧的头部,提取出IP数据报。之后,通过“解包分用”的过程,IP数据报被依次向上交付到网络层、传输层,最终抵达应用层,从而完成了数据“你好”的接收。 |
通过上面的叙述,我们可以发现IP地址与mac地址的明显差异:
虽然IP地址与mac地址都是标示主机的唯一性。但mac地址仅在局域网中有效,在跨网络通信的过程中不断变化;IP地址始终没有变化。
可以理解为:IP地址是“最终目标”;而mac地址是“阶段性的目标”
网络 + IP的意义:给所有局部网络在外层套了一层“壳”,让所有网络都可以借助于IP地址进行交互,让世界上所有的网络都叫做IP网络!