计算机网络 | I/O模型、网络模型(OSI七层及TCP/IP四层)

2023-06-01 10:23:29

在这里插入图片描述

欢迎关注博主 Mindtechnist 或加入【Linux C/C++/Python社区】一起学习和分享Linux、C、C++、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和技术。



专栏:《网络编程》


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就不会发生阻塞。整个系统性(applinux内核协议栈配合更好了)能优化、提供了。

信号驱动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七层模型

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模型

一般在应用开发过程中,讨论最多的是TCP/IP模型。

应用层 —— telent ftp 
传输层 —— tcp udp 
网络层 —— ip
链路层 —— mac 

在这里插入图片描述
在这里插入图片描述


更多推荐

学会用AI:释放创意,解放双手,工作再多也不慌

随着人工智能(AI)技术日渐成熟,AI在软件开发领域的应用也更加广泛。以前我们谈到AI时,常常会想到复杂的算法和深奥的理论,但如今,AI正在悄然改变着程序员的日常工作方式。从AI代码生成模型到AI编程助手应用,它们不仅仅是一小部分,更是未来程序开发的新趋势。过去,编写代码一直是一项枯燥乏味、需要长时间投入的工作。尤其是

SQL server 创建存储过程

SQLServer如何创建存储过程存储过程:可以理解为完成特定功能的一组SQL语句集,存储在数据库中,经过第一次编译,之后的运行不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来调用存储过程。如何创建存储过程创建存储过程可以有两种方式:一是在SSMS中界面操作创建存储过程,而后修改其中的S

【MediaSoup---源码篇】(二)Router

概述Router:路由对象,类似于房间的功能,保存了流之间的订阅关系,它接收Producer的数据并转发给订阅该Producer的ConsumerRouter继承了以下类:RTC::Transport::Listener,RTC::RtpObserver::Listener,Channel::ChannelSocket

全面解析缓存应用经典问题

1、前言随着互联网从简单的单向浏览请求,发展为基于用户个性信息的定制化以及社交化的请求,这要求产品需要做到以用户和关系为基础,对海量数据进行分析和计算。对于后端服务来说,意味着用户的每次请求都需要查询用户的个人信息和大量的关系信息,此外大部分场景还需要对上述信息进行聚合、过滤、排序,最终才能返回给用户。CPU是信息处理

接口自动化测试完整版(文档+视频)

1.什么是接口测试顾名思义,接口测试是对系统或组件之间的接口进行测试,主要是校验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系。其中接口协议分为HTTP,WebService,Dubbo,Thrift,Socket等类型,测试类型又主要分为功能测试,性能测试,稳定性测试,安全性测试等。在分层测试的“金字塔”模型中

QT windows dpi变化导致的界面异常处理

问题:已经在UI界面中利用布局设计好界面,但是运行程序后显示的界面出现错乱,而且在做出一些修改后重新构建,运行时界面无变化。目录一、解决UI设计界面与运行时显示界面不一致的问题1、导致该现象的原因有:显示屏分辨率过高2、使用布局和设置控件sizePolicy二、解决修改界面后重构,运行无变化的问题一、解决UI设计界面与

Spring | Spring监听器使用与入门

引言在复杂的软件开发环境中,组件之间的通信和信息交流显得尤为重要。Spring框架,作为Java世界中最受欢迎的开发框架之一,提供了一种强大的事件监听器模型,使得组件间的通信变得更加灵活和解耦。本文主要探讨Spring事件监听器的原理、使用方法及其在实际开发中的应用,希望为广大开发者提供实用的参考。1.1Spring事

2023年中国研究生数学建模竞赛赛题浅析

为了更好的帮助大家第一天选题,这里首先为大家带来各个赛题的赛题浅析,分析对应赛题之后做题阶段可能会遇到的各种难点。稍后会带来D题的详细解析思路,以及相关的其他版本解题思路成品论文等资料。赛题难度评估:A、B>C>E、F>D选题人数评估:D>E、F>C>A、BA题WLAN网络信道接入机制建模B题DFT类矩阵的整数分解逼近

【Java 并发编程】CopyOnWriterArrayList 详解

CopyOnWriterArrayList详解1.ArrayList1.1ArrayList和LinkedList的区别1.2ArrayList如何保证线程安全2.CopyOnWriteArrayList原理3.CopyOnWriteArrayList的优缺点3.1优点3.2缺点4.源码分析4.1两个成员变量4.2构造

通过篡改cred结构体实现提权利用

前言在之前的HeapOverflow文章中,作者还构造了任意地址读写的操作,使用了任意地址读写去进行提权,还挺有意思的,记录一下如何利用任意地址读写进行提权。作者利用任意地址读写分别改写modprobe_path以及cred结构体去实现提权的操作,由于改写modprobe_path的方法之前已经研究过了,因此现在详细记

【Qt图形视图框架】QGraphicsScene分析

QGraphicsScene分析描述注意使用示例属性方法成员方法(较重要的)公共槽函数:信号:事件描述QGraphicsScene类提供了一个用于管理大量2D图形项的表面。该类充当QGraphicsItems的容器。它与QGraphicsView一起用于在2D表面上可视化图形项,如线条、矩形、文本,甚至自定义项。QGr

热文推荐