欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。
I/O模型、网络模型
- I/O模型
- 阻塞I/O
- 非阻塞I/O
- I/O复用
- 信号驱动I/O
- 异步I/O
- 网络模型
- OSI七层模型
- TCP/IP四层模型
专栏:《网络编程》
I/O模型
阻塞I/O
①当上层应用app1
调用recv
系统调用时,如果对等方没有发送数据(缓冲区没有数据),上层应用app1
将阻塞(默认行为,被linux
内核阻塞);
②当对等方发送了数据,linux内核recv
端缓冲区,有数据后,内核会把数据copy
给用户空间。然后上层应用app1
解除阻塞,执行下一步操作。
非阻塞I/O
①上层应用程序app2
将套接字设置成非阻塞模式。
②上层应用程序app2
轮询调用recv
函数,接受数据。若缓冲区没有数据,上层程序app2
不会阻塞,recv
返回值为-1,错误码是EWOULDBLOCK
。
③上层应用程序不断轮询有没有数据到来。会造成上层应用忙等待。大量消耗CPU。很少直接用。应用范围小,一般和selectIO
复用配合使用。
I/O复用
①上层应用程序app3
调用select
机制(该机制有linux内核支持,避免了app3忙等待。),进行轮询文件描述符的状态变化。
②当select
管理的文件描述符没有数据(或者状态没有变化时),上层应用程序app3也会阻塞。
③好处select
机制可以管理多个文件描述符
④select
可以看成一个管理者,用select
来管理多个IO
。
一旦检测到的一个I/O
或者多个IO
,有我们感兴事件,发生,select
函数将返回,返回值为检测到的事件个数。进而可以利用select
相关api
函数,操作具体事件。
⑤select
函数可以设置等待时间,避免了上层应用程序app3
,长期僵死。
⑥和阻塞IO模型相比,selectI/O
复用模型相当于提前阻塞了。等到有数据到来时,再调用recv
就不会发生阻塞。整个系统性(app
和linux
内核协议栈配合更好了)能优化、提供了。
信号驱动I/O
① 上层应用程序app4建立SIGIO
信号处理程序。当缓冲区有数据到来,内核会发送信号告诉上层应用程序app4。
②上层应用程序app4
接收到信号后,调用recv
函数,因缓冲区有数据,recv
函数一般不会阻塞。
③这种用于模型用的比较少,属于典型的“拉模式”。即:上层应用app4
,需要调用recv
函数把数据拉进来。
异步I/O
①上层应用程序app5调用aio_read
函数,同时提交一个应用层的缓冲区buf
;调用完毕后,不会阻塞。上层应用程序app5
可以继续其他任务。
②当tcpip
协议缓冲区有数据时,linux
主动的把内核数据copy
到用户空间。然后再给上层应用app5
发送信号;告诉app5
数据有了,赶快处理吧。
③典型的“推模式”。
④ 效率最高的一种形式,上层应用程序app5有异步处理的能力(在linux内核的支持下,言外之意:处理其他任务的同时,也可支持IO
通讯)。
...
网络模型
OSI七层模型
①物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0
转化为电流强弱来进行传输,到达目的地后再转化为1、0
,也就是我们常说的数模转换与模数转换)。这一层的数据叫做比特。
②数据链路层:定义了如何让格式化数据以帧为单位进行传输,以及如何让控制对物理介质的访问。这一层通常还提供错误检测和纠正,以确保数据的可靠传输。如:串口通信中使用到的115200、8、N、1
③网络层:在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。Internet的发展使得从世界各站点访问信息的用户数大大增加,而网络层正是管理这种连接的层。
④传输层:定义了一些传输数据的协议和端口号(WWW端口80等),如:TCP(传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据),UDP(用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
⑤ 会话层:通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。主要在你的系统之间发起会话或者接受会话请求(设备之间需要互相认识可以是IP也可以是MAC或者是主机名)。
⑥ 表示层:可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。例如,PC程序与另一台计算机进行通信,其中一台计算机使用扩展二一十进制交换码(EBCDIC),而另一台则使用美国信息交换标准码(ASCII)来表示相同的字符。如有必要,表示层会通过使用一种通格式来实现多种数据格式之间的转换。
⑦ 应用层:是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
TCP/IP四层模型
TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示:
一般在应用开发过程中,讨论最多的是TCP/IP模型。
应用层 —— telent ftp
传输层 —— tcp udp
网络层 —— ip
链路层 —— mac