目录
1.认识网络协议
2网络协议的设计
2.1网络通信的问题
2.2网络协议的分层设计
软件分层与网络分层
3.OSI七层网络模型
各层次的介绍如下
4.TCP/IP 五层协议
各层次说明
各层次所解决的问题
5.网络和操作系统之间的关系
单主机下
多主机下
6.重新理解网络协议
1.认识网络协议
要想认识网络协议,先要理解协议是什么。
其实,在大家的日常生活中,多多少少都接触过协议;比如:篮球比赛时,控球后卫持球进攻,摸一摸左耳,队友们便知道这一球要从左路进攻,摸一摸右耳,队友们便知道要从右路进攻。篮球队员们在实现约定好的情况下,根据控球后卫的举动,作出相应的战术变动,可以实现在紧张的环境下高效沟通、高效的进攻,从而提高得分的效率;其实说白了,就是队员们事先约定好,根据控球后卫的举动作出相应的战术调整,避免出现进攻时跟无头苍蝇一样,你觉得要从左边进攻,他觉得要从右边进攻,最后的都不知道自己要干嘛的尴尬场景。
从可以看出,协议的本质其实就是一种约定,大家事先约定好,并且都遵守,从而减小沟通的成本,通信的成本;网络协议是计算机和计算机之间的协议,所以网络协议就是计算机和计算机之间的一种约定,用来解决计算机和计算机之间的通信问题。
2网络协议的设计
2.1网络通信的问题
计算机被发明出来是给人使用的,人们依靠计算机进行工作,进行工作就会产生数据,我的计算机上产生的数据想要发送给你,你的计算机上产生的数据想要发送给我,这就要求计算机拥有通信的能力;可以看出,计算机和计算机之间要通信,本质上是人与人之间要通信。但是人与人之间的距离是会发生变化的,可能很近,可能很远。
距离比较近的话,直接拷贝一下就行了,但是距离比较远的话,数据的发送就会产生一些问题,比如:我们能保证我们要传输的数据,能够到达目标主机上吗?就算能够到达目标主机上,我们能保证数据是完整地到达对方的主机上吗?就算数据完整的到达了对方的主机上,我们能保证对方能够正确的识别和使用接收到的数据吗?如果通信双方的主机位于不同的局域网内,我们如何进行局域网的转发呢?
总结一下,远距离通信具有以下问题:
1.可靠性问题。
2.主机定位问题。
3.如何使用数据的问题。
4.数据报局域网转发问题。
2.2网络协议的分层设计
既然产生了问题,就要解决问题,前面说过,网络协议就是用来解决计算机与计算机之间的通信问题的,那网络协议应该如何设计呢?
软件分层与网络分层
在计算机界有一句话,叫做 “任何问题都可以通过添加一层软件层来解决”,比如:我们在编写代码时,需要在一个函数中实现一个功能,我们就可以将这个功能单独实现成一个函数,让上层代码调用下层的函数。再或者Linux操作系统中,通过在进程和物理内存之间引入虚拟内存来解决直接映射物理内存的地址不连续等问题……
在解决计算机中的问题的时候,为什么要采用分层呢?因为,层和层之间是松耦合的,可以随时替换和维护,并且一层变化并不影响另一层。既然通过分层解决计算机中的问题这么好用,那计算机科学家们就想,计算机之间的通信问题,是不是也可以通过分层来解决呢?是的!
要设计网络协议,本质是要设计解决网络通信问题的方案,方案有好有坏,好的方案一定是可维护、方便拓展的。所以网络协议就被设计成了层状结构。
3.OSI七层网络模型
要设计网络模型,需要有人牵头,于是,国际标准化组织牵头设计了OSI七层网络模型。
OSI七层网络模型,也被称为开放系统互连参考模型(Open System Interconnection Reference Model),是国际标准化组织(ISO)在20世纪80年代初提出的一个网络通信的概念模型。这个模型将网络通信分为七个不同的层次,每个层次都有其特定的功能和任务,旨在使得网络通信的设计、开发和管理更加模块化和可维护。
各层次的介绍如下
1. 物理层
- 功能:物理层是OSI模型的最底层,负责处理物理传输介质上的原始比特流,确保数据在传输媒体上能够以适当的方式传输。
- 主要任务:包括比特编码、电压规范、物理拓扑等。物理层还涉及传输介质的特性、信号的放大、衰减、噪声和干扰的处理,以及物理连接的定义和管理。
- 示例设备:集线器、中继器、网线等。
2. 数据链路层
- 功能:数据链路层负责将原始比特流分割成帧并添加地址信息,以便在直接连接的设备之间传输数据。
- 主要任务:帧的封装、MAC地址的管理、错误检测和纠正、流量控制等。数据链路层还定义了局域网的拓扑结构,如总线拓扑、星型拓扑和环型拓扑等。
- 示例设备:交换机、网卡、网桥等。
3. 网络层
- 功能:网络层负责在不同的网络之间传输数据,路由数据包并确保它们能够到达目标设备。
- 主要任务:IP地址分配、路由选择、数据包转发等。网络层还涉及子网划分、TTL值的处理以及网络层协议的使用,如IP、ICMP和IGMP等。
- 示例设备:路由器、三层交换机等。
4. 传输层
- 功能:传输层提供端到端的数据传输服务,确保数据的可靠性、流量控制和错误检测。
- 主要任务:端口管理、流量控制、数据分段和重组等。传输层协议如TCP和UDP在这一层发挥着重要作用。
5. 会话层
- 功能:会话层管理会话的建立、维护和结束,处理会话层面的错误和同步问题。
- 主要任务:会话控制、会话恢复等。会话层确保两个实体之间能够按照约定的顺序进行数据的收发。
6. 表示层
- 功能:表示层负责数据的格式转换、加密和解密,确保应用程序能够正确地解释数据。
- 主要任务:数据压缩、加密解密、数据格式转换等。表示层为应用层提供的数据进行必要的转换,以适应网络传输的需求。
7. 应用层
- 功能:应用层是OSI模型的最高层,为用户提供网络应用服务,包括文件传输、电子邮件、网页浏览等。
- 主要任务:应用程序接口、用户认证、数据传输等。应用层协议如HTTP、SMTP、FTP等在这一层得到应用。
注意:OSI七层网络模型只是一种标准,相当于是设计图纸,ISO组织并不负责实现网络的层状结构,而是由各平台的开发者来负责实现。
4.TCP/IP 五层协议
前辈们在实现OSI七层网络模型的时候发现,OSI七层网络模型虽然设计的非常好,但它既复杂也不实用,于是将OSI七层模型的上三层合并为一层,实现成了TCP/IP五层协议。
各层次说明
物理层: 负责光/电信号的传递方式。比如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等,集线器(Hub)工作在物理层。
数据链路层: 负责设备之间的数据帧的传送和识别。例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准,交换机(Switch)工作在数据链路层。
网络层: 负责地址管理和路由选择。例如在IP协议中, 通过IP地址来标识一台主机, 并通过路由表的方式规划出两台主机之间的数据传输的线路(路由),路由器(Router)工作在网路层。
传输层: 负责两台主机之间的数据传输。如传输控制协议 (TCP),能够确保数据可靠的从源主机发送到目标主机。
应用层: 负责应用程序间沟通。如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。
各层次所解决的问题
对比我们在网络通信的问题来看:
物理层 —— 解决信号的传输问题。
数据链路层 —— 数据报局域转发的问题。
网络层 —— 主机定位问题
传输层 —— 数据可靠性问题
应用层 —— 如何使用数据的问题
5.网络和操作系统之间的关系
单主机下
TCP/IP五层协议与计算机的层次结构 一 一 对应:
分析上面的图,我们可以得出一下结论:
1、网络层和传输层是在操作系统内部实现的,所以网络也是操作系统源代码的一部分,操作系统内部实现了网络管理。操作系统不允许用户直接访问它内部的数据,所以需要对外提供网络相关的系统调用接口,系统调用接口不太好用,有人对系统调用接口做封装,就形成了网络库。
2、TCP/IP 协议在网络通信里起着最核心的作用,并且这两个协议是在操作系统内部实现的,代表了整个网络协议栈;所以习惯性称之为TCP/IP协议栈。
3、不考虑硬件,网络的下三层属于操作系统及驱动,由操作系统自动完成;应用层属于用户层。
多主机下
一个问题:为什么不同的操作系统的设备之间能实现通信?
因为世界上所有的操作系统,只要想入网,都必须遵守TCP/IP协议,保证不同主机之间的数据通信。网络是属于操作系统源代码的一部分,所以,操作系统和操作系统之间既有个性的一面,也有共性的一面。网络协议栈就是他们的共性。
6.重新理解网络协议
我们知道 操作系统是用大量的C语言和少量的汇编语言写的,而网络协议又是操作系统的一部分,所以网络协议相关的代码也是用C语言写的;
表示协议肯定要有不同数据类型的字段,而C语言中要想完成这个操作,我们只能使用结构体类型来完成。
前面我们说过,协议是一种约定,所以,网络协议在语言角度就是通信双方都能识别的结构体数据类型。
通信双方使用同样的数据类型,经过网络传输,对方一定认识每个字段的大小和含义,于是就能实现网络通信了。