朋友们、伙计们,我们又见面了,本期来给大家带来网络协议相关的知识点,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成!
C 语 言 专 栏:C语言:从入门到精通
数据结构专栏:数据结构
个 人 主 页 :stackY、
C + + 专 栏 :C++
Linux 专 栏 :Linux
目录
1. 网络发展
2. 协议
2.1 为什么要有协议
2.2 协议
3. 网络协议
3.1 网络通信的问题
3.2.1 OSI七层模型
3.2.2 TCP/IP五层(或四层)模型
3.3 网络协议栈和OS
4. 重谈协议
1. 网络发展
独立模式:计算机之间相互独立;
网络互联: 多台计算机连接在一起, 完成数据共享;
局域网LAN: 计算机数量更多了, 通过交换机和路由器连接在一起;
广域网WAN: 将远隔千里的计算机都连在一起。
所谓 "局域网" 和 "广域网" 只是一个相对的概念. 比如,我们有 "天朝特色" 的广域网, 也可以看做一个比较大的局域网。
2. 协议
所谓的协议,其实就是一种“约定”
2.1 为什么要有协议
我们的计算机是遵循冯诺依曼体系结构的,磁盘、显示器、键盘等,这些硬件设备是通过总线连接在一起的,所以这些硬件之间可以直接通信,所以单台的机器也可以看做是一个网络结构。
但是两个设备如果要进行网络通信,两个设备不可能总是像计算机硬件这样离得比较近,还能用线连接在一起,此时如果距离变长,那么通信起来会有什么问题呢?
- ① 如果发送的数据丢失(丢包)怎么办?
- ② 既然距离变长了,如何定位到目标机器?
- ③ 如何保证我们的数据,在经历了无数个设备之后,还能准确无误的将数据推送到目标机器?
所以,就需要有一种协议,俗话说就是双方约定一下。
就好比你和父母亲每个月通过电话联系时,又不想支付话费,那么就可以约定,铃声响一下就表示你没钱了,响两下就用来报平安,如果大于两声就表示需要父母接电话了,也就是类似于这种约定才可以在网络通信时讲数据准确无误的推送给对方。
2.2 协议
计算机之间的传输媒介是光信号和电信号。通过 "频率" 和 "强弱" 来表示 0 和 1 这样的信息。 要想传递各种不同的信息, 就需要约定好双方的数据格式。
但是呢:
3. 网络协议
3.1 网络通信的问题
在网络中会有许多机器,我们从一个主机发送给另一个主机的数据,是一个个机器走的,由于通信的距离变长,那么就会出现许多的问题:
- ① 怎么保证先把数据交给下一跳主机;
- ② 转发的过程中,如果进行定位以及路径的选择;
- ③ 如果报文在转发时出现错误又或者是丢失。
这三点其实就是如何将数据可靠的从A送到B,这个问题是通过协议来解决的,说白了网络就是由很多协议构成!
- ④ 当数据送达时,还要解决如何使用数据的问题。
3.2 网络的解决方案 -- 网络层状结构
为什么要是一种层状结构呢?
就比如我们打电话,打电话时,我们是通过用户向一个电话发送数据,然后又传输到另一个电话,电话之间传输的过程我们不需要考虑,我们只需要知道我向电话发送的数据没有问题就好了。
![]()
分层最大的好处在于 "封装" ,就比如面向对象的例子;
通过层状结构可以完成软件的解耦合,便于对软件的维护(更新、替换、优化等)。
3.2.1 OSI七层模型
- OSI(Open System Interconnection,开放系统互连)七层网络模型称为开放式系统互联参考模型,是一个逻辑上的定义和规范;
- 把网络从逻辑上分为了7层. 每一层都有相关、相对应的物理设备,比如路由器,交换机;
- OSI 七层模型是一种框架性的设计方法,其最主要的功能使就是帮助不同类型的主机实现数据传输;
- 它的最大优点是将服务、接口和协议这三个概念明确地区分开来,概念清楚,理论也比较完整. 通过七个层次化的结构模型使不同的系统不同的网络之间实现可靠的通讯;
![]()
但是, 它既复杂又不实用;所以我们按照TCP/IP四层模型来理解。
3.2.2 TCP/IP五层(或四层)模型
TCP/IP是一组协议的代名词,它还包括许多协议,组成了TCP/IP协议簇。
TCP/IP通讯协议采用了5层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。
- 物理层: 负责光/电信号的传递方式。如现在以太网通用的网线(双绞 线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤, 现在的wifi无线网使用电磁波等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等. 集线器(Hub)工作在物理层。
- 数据链路层: 负责设备之间的数据帧的传送和识别。 例如网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作. 有以太网、令牌环网, 无线LAN等标准。 交换机(Switch)工作在数据链路层。
- 网络层: 负责地址管理和路由选择。 例如在IP协议中, 通过IP地址来标识一台主机,并通过路由表的方式规划出两台主机之间的数据传输的线路(路由). 路由器(Router)工作在网路层。
- 传输层: 负责两台主机之间的数据传输。 如传输控制协议 (TCP), 能够确保数据可靠的从源主机发送到目标主机。
- 应用层: 负责应用程序间沟通,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 我们的网络编程主要就是针对应用层
![]()
物理层我们考虑的比较少。因此很多时候也可以称为 TCP/IP四层模型。
我们再回归上面网络通信的问题:
![]()
通过TCP/IP协议栈就可以解决网络通信的问题。
3.3 网络协议栈和OS
网络协议栈和操作系统的关系是非常密切的(一体的)
在OS中,用户要想访问系统的硬件资源,就需要调用系统调用从而贯穿整个操作系统进行访问,如果将OS和网络协议栈结合在一起来看的话:
所以在网络角度来说,用户要使用网络,就要贯穿整个网络协议栈,本质就是要使用OS,所以就需要有网络的系统调用接口,以及一些网络库等。
如果有多个OS需要进行网络通信,即使是不同的OS,但是网络协议栈是一样的,可以进行通信,虽然是不同的系统,但是对于网络的系统调用接口是大同小异的。
不同的机器可能会收到许多报文,那么要不要对这些报文进行管理呢?当然是需要的,所以先描述、再组织,所以对于报文的管理就变成了对链表、队列的增删查改,所谓的这个网络协议栈 本质就是对这样的数据结构进行增删查改。
4. 重谈协议
协议通常是用结构化字段表征的,这个结构化字段定义的对象,我们叫做协议报头(双方都认识的结构字段)当一个主机向另外一个主机发送报文时,对报头的这种类型都认识,这就是一种约定。
协议就好比我们在网上买东西时,我们收到的不仅仅有我们买的快递,还有一个快递单,其实快递单本身就是一种约定,就是一种协议,此时的快递单就是一种报头。