
🎬 个人主页 :道尔柯南
❄专栏传送门 :《C语言》《C++》《Linux操作系统》
昙花一现,却等待了整个白昼;蝉鸣一夏,却蛰伏了好几个四季。
文章目录
- [1-> 计算机网络背景](#1-> 计算机网络背景)
-
- [1.1 网络发展](#1.1 网络发展)
- [1.2 初识协议](#1.2 初识协议)
- [2-> 常见模型](#2-> 常见模型)
-
- [2.1 OSI七层模型](#2.1 OSI七层模型)
- [2.2 TCP/IP五层(或四层)模型](#2.2 TCP/IP五层(或四层)模型)
- [2.3 再识协议](#2.3 再识协议)
-
- [2.3.1 为什么要有TCP/IP协议?](#2.3.1 为什么要有TCP/IP协议?)
- [2.3.2 TCP/IP协议与操作系统的关系](#2.3.2 TCP/IP协议与操作系统的关系)
- [2.3.3 究竟什么是协议?](#2.3.3 究竟什么是协议?)
- [3-> 网络传输基本流程](#3-> 网络传输基本流程)
-
- [3.1 局域网](#3.1 局域网)
-
- [3.1.1 MAC地址](#3.1.1 MAC地址)
- [3.1.2 解包和分装](#3.1.2 解包和分装)
- [3.2 跨网络传输](#3.2 跨网络传输)
-
- [3.2.1 认识IP地址](#3.2.1 认识IP地址)
- 结尾
1-> 计算机网络背景
1.1 网络发展
网络的发展是一段深刻改变人类社会的历程,通常可以分为以下几个关键阶段:
-
萌芽与诞生(1960s-1970s)
源于冷战时期的军事需求。1969年,美国ARPANET(阿帕网)成功连接 四所大学,标志着计算机网络诞生。核心突破是分组交换技术,让数据能被拆分传输,而非占用整条线路。1974年,TCP/IP协议被提出,为不同网络互联奠定了通用规则。
-
互联网成形与普及(1980s-1990s)
1983年,ARPANET全面启用TCP/IP,被视为现代互联网的真正起点。1989年,蒂姆·伯纳斯-李发明了万维网,让普通人能通过浏览器和超链接轻松上网。1990年代,互联网开始商业化,门户网站、搜索引擎和电子邮件逐渐走入大众生活。
-
移动互联网与Web 2.0(2000s-2010s)
智能手机和3G/4G网络让上网从PC扩展到随身设备。Web 2.0强调用户生成内容,催生了博客、社交网络、视频平台等。人们从"读网"变为"写网",社交、电商、移动支付等深刻重塑了生活方式。
-
万物互联与智能时代(2010s至今)
5G、云计算、物联网和人工智能推动网络向万物互联发展。网络不再只连接人,也连接设备、汽车和城市。同时,网络安全、数据隐私和数字鸿沟也成为重要议题。
总体趋势:从军事科研到商业民用,从固定到移动,从连接人到连接万物。网络已像水电一样成为社会基础设施,而它的下一站,可能指向更沉浸的虚实融合与更智能的普惠连接。
由上发展历史可知,最开始计算机之间是互相独立的。后续将多台计算机连接在一起后,完成数据共享。
局域网LAN: 计算机数量更多了,通过交换机和路由器连接在一起。
广域网WAN: 将远隔千里的计算机都连在一起。
所谓"局域网"和"广域网"只是一个相对的概念. 比如, 我们有"天朝特色"的广域网, 也可以看做一个比较大的局域网。计算机是人的工具,人要协同工作,注定了网络的产生是必然的。
1.2 初识协议
"协议"是一种约定。
计算机生产厂商有很多;
计算机操作系统, 也有很多;
计算机网络硬件设备, 还是有很多;
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来, 约定一个共同的标准, 大家都来遵守, 这就是网络协议;
所以, 完善的协议, 需要更多更细致的规定, 并让参与的人都要遵守。
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司。
协议分层:协议本质也是软件,在设计上为了更好的进行模块化,解耦合,也是被设计成为层状结构的。
2-> 常见模型
2.1 OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
把网络从逻辑上分为了 7 层。每一层都有相关、相对应的物理设备,比如路由器、交换机;
OSI 七层模型是一种框架性的设计方法,其最主要的功能就是帮助不同类型的主机实现数据传输。
它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
OSI 七层从上到下依次是:
应用层 Application Layer
表示层 Presentation Layer
会话层 Session Layer
传输层 Transport Layer
网络层 Network Layer
数据链路层 Data Link Layer
物理层 Physical Layer
常见对应设备/协议简单记法:
物理层:网线、集线器、中继器
数据链路层:交换机、MAC 地址
网络层:路由器、IP、ICMP
传输层:TCP、UDP、端口
会话层:建立/管理/终止会话
表示层:加密解密、压缩、编码转换
应用层:HTTP、FTP、SMTP、DNS 等
口诀常见有:"物数网传会表应" 。
其实在网络角度,OSI定的协议7层模型其实非常完善,但是在实际操作的过程中,会话层、表示层是不可能接入到操作系统中的,所以在工程实践中,最终落地的是5层协议。
2.2 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都叫它的下一层所提供的网络来完成自己的需求。
物理层 :负责光/电信号的传递方式。比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层。
数据链路层 :负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层。
网络层 :负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(Router)工作在网络层。
传输层 :负责两台主机之间的数据传输。如传输控制协议(TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层:负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。我们的网络编程主要就是针对应用层。
补充梳理(TCP/IP五层模型核心对应):
物理层:比特流传输,设备:集线器(Hub),介质:网线/光纤/电磁波
数据链路层:数据帧传输,设备:交换机(Switch)/网卡,标准:以太网/WLAN
网络层:地址与路由,设备:路由器(Router),协议:IP
传输层:端到端可靠传输,协议:TCP/UDP
应用层:应用程序通信,协议:HTTP/SMTP/FTP/Telnet等

物理层我们考虑的比较少,我们只考虑软件相关的内容.因此很多时候我们直接称为TCP/IP四层模型.
一般而言
对于一台主机,它的操作系统内核实现了从传输层到物理层的内容;
对于一台路由器,它实现了从网络层到物理层;
对于一台交换机,它实现了从数据链路层到物理层;
对于集线器,它只实现了物理层;
但是并不绝对.很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发);
2.3 再识协议
2.3.1 为什么要有TCP/IP协议?
首先,即便是单机,你的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA,IDE,SCSI等。只不过我们感知不到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少。
其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议咯。
所以,为什么要有TCP/IP协议?本质就是通信主机距离变远了
什么是TCP/IP协议?
TCP/IP协议的本质是一种解决方案 → 解决网络长距离通信
TCP/IP协议能分层,前提是因为问题们本身能分层
2.3.2 TCP/IP协议与操作系统的关系

有的主机上面安装的操作系统可以不同,事实也就是不同。但是所有的主机上面的协议栈必须按照标准进行相同的实现。这就是为什么不同的主机,可以互相通信的秘密。
传输层最著名的协议就是TCP
网络层最著名的协议就是IP
而传输层(TCP)和网络层(IP)两层必须实现在内核中,无论OS再怎么不同,这部分大家必须遵守协议,必须一样。
TCP和IP既然是核心,把这个协议整体统称为TCP/IP不过分吧
2.3.3 究竟什么是协议?
OS源代码一般都是用C/C++语言写的

问题:主机B能识别data,并且准确提取a=10,b=20,c=30吗?
回答:答案是肯定的!因为双方都有同样的结构体类型struct protocol。也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有"共识",能够识别对方发来的数据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双方都认识的结构化的数据类型 (协议就是约定好的结构体)
因为协议栈是分层的,所以,每层都有双方都有协议,同层之间,互相可以认识对方的协议。
3-> 网络传输基本流程
3.1 局域网
3.1.1 MAC地址
每台主机在局域网上,要有唯一的标识来保证主机的唯一性:mac地址。
MAC地址用来识别数据链路层中相连的节点;
长度为48比特位,即6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19)
在网卡出厂时就确定了,不能修改。mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址,可能会冲突;也有些网卡支持用户配置mac地址)。

以太网中,任何时刻,只允许一台机器向网络中发送数据 → 以太网本质就是共享的资源。
如果有多台同时发送,会发生数据干扰,我们称之为数据碰撞。
所有发送数据的主机要进行碰撞检测和碰撞避免,没有交换机的情况下,一个以太网就是一个碰撞域。
局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标mac地址判定
3.1.2 解包和分装
初步明白了局域网通信原理,再来看同一个网段内的两台主机进行发送消息的过程:

其中每层都有协议,所以当我们进行上述传输流程的时候,要进行封装和解包。

主机之间通信:我们必须认识到,本质是两个协议栈在通信。
报头部分,就是对应协议层的结构体字段,我们一般叫做报头 。
除了报头,剩下的叫做有效载荷
故,报文 = 报头 + 有效载荷
然后,我们在明确一下不同层的完整报文的叫法:
- 不同的协议层对数据包有不同的称谓,在传输层叫做段 (segment),在网络层叫做数据报 (datagram),在链路层叫做帧(frame).
- 应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。
- 首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。
- 数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的"上层协议字段"将数据交给对应的上层协议处理。
在网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进行向上交付。
3.2 跨网络传输
3.2.1 认识IP地址
IP 协议有两个版本,IPv4 和 IPv6。这篇博客,凡是提到IP协议,没有特殊说明的,默认都是指 IPv4。
-
IP 地址是在 IP 协议中,用来标识网络中不同主机的地址;
-
对于 IPv4 来说,IP 地址是一个 4 字节,32 位的整数;
-
我们通常也使用"点分十进制"的字符串表示 IP 地址,例如 192.168.0.1;用点分割的每一个数字表示一个字节,范围是 0 - 255;
跨网段的主机的数据传输,数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器:

为什么要去目标主机,先要走路由器? 目的IP的意义

结合封装与解包,理解路由器解包和重新封装的特点:

对比IP地址和Mac地址的区别
• IP地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)
• Mac地址一直在变
• 目的IP是一种长远目标,Mac是下一阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据。
提炼IP网络的意义和网络通信的宏观流程:

IP网络层存在的意义:提供网络虚拟层,让世界的所有网络都是IP网络,屏蔽最底层网络的差异
结尾
uu们,本文的内容到这里就全部结束了,道尔在这里再次感谢您的阅读!
|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ### 道尔柯南 C/C++ & Linux 底层探索者 | 一个正在努力学习的技术博主 *** ** * ** *** 👀 【关注】 跟随我一起深耕技术领域,见证每一次成长。 ❤️ 【点赞】 让优质内容被更多人看见,让知识传递更有力量。 ⭐ 【收藏】 把核心知识点存好,在需要时随时查、随时用。 💬 【评论】 分享你的经验或疑问,评论区一起交流避坑! 不要忘记给博主"一键四连"哦! "今日目标达成!" |
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主"一键四连"哦!