其他篇章【Linux专栏】
其他篇章 【C语言专栏】
上期回顾 【C语言】数组
文章目录
- [1. 初识协议](#1. 初识协议)
-
- [1.1 能定制协议标准的组织或公司](#1.1 能定制协议标准的组织或公司)
- [1.2 协议分层](#1.2 协议分层)
-
- [1.2.1 软件分层的好处](#1.2.1 软件分层的好处)
- [1.3 OSI七层模型](#1.3 OSI七层模型)
- [1.4 TCP/IP五层(或四层)模型](#1.4 TCP/IP五层(或四层)模型)
- [2. 再识协议](#2. 再识协议)
-
- [2.1 为什么要有TCP/IP协议?](#2.1 为什么要有TCP/IP协议?)
- [2.2 什么是TCP/IP协议?](#2.2 什么是TCP/IP协议?)
- [2.3 所以究竟什么是协议?](#2.3 所以究竟什么是协议?)
- [3. 网络传输基本流程](#3. 网络传输基本流程)
-
- [3.1 局域网(以太网为例)通信原理](#3.1 局域网(以太网为例)通信原理)
- [3.2 认识MAC地址](#3.2 认识MAC地址)
- [3.3 数据包封装和分用](#3.3 数据包封装和分用)
- [4. 跨网络传输流程图⽹络中的地址管理](#4. 跨网络传输流程图⽹络中的地址管理)
-
- [4.1 认识IP地址](#4.1 认识IP地址)
- [4.2 ip地址的意义](#4.2 ip地址的意义)
- [4.3 对比ip地址和Mac地址的区别](#4.3 对比ip地址和Mac地址的区别)
1. 初识协议
- 协议是一种约定
- 打电话约定 :电话响铃次数的约定
计算机之间的传输媒介是光信号和电信号(光电信号),通过"频率"和"强弱"来表示 0 和 1 这样的信息,想传递各种不同的信息,就需要约定双方的数据格式。
那两台通信的两台主机,约定好协议就可以了吗?
答案是不能,因为我可以用强弱表示01,别人可以用频率表示01,两者不一致,我们可以理解为是两门不同的语言,即是定好了基本的协议,也是不能正常通信的。
完善协议的规定:
- 计算机⽣产⼚商有很多;
- 计算机操作系统, 也有很多;
- 计算机⽹络硬件设备, 还是有很多;
- 如何让这些不同⼚商之间⽣产的计算机能够相互顺畅的通信? 就需要有⼈站出来, 约定⼀个共同的标准, ⼤家都来遵守, 这就是 ⽹络协议 ;
1.1 能定制协议标准的组织或公司
1.国际标准化组织
- IEEE(电⽓和电⼦⼯程师协会):这是⼀个由计算机和⼯程领域专家组成的庞⼤技术组织,在通信协议领域贡献突出。IEEE制定了全世界电⼦、电⽓和计算机科学领域30%左右的标准,包括IEEE 802系列标准,这些标准涵盖了从局域⽹(LAN)到⼴域⽹(WAN)等多种⽹络技术。
- ISO(国际标准化组织):ISO是由多个国家的标准化团体组成的国际组织,它在开放系统互连(OSI)模型⽅⾯的⼯作尤为著名。OSI模型定义了⽹络通信的七层协议结构,尽管在实际应⽤中,TCP/IP协议族更为普遍,但OSI模型仍然在学术和理论研究中占有重要地位。
- ITU(国际电信联盟):ITU是联合国下属的专⻔机构,负责制定电信领域的国际标准。ITU-T制定的标准涵盖了电话和⽹络通信,与ISO合作确保了通信技术的全球兼容性和互操作性。
2.区域标准化组织
- ETSI(欧洲电信标准学会):由欧洲共同体各国政府资助,是⼀个由电信⾏业的⼚商与研究机构参加并从事研究开发到标准制定的组织。
- ASTAP(亚洲与泛太平洋电信标准化协会):1998年由⽇本与韩国发起成⽴的标准化组织,旨在加强亚洲与太平洋地区各国信息通信基础设施及其相互连接的标准化⼯作的协作。
3.公司
- 某些公司,如泰凌微,也⾃研各种标准的软件协议栈,包括低功耗蓝⽛、zigbee、thread及Matter等,并可进⾏定制化改动,这是其核⼼竞争⼒之⼀。泰凌微还计划重点发展智能电⼦价签、智能遥控、智能家居等市场。
4.民间国际团体
- IETF(互联⽹⼯程师任务组):这是⼀个负责开发和推⼴互联⽹协议(特别是构成TCP/IP协议族的协议)的志愿组织,通过RFC发布新的或者取代⽼的协议标准。
5.官方机构
- FCC(联邦通信委员会):美国对通信技术的管理的官⽅机构,主要职责是通过对⽆线电、电视和有线通信的管理来保护公众利益。也对包括标准化在内的通信产品技术特性进⾏审查和监督。
1.2 协议分层
协议本质也是软件,在设计上为了更好的进⾏模块化,解耦合,也是被设计成为层状结构的
1.2.1 软件分层的好处
- 上面的例子协议层数(两层):语言层、通信设备层
- 实际上的网络通信协议,设计的会更复杂,需要分更多层
- 通过上面的例子,我们能理解,分层可以实现解耦合,让软件维护成本更低
1.3 OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层⽹络模型称为开放式系统互联参考模型,是⼀个逻辑上的定义和规范;
- 把⽹络从逻辑上分为了7层. 每⼀层都有相关、相对应的物理设备,⽐如路由器,交换机;
- OSI 七层模型是⼀种框架性的设计⽅法,其最主要的功能使就是帮助不同类型的主机实现数据传
输; - 它的最⼤优点是将服务、接⼝和协议这三个概念明确地区分开来,概念清楚,理论也⽐较完整.通过七个层次化的结构模型使不同的系统不同的⽹络之间实现可靠的通讯;
- 但是, 它既复杂⼜不实⽤; 所以我们按照TCP/IP四层模型来讲解
- 其实在⽹络⻆度,OSI定的协议7层模型其实⾮常完善,但是在实际操作的过程中,会话层、表⽰层是不可能接⼊到操作系统中的,所以在⼯程实践中,最终落地的是5层协议。
- 现在看这些可能难以理解,不过在学完网络之后,就会很清晰了。
1.4 TCP/IP五层(或四层)模型
TCP/IP是⼀组 协议的代名词 ,它还包括许多协议,组成了 TCP/IP协议簇
TCP/IP通讯协议采⽤了5层的层级结构,每⼀层都呼叫它的下⼀层所提供的⽹络来完成⾃⼰的需求
- 物理层: 负责光/电信号的传递⽅式. ⽐如现在以太⽹通⽤的⽹线(双绞 线)、早期以太⽹采⽤的的同轴电缆(现在主要⽤于有线电视)、光纤, 现在的wifi⽆线⽹使⽤电磁波等都属于物理层的概念。物理层的能⼒决定了最⼤传输速率、传输距离、抗⼲扰性等. 集线器(Hub)⼯作在物理层.
- 数据链路层: 负责设备之间的数据帧的传送和识别. 例如⽹卡设备的驱动、帧同步(就是说从⽹线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就⾃动重发)、数据差错校验等作. 有以太⽹、令牌环⽹, ⽆线LAN等标准. 交换机(Switch)⼯作在数据链路层.
- ⽹络层: 负责地址管理和路由选择. 例如在IP协议中, 通过IP地址来标识⼀台主机, 并通过路由表的⽅式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)⼯作在⽹路层.
- 传输层: 负责两台主机之间的数据传输. 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到⽬标主机.
- 应⽤层: 负责应⽤程序间沟通,如简单电⼦邮件传输(SMTP)、⽂件传输协议(FTP)、⽹络远程访问协议(Telnet)等. 我们的⽹络编程主要就是针对应⽤层.
物理层我们考虑的⽐较少,我们只考虑软件相关的内容. 因此很多时候我们直接称为 TCP/IP四层模型.
⼀般⽽⾔
- 对于⼀台主机, 它的操作系统内核实现了从传输层到物理层的内容;
- 对于⼀台路由器, 它实现了从⽹络层到物理层;
- 对于⼀台交换机, 它实现了从数据链路层到物理层;
- 对于集线器, 它只实现了物理层;
但是并不绝对. 很多交换机也实现了⽹络层的转发; 很多路由器也实现了部分传输层的内容(⽐如端⼝转发);
2. 再识协议
2.1 为什么要有TCP/IP协议?
- ⾸先,即便是单机,你的计算机内部,其实都是存在协议的,⽐如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,⽐如:SATA,IDE,SCSI等。只不过我们感知不到罢了。⽽且这些协议都在本地主机各⾃的硬件中,通信的成本、问题⽐较少。
- 其次,⽹络通信最⼤的特点就是主机之间变远了。任何通信特征的变化,⼀定会带来新的问题,有问题就得解决问题,所以需要新的协议咯。
所以,为什么要有TCP/IP协议?本质就是通信主机距离变远了
2.2 什么是TCP/IP协议?
- TCP/IP协议的本质是⼀种解决⽅案
- TCP/IP协议能分层,前提是因为问题们本⾝能分层
TCP/IP协议与操作系统的关系(宏观上,怎么实现的)
2.3 所以究竟什么是协议?
- 截⽌到⽬前,我们还没接触过任何协议,但是如何朴素的理解协议,我们已经可以试试了。
- OS源代码⼀般都是⽤C/C++语⾔写的。
问题:主机B能识别data,并且准确提取a=10,b=20,c=30吗?
答案是肯定的!因为双⽅都有同样的结构体类型struct protocol。也就是说,⽤同样的代码实现协议,⽤同样的⾃定义数据类型,天然就具有"共识",能够识别对⽅发来的数据,这不就是约定吗?
关于协议的朴素理解:所谓协议,就是通信双⽅都认识的结构化的数据类型
因为协议栈是分层的,所以,每层都有双⽅都有协议,同层之间,互相可以认识对⽅的协议
再强调一遍:所谓协议,就是通信双⽅都认识的结构化的数据类型!!!
3. 网络传输基本流程
3.1 局域网(以太网为例)通信原理
- ⾸先回答,两台主机在同⼀个局域⽹,是否能够直接通信?----可以
- 原理类似上课
- 每台主机在局域⽹上,要有唯⼀的标识来保证主机的唯⼀性:mac地址
3.2 认识MAC地址
- MAC地址⽤来识别数据链路层中相连的节点;
- ⻓度为 48 ⽐特位, 即 __6__个字节. ⼀般⽤ 16 进制数字加上冒号的形式来表⽰(例如:
08:00:27:03:fb:19)- 在⽹卡出⼚时就确定了, 不能修改. mac地址通常是唯⼀的(虚拟机中的mac地址不是真实的mac地
址, 可能会冲突; 也有些⽹卡⽀持⽤⼾配置mac地址).- windows>ipconfig /all
1. 后面我们详细谈论数据链路层的时候,会谈 mac 帧协议,此处我们做⼀个了解即可。
- 以太⽹中,任何时刻,只允许⼀台机器向⽹络中发送数据
- 你可以想象成扔一块石头到水里,它会出现一道清晰的波纹,要是再扔一块,他就会出现混乱
- 如果有多台同时发送,会发⽣数据⼲扰,我们称之为数据碰撞
- 好比我们在和某个人说话,但是另一个人插进来了,就会干扰到我们的对话
- 所有发送数据的主机要进⾏碰撞检测和碰撞避免
- 没有交换机的情况下,⼀个以太⽹就是⼀个碰撞域
- 局域⽹通信的过程中,主机对收到的报⽂确认是否是发给⾃⼰的,是通过⽬标mac地址判定
- 这⾥可以试着从系统⻆度来理解局域⽹通信原理
以太网的本质就是共享的资源- - - -因为一台主机给另一台主机发送数据,其他的主机也可以给它发,你不可能把它拦截掉吧
2. 初步明白了局域网通信原理,再来看同⼀个网段内的两台主机进行发送消息的过程
主机之间的通信: 本质是两个协议在通信
数据发送的原始动力: 是人(90%情况下)
3. 其中每层都有协议,所以当我进⾏进⾏上述传输流程的时候,要进⾏封装和解包
- 可以理解为俄罗斯套娃
思考:为什么自顶向下封装?
- 必须贯穿操作系统,贯穿协议,os是硬件(网卡)的管理者
封装过程其实就是入栈过程
解包过程其实就是出栈过程
4. 下面我们明确一下概念
- 报头部分,就是对应协议层的结构体字段,我们⼀般叫做报头
- 除了报头,剩下的叫做有效载荷
- 故,报⽂ = 报头 + 有效载荷
4. 然后,我们在明确⼀下不同层的完整报⽂的叫法
- 不同的协议层对数据包有不同的称谓:
- 在传输层叫做 数据段(segment)
- 在⽹络层叫做 数据报(datagram)
- 在链路层叫做 数据帧(frame)
- 应⽤层数据通过协议栈发到⽹络上时,每层协议都要加上⼀个数据⾸部(header) ,称为封装(Encapsulation).
- ⾸部信息中包含了⼀些类似于⾸部有多⻓, 载荷(payload)有多⻓, 上层协议是什么等信息.
- 数据封装成帧后发到传输介质上,到达⽬的主机后每层协议再剥掉相应的⾸部, 根据⾸部中的 "上层协议字段" 将数据交给对应的上层协议处理.
5. 最后,在整体复盘⼀下:

在⽹络传输的过程中,数据不是直接发送给对⽅主机的,⽽是先要⾃定向下将数据交付给下层协议,最后由底层发送,然后由对⽅主机的底层来进⾏接受,在⾃底向上进⾏向上交付。
3.3 数据包封装和分用
数据封装过程:
数据分用的过程:
4. 跨网络传输流程图⽹络中的地址管理
4.1 认识IP地址
IP 协议有两个版本, IPv4 和 IPv6 . 我们整个的课程, 凡是提到IP协议, 没有特殊说明的, 默认都是指 IPv4
- IP 地址是在 IP 协议中, ⽤来标识网络中不同主机的地址;
- 对于 IPv4 来说, IP 地址是⼀个 4 字节, 32 位的整数;
- 我们通常也使⽤ "点分⼗进制" 的字符串表⽰ IP 地址, 例如 192.168.0.1 ; ⽤点分割的每⼀个数字表⽰⼀个字节, 范围是 0 - 255 ;
跨⽹段的主机的数据传输. 数据从⼀台计算机到另⼀台计算机传输过程中要经过⼀个或多个路由器.
示意图:

4.2 ip地址的意义
- 为什么要去⽬标主机,先要⾛路由器?
- ⽬的IP的意义
注意:路由过程中,IP地址不变,Mac地址一直在变(因为传输到路由器过程要进行解包),并且Mac地址只会在本局域网内有效!
然后结合封装与解包,提现路由器解包和重新封装的特点
4.3 对比ip地址和Mac地址的区别
可以联想到西游记,唐僧四人去西天取经,他的起点是东土大唐(源IP- - -不会变),终点是西天(目标IP- - - 不会变),他途径的地点就是Mac地址(一直在变,上一站是女儿国,下一站黑风岭...)
- IP地址在整个路由过程中,⼀直不变
- Mac地址⼀直在变
- ⽬的IP是⼀种⻓远⽬标,Mac是下⼀阶段⽬标,⽬的IP是路径选择的重要依据,mac地址是局域⽹转发的重要依据
提炼IP⽹络的意义和⽹络通信的宏观流程
- IP网络层存在的意义: 提供⽹络虚拟层,让世界的所有⽹络都是 IP ⽹络,屏蔽最底层⽹络的差异

















