目录
前言
1. 初识协议
协议分层
2. TCP/IP协议
OSI 七层模型
TCP/IP四层模型
为什么要有TCP/IP
TCP/IP的宏观理解
3.网络传输基本流程
3.1 局域网传输流程图 (以太网为例)
3.2 跨网络传输流程图
前言
完成了对操作系统的基础学习与部分实践,今天开始,博主将记录自己在网络部分的学习笔记。至于所有网络教材都有的“网络的发展历史”,此处不再过多阐释
基于我们已经构建好的操作系统体系,已经初步能理解各个线程进程如何在机器上跑起来或者相互通信等。现在,需要我们把各个机器的数据连接起来,而非一直只在本地环境下工作
只有太机器,串行工作效率太低!
我们需要通过 网络 来完成计算机的互联。
于是形成了局域网LAN(Local Area Network),通过交换机和路由器连接。
也有广域网WAN(Wide Area Network),可以把无数的子网连接在一起。让相隔千里的机器能通信
所谓 " 局域网 " 和 " 广域网 " 只是一个相对的概念 。 比如 , 我们有 天朝 特色 的广域网 , 也可以看做一个比较大的局域网
1. 初识协议
计算机有那么多厂商,为了便于各个厂商的产品之间能够具有通用性质,我们需要引入“协议”的概念。其实协议一直存在于我们身边:打电话先说一句“喂”是一种默认的协议,用于确认是否听得到;IPC进程间通信等接口如此类似,也是一种协议;摩斯密码也是一种协议-》协议就是人类自己规定的一套系统,可以把某件事物通过协议翻译成一个具体的信号或者事物。
再比如,计算机的底层都是二进制0和1,就是一种协议。 但是计算机的协议一定不止这个0和1这么“简单粗犷”。还有很多软件协议和硬件协议,并让参与的人都要遵守,这样才能让计算机之间通用:你是Linux,我是win,他是mac,为什么我们能互相交流发消息?
比如,大端和小端存储是一种协议;磁盘如何格式化,LBA地址怎么算是一种协议;CPU和内存之间怎么通过系统总线连接是一种协议................
如何让这些不同厂商之间生产的计算机能够相互顺畅的通信? 就需要有人站出来 , 约定一个共同的标准 , 大家都来遵守 , 这就是 网络协议;一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司。比如5G标准就是由华为订下的。
其中,重点在当下学习的网络协议,就是由ISO(国际标准化组织)带头规定的
协议分层
对于实践中的项目一般都满足:横向模块,纵向分层
也就是说,项目在横向上可能是模块化的,模块1用于处理用户数据,模块2是底层逻辑。。。。;或者是纵向分层化的,在此举一个生活中的纵向分层例子:
在小白视角:两个人互相用汉语进行直接交流:同层协议直接通信
在工程师视角:在顶层语言层,两个人都遵守汉语协议;在第二层,两个设备都遵守电话机的协议,可以互相传递接受信息。:没有直接通信,各自调用下层提供的结构能力,完成调用
这样带来的好处是,每一层需要更换或者出了问题,都很好解决!比如今天想把汉语协议换成英语协议(或者电话机换成无线电通信),只要层级之间解耦够高,就可以直接更换。或者“电话机对应的代码”出了bug,就不需要到“汉语协议的代码中去寻找”,让整个逻辑和实现好读又好改。
总的来说,分层可以解耦合。而我们的网络协议就采用了这种分层模式!
2. 初识TCP/IP协议
废话结束,干货开始。
OSI 七层模型
•OSI ( Open System Interconnection ,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范 ;•把网络从逻辑上分为了 7 层 . 每一层都有相关、相对应的物理设备,比如路由器,交换机 ;•OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输 ;•它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整 . 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯 ;•但是 , 它既复杂又不实用 ; 所以在后来又更新出了TCP/IP系统![]()
不做整体介绍,先了解大概样子即可。
TCP/IP四层模型
TCP/IP 是一组协议的代名词,它还包括许多协议,组成了 TCP/IP 协议簇 .TCP/IP 通讯协议采用了 5 层的层级结构(忽略物理层就是4层),每一层都呼叫它的下一层所提供的网络来完成自己的需求.![]()
复杂的教科书式介绍:物理层 : 负责光 / 电信号的传递方式 . 比如现在以太网通用的网线 ( 双绞 线 ) 、早期以太网采用的的同轴电缆 ( 现在主要用于有线电视 ) 、光纤 , 现在的 wifi 无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层 .•数据链路层 : 负责设备之间的数据帧的传送和识别 . 例如网卡设备的驱动、帧同步 ( 就是说从网线上检测到什么信号算作新帧的开始 ) 、冲突检测 ( 如果检测到冲突就自动重发 ) 、数据差错校验等工作 . 有以太网、令牌环网 , 无线 LAN 等标准 . 交换机(Switch) 工作在数据链路层 .•网络层 : 负责地址管理和路由选择 . 例如在 IP 协议中 , 通过 IP 地址来标识一台主机 , 并通过路由表的方式规划出两台主机之间的数据传输的线路 ( 路由 ). 路由器(Router) 工作在网路层 .•传输层 : 负责两台主机之间的数据传输 . 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机 .•应用层 : 负责应用程序间沟通,如简单电子邮件传输( SMTP )、文件传输协议( FTP )、网络远程访问协议( Telnet )等 . 我们的网络编程主要就是针对应用层
说人话版本:
物理层,就是硬件,就是线等各种硬件,比如网卡也是典型工作在物理层的硬件。; 数据链路层,位于物理层之上、网络层之下的中间层,是硬件软件协同作用的一个层次,会将网络层的包packet转换成数据层的帧frame。比如网卡设备的驱动,多用在局域网通信;网络层(多用于WAN)和传输层则是主要实现在操作系统中;应用层,就比如文件传输协议:文件该怎么规范的来传输
每一层协议都有自己具体的实现和名字。其中,网络层和传输层的协议:IP和TCP协议最为出名,所以把整个系统都根据他们两个命名为IP/TCP协议
OSI和TCP/IP的底下四层其实都是重合的。
为什么要有TCP/IP
CPU和内存通信,只需要一根总线即可;现在的网络通信,无非就是把一根总线的距离放大了无数倍,从西南到华北的距离。
距离一长,就会引入新问题:
问题一,通过物理层和数据链层解决;问题二,通过网络层解决;问题三,传输层解决。
整个TCP/IP协议簇,就是为了解决这些不同层次的问题而规定的。
TCP/IP 协议能分层,前提是因为问题们本身能分层
关于问题4:
TCP/IP的宏观理解
尽管还没有接触过任何一种具体的协议,但是我们已经大概可以理解协议的运作模式了:
至于什么是报头与报文,会在后面介绍,重要的是理解通信都是自顶向下的!
定标准和写代码的不是一批人,工程实践和标准定制是不一样的团队。
所以Linux写Linux的代码,Win写Win的代码,上图中出现了这么多协议,如何保证不同的系统之间能相互识别???
尝试朴素的理解什么是协议。整个计算机有那么多协议,就以往我们在操作系统中的经验,这么多协议该如何管理?
先描述,再组织!!
并且,每一个操作系统----无论是Linux还是Win,底层都是C/C++语言完成的
观察上述图片:
问题:主机 B 能识别 data ,并且准确提取 a=10 , b=20 , c=30 吗?回答:答案是肯定的!因为双方都有同样的结构体类型 struct protocol 。也就是说,用同样的代码实现协议,用同样的自定义数据类型,天然就具有 ” 共识 “ ,能够识别对方发来的数据,这不就是约定吗?关于协议的朴素理解: 所谓协议,就是通信双方都认识的结构化的数据类型因为协议栈是分层的,所以,每层都有双方都有的协议,同层之间,互相可以认识对方的协议。
朴素、浅显的来说:各个协议的结构体类型相同就可以解决问题,就能互相识别
3.网络传输基本流程
网购一个物品,实际到手中的是一个包裹,包裹里除了具体想要的物品,还有这个包裹的快递单、说明书、快递公司信息等等。所以,实际拿到的东西往往比你预期的东西“多”,多的这部分描述当前层次信息的内容,就叫做报头。
报头部分,就是对应协议层的结构体字段,我们一般叫做报头•除了报头,剩下的叫做有效载荷•故,报文 = 报头 + 有效载荷![]()
3.1 局域网传输流程图 (以太网为例)
局域网中有一个mac地址,用于唯一标识每一个机器。
上课的时候,老师叫“张三,为什么没有写作业,请你站起来”,为什么李四王五没有反应?因为他们发现这个报文中的MAC地址和自己不匹配!
认识MAC地址:
MAC 地址用来识别 数据链路层中相连的节点 ;•长度为 48 位 , 及 6 个字节 . 一般用 16 进制数字加上冒号的形式来表示 ( 例如 :08:00:27:03:fb:19)•在网卡出厂时就确定了 , 不能修改 . mac 地址通常是唯一的 ( 虚拟机中的 mac 地址不是真实的 mac 地址 , 可能会冲突 ; 也有些网卡支持用户配置 mac 地址 ).在win下使用 ifconfig /all可以查看(win采用的不是冒号而是-)![]()
后面我们详细谈论数据链路层的时候,会谈 mac 帧协议,此处我们做一个了解即可。
Linux下也可以查看:
以太网就是一种局域网
当一个设备发到以太网中,各个设备收消息时:一定是各个机器的底层硬件先收到,操作系统+硬件层执行MAC地址检测,Mac地址不匹配,硬件丢弃了,用户感受不到。所以王五李四不会站起来。
为了数据发送避免混乱,只允许同时一个有效的报文在以太网中,如果每个机器都发,就会发生数据的碰撞,因此底层还要做 :碰撞检测
以太网就是多主机之间的临界资源,需要保证每次读写的原子性,没有暂时获得临界资源的报文就需要等待。
这就是为什么同一个以太网中,设备多了速度就会下降的原因,因为每个机器等待的时间很长。那怎么才能知道以太网像网卡上发数据了?中断!网卡收到数据,发出中断,当前进程在检测到中断信号之后进入内核态,查找对应中断向量表,执行对应中断程序
所以,可以把网络理解成操作系统的一部分,只是由于其部分处理和传统操作系统不一样而独立成为一个学科,学好网络的基础就是需要学好操作系统!
回到刚刚那张图:
在小白视角,同层次的协议相互能看懂;在工程师角度,从应用层往数据链路层封装n-1层的内容是第n层的有效载荷,第n层会把自己的报头加上,一起作为下一层的有效载荷;
对于用户B,就是从数据链路层一步一步解包和分用。
各层常见协议:
小结:
网络传输的过程中,数据不是直接发送给对方主机的,而是先要自定向下将数据交付给下层协议,最后由底层发送,然后由对方主机的底层来进行接受,在自底向上进行向上交付
3.2 跨网络传输流程图
首先,认识一下IP地址
IPv4(Internet Protocol version 4)是互联网协议的第四版,诞生于1981年(RFC 791)。它通过32位地址唯一标识网络设备,地址格式为点分十进制(如
192.168.1.1
)【例如 192.168.0.1 ; 用点 分割的每一个数字表示一个字节, 范围是 0 - 255;】,理论上可提供约43亿个地址。IPv4奠定了互联网通信的基础,支持全球设备互联。
IPv4现在任然具有教学意义,但是已经有IPv6在进行革命,下面是补充内容
IPv4、IPv6的基本概念与区别,以及IPv5缺失的原因
一、IPv4:互联网的基石
定义与核心作用
IPv4(Internet Protocol version 4)是互联网协议的第四版,诞生于1981年(RFC 791)。它通过32位地址唯一标识网络设备,地址格式为点分十进制(如192.168.1.1
),理论上可提供约43亿个地址。IPv4奠定了互联网通信的基础,支持全球设备互联。地址分类与局限
分类:分为A、B、C三类主类网(如
192.168.0.0
为C类私有地址),以及D类组播地址和E类保留地址。局限:地址空间有限,依赖NAT(网络地址转换)技术缓解枯竭问题,但导致路由效率下降和安全性依赖额外协议(如IPSec需手动启用)。
二、IPv6:下一代互联网协议
定义与核心升级
IPv6(Internet Protocol version 6)是IPv4的继任者,由IETF于1998年设计。其最大突破是将地址长度扩展至128位,地址格式为冒号分隔的十六进制(如2001:0db8:85a3::8a2e:0370:7334
),理论上可提供约3.4×10³⁸个地址,彻底解决地址枯竭问题。关键改进
地址空间:128位地址支持近乎无限的设备接入,满足物联网、5G等场景需求。
安全性:内置IPSec协议,强制支持数据加密和认证,提升网络安全性。
路由效率:简化报头格式(固定40字节),采用多层寻址结构,减少路由表膨胀。
自动配置:支持无状态地址自动配置(SLAAC),设备联网更便捷。
移动性:优化移动设备跨网络切换支持,减少连接中断。
三、IPv4与IPv6的核心区别
特性
IPv4
IPv6
地址长度
32位(约43亿个地址)
128位(3.4×10³⁸个地址)
地址格式
点分十进制(如
192.168.1.1
)冒号分隔十六进制(如
2001:db8::1
)安全性
依赖额外协议(如IPSec需手动配置)
内置IPSec,强制加密和认证
路由效率
依赖NAT导致路由表膨胀
多层寻址简化路由,减少延迟
自动配置
需DHCP服务器或手动配置
支持无状态自动配置(SLAAC)
移动支持
切换网络需重新获取地址
优化移动IP支持,减少中断
四、IPv5的缺失:历史与技术选择
IPv5的实验性角色
IPv5(互联网流协议,Internet Stream Protocol,简称ST)是20世纪80年代由Apple、NEXT等公司开发的实验性协议,主要用于实时流媒体传输(如语音和视频)。其地址系统仍为32位,与IPv4相同,导致地址空间受限,未能解决枯竭问题。为何跳过IPv5?
技术局限:IPv5未突破地址容量瓶颈,无法满足互联网爆发式增长需求。
IPv6的崛起:IPv6的128位地址空间提供了近乎无限的资源,且在设计时直接整合了安全性、移动性等改进,成为更优选择。
标准化进程:IETF在1994年成立IPng工作组,直接推动IPv6开发,跳过IPv5的商业化部署。
五、总结
IPv4:互联网的奠基者,但面临地址枯竭和安全性挑战。
IPv6:通过地址扩容、内置安全、自动配置等特性,成为未来互联网的核心协议。
IPv5:作为实验性协议,因技术局限和IPv6的崛起而未被广泛采用,成为历史过渡角色。
当前,全球正在加速向IPv6过渡,以应对物联网、云计算等新兴技术的需求。用户可通过设备或系统的网络设置,选择同时支持IPv4和IPv6的双栈模式,逐步适应这一技术变革。
查ip地址:
Linux下:一个私网IP
Win下:ipconfig /all
刚刚已经了解了一个网段里局域网的传输大概流程,现在我们看看跨网段的主机的数据传输:
红圈表示该以太网(或者令牌环等局域网)下连接的其他机器。
比如当下,一个以太网中的主机A想给另一个局域网-一个令牌环中的服务器B传数据。
只要有IP层,就有路由功能。
对于A,先把报文封装,向下传到IP层和以太网驱动程序,路由器可以看作是A所在的以太网的一个主机,所以传给路由器,路由器执行路由功能(依靠路由选择算法等),再一次封装数据传到令牌环中去,在令牌环中找到B(因为是不同局域网,所以需要经过中间的路由器)
令牌环的令牌,就像锁一样,有令牌的机器才能发数据,保证每次获取报文的完整性........
现代的路由器已经非常先进,几乎可以干到应用层 ;现代的每一个路由器都可以搭建子网,当你的手机或者电脑连进家里的WIFI,就相当于进入路由器搭建的子网(主要都是以太网)
当机器A发现以太网中没有对应的MAC地址,就发到路由器进行路由。
注意,A、B两个主机也有IP层(层级多于IP层!),同样具有路由功能。
跨网络传输:
再完善一下:
用户A的数据一层一层封装,网络层就有IP地址,数据链路层封装进mac地址,从数据链路层发出的(图中红圈)叫做数据帧(路由器可以重新封装mac帧)。
对于整个网络层,可以认为拿到的报文都是一样的,也可以认为整个网络层就是在直接通信(小白视角)
对比整个传输的过程,不难发现MAC地址和IP地址:
IP地址在整个路由过程中,一直不变(目前,我们只能这样说明,后面在修正)Mac地址一直在变(当前阶段到下一阶段) 。目的IP是一种长远目标,Mac是下一阶段目标,目的IP是路径选择的重要依据,mac地址是局域网转发的重要依据Mac VS IP中一个例子,唐僧取经的IP地址是东土大唐到西天,但是每一次的路途不一样,今天的MAC是黑风山到黄风岭,明天的MAC是小雷音寺到陈家庄
再次看这张图,感觉应该不一样了:
IP 网络层存在的意义:提供网络虚拟层,让世界的所有网络都是 IP 网络,屏蔽底层局域网的差距(以太网和令牌环都可以接入IP协议)!!!