💓博主CSDN主页:麻辣韭菜💓
⏩专栏分类:Linux初窥门径⏪
🚚代码仓库:Linux代码练习🚚
🌹关注我🫵带你学习更多Linux知识
🔝
目录
前言
了解网络发展背景 , 对局域网 / 广域网的概念有基本认识 ;了解网络协议的意义 , 重点理解 TCP/IP 五层结构模型 ;学习网络传输的基本流程 , 理解封装和分用 ;
1. 网络发展
1.1 背景
在20世纪60年代,由于美苏之间的冷战,苏联发射的人造地球卫星Sputnik,惊呆了美国佬。美国国防部高级研究计划局(ARPA)启动了一个名为ARPANET(阿帕网)的项目,目的是创建一个分散的、抗毁性的通信网络。
1969年,一个标志性的时刻到来,加州大学洛杉矶分校(UCLA)的计算机科学家们成功地通过ARPANET(阿帕网)发送了第一条信息——尽管只是两个字母"LO"。但这标志着一个新时代的开始。
随后,互联网的发展开始加速。1974年,文顿·瑟夫(Vint Cerf)和罗伯特·卡恩(Robert Kahn)提出了传输控制协议(TCP)和互联网协议(IP),这两个协议成为了后来互联网通信的基础。到了1983年,ARPANET正式采用了TCP/IP协议,这标志着现代互联网的真正开始。
1989年,一个名叫蒂姆·伯纳斯-李的年轻科学家在瑞士的欧洲核子研究组织(CERN)工作时,提出了万维网(WWW)的构想。他发明了世界上第一个网页浏览器,使得互联网变得更加易于访问和使用。1991年,第一个网页向公众开放,互联网开始向更广泛的用户群体开放。
90年代,随着互联网的商业化,门户网站、搜索引擎和电子邮件服务开始兴起。然而,2000年的互联网泡沫破裂给这个行业带来了沉重的打击。许多公司倒闭,但一些幸存者,如谷歌、亚马逊和腾讯,后来成为了互联网的巨头。
进入21世纪,随着智能手机的普及和4G网络的发展,移动互联网迅速崛起。社交媒体、在线购物、移动支付等应用开始深入人们的日常生活。微信、Facebook和Twitter等平台的出现,进一步改变了人们的沟通和分享方式。
今天,互联网已经成为全球数几十亿人生活中不可或缺的一部分。它不仅是信息的海洋,更是创新的沃土。从最初的军事通信网络到全球信息高速公路,互联网的故事还在继续,每个人都是这个伟大故事的参与者和见证者。随着5G、人工智能和物联网等新技术的发展,互联网的未来充满了无限的可能。
1.2 类型
如果按照 网络区域 进行划分,可以分为 局域网 LAN
和 广域网 WAN
局域网 LAN
如果连接的计算机多了,那么就需要用到路由器和交换机
广域网 WAN
将远隔千里的计算机都连在一起
![](https://i-blog.csdnimg.cn/direct/3e7b94644d4f4d88802141786d524696.gif)
2. 认识“协议”
2.1 什么是协议?
“协议”就是一种约定。
我们在现实中面对面的交流,双方之间的话音是非常的清晰的,如果是距离变远,双方之间的听到的声音就会越来越不清晰。在网络中同样面对远距离传输时,也会面临着相同的问题,在传输的过程中,由于距离的变远,导致数据丢失,这就要求我们必须要定制一些“约定”,而这个约定就是所谓的 TCP/IP协议。
计算机生产厂商有很多,操作系统也有很多,计算机硬件设备生产商也很多,不同设备凭什么能够相互连接?
就好比你的手机是苹果,张三的手机是华为,两台不同牌子、不同操作系统、不同硬件设备的手机,为什么微信上能够相互通信?
答案是必须有人站出来,定制一系列的约定。各各生产商都遵守这些约定。当协议被定制出来后,拥有一定的用户基础之后,后序的诞生的生产商也必须遵守协议。如果不遵守,就会被市场抛弃,所以就会倒逼这些生产商共同遵守,网络连接的环境也就逐渐完善了。
有杠精就会想,我们凭什么要用他们定制的协议?我们自己搞不可以?
对对对,你自己搞的协议能和微信互通吗?答案是不能互通,那行,我不用微信。但是这里有个问题,你能保证自己不用微信,但是你能保证你的家人、同事、朋友不用微信吗?
就算上面的条件都成立,你搞出来的协议。其实和TCP/ IP协议也差不多。这也是为什么华为5G先出来。后面的人都遵守原因。
2.2 协议分层
网络传输数据,不仅仅只有数据丢失的问题,还有很多的问题。下面我们以快递的例子来说明这些问题。
我们淘宝购物,买家是如何知道要发给谁?,在这个过程中确保快递不会被丢失,
精准发送到下一个站点,最后确定买家收到快递。对于卖家就三个关心的问题。发给谁? 快递丢了怎么办? 确定买家收到快递。
到这里就完了吗?我们还有买家啊。我们收到快递,并不关心这个快递,我们关心的是快递里面的商品。这里对于买家来说那就是如何使用商品。
同理对于两台计算机通过网络发送数据,也是一样。
1.如何处理发来的数据?
2.长距离传输数据丢失的问题
3.如何定位主机问题
4.如何保证数据精准到达下一个设备
如何解决这些问题?
我们以打电话为例子
可现实真的是如此吗?
真实的情况是我们是和电话机在沟通。
A讲的话传输到电话B中,电话B和电话D之间进行数据传输,最后电话D传输给C。
这样我们就分为了两层。一个是语言层,一个是通信设备层。这样做的好处就可以做到高内聚低耦合
为什么这么说,如果是电话改为手机,那么我们只需要改变电话机协议,变成手机协议。
同理我们语言从汉语改为英语,只需要改语言层。
2.3 OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
2.4 TCP/IP五层(或四层)模型
前面不是说,协议不是7层吗?怎么又变成了5层?其实对于我们计算机专业的来说是4层。物理层这一层,全是硬件我们了解就好了。
开发人员在使用 OSI
七层模型 的过程中,应用层、表示层、会话层 可以合为一层 这是因为出于设计原则、性能、安全和灵活性的考虑,OSI模型的会话层和表示层通常不直接集成到操作系统内核中。应用层,加上剩下的四层,也就是变成了五层模型
物理层 : 负责光 / 电信号的传递方式 . 比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆 (现在主要用于有线电视 ) 、光纤 , 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器 (Hub) 工作在物理层 .数据链路层 : 负责设备之间的数据帧的传送和识别 . 例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作 . 有以太网、令牌环网, 无线 LAN 等标准 . 交换机 (Switch) 工作在数据链路层 .网络层 : 负责地址管理和路由选择 . 例如在 IP 协议中 , 通过 IP 地址来标识一台主机 , 并通过路由表的方式规划出两台主机之间的数据传输的线路( 路由 ). 路由器 (Router) 工作在网路层 .传输层 : 负责两台主机之间的数据传输 . 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机.应用层 : 负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议(Telnet )等 . 我们的网络编程主要就是针对应用层 .物理层我们考虑的比较少. 因此很多时候也可以称为 TCP/IP四层模型.一般而言对于一台主机 , 它的操作系统内核实现了从传输层到物理层的内容 ;对于一台路由器 , 它实现了从网络层到物理层 ;对于一台交换机 , 它实现了从数据链路层到物理层 ;对于集线器 , 它只实现了物理层 ;
这里就一个很关键的问题,我们之前所学操作系统和TCP/IP5层模型(网络协议栈)有什么联系?
为什么要这样设计?
网络接口管理: 操作系统负责管理网络接口,包括无线和有线接口。它通过驱动程序与硬件通信,实现数据的发送和接收。
协议栈实现: OS实现了网络协议栈,通常是TCP/IP模型,包括IP、TCP、UDP等协议。这些协议定义了数据如何封装、地址、路由和传输。
套接字(Socket)抽象: OS提供套接字编程接口,允许应用程序通过标准化的方法进行网络通信。套接字是应用程序与网络协议栈交互的抽象层。
网络文件系统: 操作系统支持网络文件系统(如NFS、SMB/CIFS),允许用户和应用程序访问远程文件系统就像访问本地文件系统一样。
这也就完美契合了Linux下一切皆文件的思想。当然还有其他的比如网络安全、网络配置和解析等等。
那window 、MacOS 、安卓 (Android)也是这样的吗?
答案是:必须是这样的。网络协议栈,都是协议了。所有的OS都必须按照TCP/IP协议来,这也是为什么大家不同的系统能够快乐的通信。
最后我们在看这个图就能看懂。
3. 网络传输
在没有网络的前提下,同处在一个局域网中,是可以直接通信的。以前我们玩的DOTA、CS、魔兽等。
再比如,现在的电视机很恶心。手机上腾讯视频VIP和电视机上VIP并不互通,要在电视机上放VIP电影。如果不想在电视机上开VIP,那么我们可以选择手机投屏。为什么投屏要连接同一个WiFi?其本质还是一样,同一个WiFi也是局域网。让手机和电视机进行通信。
3.1 网络传输流程图
下面我们以微信聊天来举例我们发的消息是如何被对方收到
我们给对方发送“你好” 每一层都要有自己的报头,而这个报头就如同,快递单号上面的信息一样。
应用层将自己的 协议报头 与用户想发送的 信息 封装成一个 数据包,传给下一层,传输层将自己的 协议报头 与 数据包 封装成一个新的 数据包,传给下一层,不断重复,直到 数据包 来到对端主机网络中;链路层从数据包中分离出 有效载荷,向上交付,网络层同样需要分离出 有效载荷,向上交付,最终 有效载荷 为 客户端发送的 信息,成功交给了 服务器端
但是一个路由器不止只有我们的手机和电脑还其他人的。如何确定发送给对的主机 ?
每个手机和电脑都会自己的mac地址,唯一标识符 MAC
的方式无视不属于自己的信息,但是光有这个还不行,因为微信服务端并不在我们当前局域网中,还得有IP地址,我们网络中传输,mac地址会一直变,但IP地址不会变。所以要精准定位。
这里有mac地址会变有点抽象,我们在地址哪里再讲。
这里路由器是如何工作的?
路由器拿到数据包后会进行解包,将 以太网报头 拆掉,然后分析 IP
报头,规划该数据包的路径,得知需要将此数据包交给 微信服务端,加上 令牌环报头 后把数据包丢入令牌环网络中,等待 微信服务端 截取 (令牌环网就是所谓LAN)
注释:令牌环有点像线程里的锁一样,谁拿令牌,谁才能发报。
3.2 数据包封装和分用
数据包封装(Encapsulation)
封装是指在发送数据时,将应用层数据转换为适合网络传输的格式的过程。这个过程在OSI模型的不同层级依次进行:
-
应用层:数据的起点,用户生成的数据首先在这里被转换成特定的应用协议格式(如HTTP, FTP等)。
-
传输层:添加传输层信息,如TCP或UDP头部。这些头部包含了端口号、序列号等信息,用于确保数据的可靠传输和正确排序。
-
网络层:添加IP头部,包含源IP地址和目的IP地址,确保数据包能够被路由到正确的目的地。
-
数据链路层:添加以太网头部和尾部,包括源MAC地址、目的MAC地址以及错误检测信息(如CRC校验)。
-
物理层:最后,数据以比特流的形式在物理媒介上传输,如通过电缆或无线信号。
封装过程是逐层向下进行的,每一层都会添加特定的头部信息,直到数据在物理层作为电信号或光信号传输。
数据包分用(Decapsulation)
分用是封装的逆过程,发生在接收端。当数据包到达目的地后,接收设备需要逐层向上解析数据包,去除每一层的头部信息,直到恢复到最初的应用层数据:
-
物理层:检测物理媒介上的信号,并将其转换为比特流。
-
数据链路层:去除以太网头部和尾部,检查错误检测信息,确保数据的完整性。
-
网络层:去除IP头部,根据目的IP地址确定数据包是否到达正确目的地,如果不是,则丢弃数据包。
-
传输层:去除TCP或UDP头部,使用端口号确定数据包应该交付给哪个本地应用。
-
应用层:将剩余的数据传递给相应的应用程序,恢复成用户可读的格式。
从上面的流程图,我们可以得出一个结论:
每一层都认为双方是直接通信的。就像之前的说打电话一样。
为什么?这还是得益于协议分层,所带来的灵活性和独立性。也就是网络层(IP协议)屏蔽了底层网络的差异化,靠的就是路由器。IP现实了全球主机软件虚拟层,一切皆是报文。这也是为什么智能手机出来以后只需要改数据链路层,移动端也能和PC端进行通信
4.网络地址
前面我们讲网络传输,源主机和目标主机,通过Mac和IP地址 精准定位 使双方通信。但是路由器会把信息抛到公网中,这也就意味其他人也是能看到我们发的消息。也就是说你在网络上发的消息如同裸奔。下面我们用老师讲课例子
老师讲课 所有人都能听到,此时如果老师叫张三起来回答问题,其他人也能听到,但是只有张三站起来回答问题,其他人无视了老师话语。这里对于计算机来说,也是一样。主机A发的消息是发给主机E的。那么其他主机通过比对MAC地址,发现不是自己的 那么就会无视。而主机E的MAC地址和和主机A目标MAC地址是一样的。那么就会接收到消息。
但是平时我们也没有看到其他人之间聊天对话啊?
这时因为,我们的网卡在出厂时,只打开了正常模式,它还有混杂模式,混杂模式不管是不是发给我的,都接受。
4.1 IP地址
IP地址用来标识网络中不同主机的地址
IP地址一共两种:IPv4、IPv6两种,出现IPv6是因为IP地址不够用了,IPv4是无符号整型4字节。也就是32个比特位,无符号整型最大也就是42亿。全球80亿人,明显不够用了。IPv6是16字节,也就是128个比特位 可以使用的公网IP有2^127−1个。
以后物联网场景基本就是IPv6。智能家居、汽车、手表、机器人、无人机、火箭、飞机、太空飞船。等等
4.2 MAC地址
全称为媒体访问控制地址(Media Access Control Address),是网络设备的唯一硬件标识符。以下是MAC地址的一些关键特性:
- 理论上,每个网络接口卡(NIC)都有一个全球唯一的MAC地址。
一些设备和操作系统允许用户更改MAC地址,这种做法有时被称为“MAC欺骗”或“MAC伪装”。如果用户更改了MAC地址,那么原始的“理论上唯一”的属性就被破坏了。
- MAC地址通常由48位(6字节)组成,通常表示为12个十六进制数字,每两个数字一组,组之间用冒号(:)或破折号(-)分隔。
- 前24位(3字节)是组织唯一标识符(OUI),由IEEE分配给生产厂商。
- 后24位(3字节)是由厂商分配的,用于区分同一厂商生产的不同设备。
- MAC地址主要用于局域网(LAN)内的数据链路层,是交换机和网络接口卡进行以太网通信的基础。
4.3 IP与MAC的关系
这里我们就可以说清楚之前MAC地址为什么在跨网络传输数据时,MAC地址为什么会变。
IP
地址 与 MAC
地址 最大的区别在于:传输过程中,IP
地址不会改变,MAC
地址会改变,随着传输距离的增加,MAC
地址改变的次数也会增加
这里我们还是以快递举例子:
快递的发货地址、收货地址是确定的。(发货地址、收货地址等于IP地址)指导我们路径规划。但是我们在收到快递之前,快递的位置一直在变化。看下图
而这里集散(运转)中心就是确定上一站从哪里来,下一站到哪里去。集散(运转)中心就如同网络中的路由器。快递的地址会一直变化,变化依据就是快递要送到买家手里。所以我们主机MAC地址经过路由器的网卡发生了改变。路由器再发送给下一个路由器。最后一个路由器和目标主机处于同一个局域网时,就发送给了目标主机。
最后来个简单网络通信脉络示意图
如何查看本机IP和MAC地址?
Linux下:指令 ifconfig
window下: 指令 ipconfig
🌨️总结
我们最先了解网络发展历史,根据距离对话的例子,引出了协议概念,通过协议我们了解了OSI的七层模型、五层模型。通过案例解释了每层协议的作用,通过快递案例,理解了数据是怎么在网络中传输的,深刻理解了数据包封装和分用。从中我们知道了网络传输数据的是裸奔的,(没有安全性!!!),最后对IP和MAC地址概念有了清晰的了解。