1、网络发展
在计算机发展历程中,经历过下面四个阶段:
1.独立模式
独立模式:计算机之间相互独立,每台计算机做自己的事情,彼此之间没有直接信息传递。如果两台计算机需要通信就需要将当前计算机的数据通过某种方式拷贝到另一台计算,如下图所示:
2、网络互联
网络互联:多台计算机连接在一起,完成数据共享。示意图如下:
3.局域网LAN
局域网LAN:计算机数量更多了,通过交换机和路由器连接在一起
4.广域网WAN
广域网WAN:将远隔千里的计算机都连在一起
所谓「局域网」和「广域网」只是一个相对的概念
之所以会逐渐发展为大范围的网络可以理解为主要原因是计算机是人的工具,人要协同工作
2、何为协议
协议」本质上可以理解为一种约定。计算机之间的传输媒介是光信号和电信号。通过「频率」和「强弱」来表示0和1这样的信息。要想传递各种不同的信息,就需要约定好双方的数据格式,只有每一方都保证交互的数据格式是相同的,那么此时就可以进行通信。在网络中用于规范这种数据格式的就是网络协议
一般具有定制协议或者标准的资格的组织或者公司都必须是业界公认或者具有江湖地位的组织或者公司,下面是常见的标准指定组织:
1.国际标准化组织
- IEEE(电气和电子工程师协会):这是一个由计算机和工程领域专家组成的庞大技术组织,在通信协议领域贡献突出。IEEE制定了全世界电子、电气和计算机科学领域30%左右的标准,包括EEE 802系列标准,这些标准涵盖了从局域网(LAN)到广域网(WAN)等多种网络技术
- ISO(国际标准化组织):ISO是由多个国家的标准化团体组成的国际组织,它在开放系统互连(OS)模型方面的工作尤为著名。OSI模型定义了网络通信的七层协议结构,尽管在实际应用中,TCP/IP协议族更为普遍,但OS模型仍然在学术和理论研究中占有重要地位
- ITU(国际电信联盟):ITU是联合国下属的专门机构,负责制定电信领域的国际标准。ITU-T制定的标准涵盖了电话和网络通信,与ISO合作确保了通信技术的全球兼容性和互操作性
2.区域标准化组织
- ETSI(欧洲电信标准学会):由欧洲共同体各国政府资助,是一个由电信行业的厂商与研究机构参加并从事研究开发到标准制定的组织
- ASTAP(亚洲与泛太平洋电信标准化协会):1998年由日本与韩国发起成立的标准化组织,旨在加强亚洲与太平洋地区各国信息通信基础设施及其相互连接的标准化工作的协作
3.公司
公司:某些公司,如泰凌微,也自研各种标准的软件协议栈,包括低功耗蓝牙、 zigbee、thread及Matter等,并可进行定制化改动,这是其核心竞争力之一。泰凌微还计划重点发展智能电子价签、智能遥控、智能家居等市场。
4.民间国际团体
民间国际团体:IETF(互联网工程师任务组):这是一个负责开发和推广互联网协议(特别是构成TCP/IP协议族的协议)的志愿组织,通过RFC发布新的或者取代老的协议标准
5.官方机构
官方机构:FCC(联邦通信委员会):美国对通信技术的管理的官方机构,主要职责是通过对无线电、电视和有线通信的管理来保护公众利益。也对包括标准化在内的通信产品技术特性进行审查和监督
以上这些组织或公司都能在一定程度上定制协议标准,以满足特定需求或推动技术发展
3、OSI七层模型
OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范。把网络从逻辑上分为了7层,每一层都有相关、相对应的物理设备,比如路由器、交换机等。OSI七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输,它的最大优点是将服务、接口和协议这三个概念明确地区分开来,慨念清楚理论也比较完整。通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯。在实际开发中,更关注的是TCP/IP五层(或四层)模型,因为使用范围更广。但是尽管如此,OSI七层模型还是一个很伟大的模型,尽管一些教材中说OSI模型太过于复杂,因为在实际操作的过程中,会话层和表示层是不可能接入到操作系统中的
下面是OSI七层模型的每一层和对应的功能:
4、TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求,下面是每一层的介绍:
- 物理层:负责光电信号的传递方式.比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤,现在的无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)工作在物理层
- 数据链路层:负责设备之间的数据帧的传送和识别.例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。有以太网、令牌环网,无线LAN等标准。交换机(Switch)工作在数据链路层
- 网络层:负责地址管理和路由选择。例如在IP协议中,通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由)。路由器(outer)工作在网路层
- 传输层:负责两台主机之间的数据传输。如传输控制协议TCP,能够确保数据可靠的从源主机发送到目标主机
- 应用层:负责应用程序间沟通,如简单电子邮件传输SMTP、文件传输协议FTP、网络远程访问协议Telnet等。后续的网络编程也会主要聚焦于应用层
下面是OSI七层模型和TCP/IP五层模型的对比图:
但是实际上,物理层在网络编程中考虑的比较少,所以很多时候称五层模型为四层模型
一般而言对于一台主机来说,它的操作系统内核实现了从传输层到物理层的内容;对于一台路由器,它实现了从网络层到物理层;对于一台交换机,它实现了从数据链路层到物理层;对于集线器,它只实现了物理层
但是,也存在一些其他情况,例如很多交换机也实现了网络层的转发;很多路由器也实现了部分传输层的内容(比如端口转发)
5、协议分层
前面在了解介绍操作系统在计算机组成中所处的位置时可以看到一台计算机本质也是分层的,本次在协议部分可以发现不论是OSI模型和TCP/IP模型都是分层的,所以现在的问题是为什么需要分层这个概念
以一个例子为例:
-
定义
协议分层是一种将复杂的通信系统划分为多个逻辑层次的方法。每一层专注于特定的功能,并通过接口与上下层交互,从而实现模块化和简化设计。 -
目的
- 提高系统的可维护性和扩展性。
- 降低复杂性:每层只需关注自己的功能,避免全局设计的复杂性。
- 实现标准化:各层之间有明确的接口和规范,便于不同系统之间的互操作。
-
工作原理
- 数据从高层向低层传递时,每层会在数据中添加头部(有时还包括尾部)信息,这个过程称为“封装”。
- 数据从低层向高层传递时,每层会解析并移除对应的头部信息,这个过程称为“解封装”。
6、网络协议
为什么需要有网络协议&&为什么协议可以分层
即便是单机的计算机内部,其实都是存在协议的,比如:其他设备和内存通信,会有内存协议。其他设备和磁盘通信,会有磁盘相关的协议,比如:SATA、IDE、SCSl等,只不过不容易感知到罢了。而且这些协议都在本地主机各自的硬件中,通信的成本、问题比较少
其次,网络通信最大的特点就是主机之间变远了。任何通信特征的变化,一定会带来新的问题,有问题就得解决问题,所以需要新的协议
以下图为例:
1. 提供统一的通信规则
网络中的设备可能来自不同的厂商,运行不同的操作系统或使用不同的硬件架构。如果没有统一的通信规则,这些设备将无法相互理解或交换信息。
- 比喻 :就像不同国家的人需要一种通用语言(如英语)来交流一样,网络协议为计算机之间的通信提供了“共同的语言”。
- 现实意义 :例如,HTTP 协议定义了浏览器如何向服务器请求网页,服务器如何响应数据。
2. 确保数据传输的可靠性
在复杂的网络环境中,数据可能会丢失、损坏或乱序到达。网络协议通过各种机制确保数据能够正确无误地传输。
- 例子 :
- TCP(传输控制协议) :提供可靠的端到端通信,通过确认机制、重传机制和流量控制来保证数据的完整性。
- IP(网际协议) :负责将数据包从源地址路由到目标地址,即使路径发生变化也能正确送达。
3. 支持异构网络的互操作性
现代网络通常由多种类型的设备和网络技术组成(如以太网、Wi-Fi、光纤网络等)。网络协议屏蔽了底层硬件的差异,使得不同网络能够无缝协作。
- 例子 :
- 路由器 :通过 IP 协议连接局域网和广域网。
- DNS(域名系统) :将人类可读的域名(如 www.example.com)转换为机器可识别的 IP 地址。
4. 提高通信效率
网络协议通过优化数据传输方式,减少不必要的资源浪费,从而提高通信效率。
- 例子 :
- UDP(用户数据报协议) :适用于对速度要求高的场景(如视频流、在线游戏),因为它不进行复杂的确认和重传。
- HTTP/2 和 HTTP/3 :通过多路复用和压缩技术,显著提高了网页加载速度。
5. 支持多样化的应用需求
不同的应用场景对网络通信有不同的需求(如实时性、安全性、可靠性等)。网络协议的设计可以满足这些多样化的需求。
- 例子 :
- 实时通信 :VoIP(语音通话)和视频会议依赖 RTP(实时传输协议)来保证低延迟。
- 安全性 :HTTPS 使用 TLS/SSL 加密协议保护数据隐私。
- 文件传输 :FTP 和 SFTP 提供高效的文件上传和下载功能。
6. 实现分层设计,降低复杂性
网络协议采用分层设计(如 OSI 模型或 TCP/IP 模型),每一层专注于特定的功能。这种模块化设计降低了系统的复杂性,并提高了可维护性和扩展性。
- 例子 :
- 应用层协议(如 HTTP、SMTP)无需关心底层的数据传输细节,只需调用传输层协议(如 TCP)提供的服务即可。
- 如果需要更换底层硬件(如从以太网切换到 Wi-Fi),只需修改物理层和数据链路层,而无需更改上层协议。
7. 解决网络规模扩大的问题
随着网络规模的增长,设备数量和通信量急剧增加。网络协议通过路由、寻址和流量管理等机制,解决了大规模网络中的通信问题。
- 例子 :
- IPv4 和 IPv6 :为每台设备分配唯一的 IP 地址,支持全球范围内的设备互联。
- BGP(边界网关协议) :用于互联网中不同自治系统之间的路由选择。
8. 促进标准化和兼容性
网络协议通常是国际标准(如由 IETF、IEEE 等组织制定),这确保了不同厂商的产品和服务能够兼容,避免了“孤岛效应”。
- 现实意义 :
- 不同品牌的手机、电脑和服务器可以通过 TCP/IP 协议互相通信。
- 各种网络设备(如路由器、交换机)遵循统一的协议规范,使得它们可以协同工作。
有了协议之后就可以进行通信,但是这个协议的设计为什么可以是分层的,从上图中也可以看出,局域网内的计算机之间需要通信需要考虑发送、多个局域网中的计算机之间需要通信该如何找当前计算机需要通信的计算机、又该如何传递信息、信息传递过程之中如果存在信息丢失又该如何解决等问题本质都属于不同层的问题,所以TCP/IP能分层是因为问题可以分层
7、网络协议与操作系统
为什么TCP/IP协议叫这个名字而不是单单的五层模型,这些问题的本质原因就是因为TCP协议和IP协议在整个开发中最关键,以下图为例:
每台计算机都会装有操作系统,如果两个计算机想要通信,就需要通过操作系统,因为操作系统是整个计算机的管理者,但是不同的计算机可能使用的是不同的操作系统,此时就会出现操作系统不同,发送的数据格式就不同。为了解决这个问题,就需要一个标准解决这个问题,也就是说,需要一个网络协议栈规定每一层需要遵守的标准,而在操作系统所在层,在网络协议栈总对应的就是传输层和网络层,这两层使用的协议最主要的分别就是TCP协议和IP协议,因为这两个协议最重要,所以叫TCP/IP协议
所以,到底什么是协议。在上面已经在意思理解层面上做了解释,现在从实际开发层面理解,两台计算机想要通信,就必须要保证数据格式相同,而以为操作系统底层都是相同的语言,所以所谓的数据格式实际上就是一个结构体,这个结构体就是由TCP/IP协议规定的,所以协议其实就是通信双方都认识的结构化的数据类型
8、网络传输基本流程
1、局域网内数据传输流程图
在局域网内,两台计算机可以直接通信,本质就是因为两台计算机可以直接看到彼此,而在局域网内的每台计算机都需要一个唯一标识符,这个标识符称为MAC地址
MAC地址用来识别数据链路层中相连的节点;长度为48位,及6个字节。一般用16进制数字加上冒号的形式来表示(例如:08:00:27:03:fb:19
)在网卡出厂时就确定了,不能修改,所以MAC地址通常是唯一的(虚拟机中的MAC地址不是真实的MAC地址,可能会冲突;也有些网卡支持用户配置MAC地址)
在Linux下查看一台计算机的MAC地址可以使用下面的命令:
ifconfig
在显示出的结果中,ether
的信息就是MAC地址
在Windows下查看一台计算机的MAC地址可以使用下面的命令:
ipconfig /all
在数据链路层传输数据时就需要使用到MAC帧协议
以下图为例了解同一局域网内的计算机如何进行通信:
以太网中,任何时刻,只允许一台机器向网络中发送数据。如果有多台同时发送,会发生数据干扰,这个数据干扰称为数据碰撞。所有发送数据的主机要进行碰撞检测和碰撞避免。没有交换机的情况下,一个以太网就是一个碰撞域,局域网通信的过程中,主机对收到的报文确认是否是发给自己的,是通过目标MAC地址判定。这里可以试着从线程访问共享资源与互斥角度来理解局域网通信原理
下面将视角聚焦于同一局域网内两台正在通信的计算机,以下面的简化图为例:
根据TCP/IP协议,不同层有不同层的协议,所以在上面的数据传递流程中涉及到每一层对数据的封装和解包与分用,如下图所示:
聚焦于一台计算机上的封装过程,如下图所示:
在上图中,报头部分,就是对应协议层的结构体字段,一般叫做报头。除了报头,剩下的叫做有效载荷。而每一层的完整数据被称为报文,所以有报文=报头+有效载荷
但是,不同层对报文的叫法又不尽相同:在传输层叫做段(segment),在网络层叫做数据报(datagram),在数据链路层叫做帧(frame)
应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation)。首部信息中包含了一些类似于首部有多长,载荷(payload)有多长,上层协议是什么等信息。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,根据首部中的「上层协议字段」将数据交给对应的上层协议处理
所以,在网络传输的过程中,数据不是直接发送给对方主机的,而是先要发送方自顶向向下将数据交付给下层协议,最后由底层发送,然后由接收方主机的底层来进行接受,在自底向上进行向上交付
对于解包也是类似的过程:
9、网络协议栈与硬件设备的关系
- 内容 :
- 不同网络设备在协议栈中的角色。
- 集线器(Hub):仅工作在物理层,负责信号的转发。
- 交换机(Switch):主要工作在数据链路层,根据 MAC 地址转发帧。
- 路由器(Router):工作在网络层,根据 IP 地址进行路由选择。
- 防火墙(Firewall):通常涉及传输层和应用层,用于安全过滤。
- 操作系统如何实现协议栈的功能(如 Linux 内核中的 TCP/IP 协议栈)。
- 不同网络设备在协议栈中的角色。
- 扩展点 :
- 讨论现代交换机和路由器如何支持更高层的功能(如三层交换机、四层负载均衡器)。
10、路由协议与动态路由
- 内容 :
- 路由表的概念:存储目标网络和下一跳地址的映射关系。
- 静态路由 vs 动态路由:
- 静态路由:手工配置路由表。
- 动态路由:通过路由协议自动学习路由信息。
- 常见的动态路由协议:
- 内部网关协议(IGP):RIP、OSPF、EIGRP。
- 外部网关协议(EGP):BGP。
- 扩展点 :
- OSPF 的链路状态算法与 RIP 的距离矢量算法的对比。
- BGP 在互联网中的核心作用。