• IO模型1-初识IO


    1. OSI通讯7层协议

    包括: 物理层, 数据链路层, 网络层, 传输层, 回话层, 表示层, 应用层, 平时我们一般的数据访问操作都是在应用层

    1.1 物理层-电信号层

    • 负责电脑通讯设备与网络媒体之间的互通,
    • 通过硬件连接, 如网卡,电压,针脚等,
    • 传递电信号(0,1,0,1)

    1.2 数据链路层-帧,数据包层

    • 服务物理层, 对电信号分组,

    • 一组电信号称为一个数据包, 或者叫一帧

    • 以前公司都自己分组, 非常乱, 后来统一标准固定为以太网协议Ethernet

    1.3 网络层-IP层

    • 决定路径的选择和转寄, 在不同位置的网络中的两个主机之提供连接和路径选择

    • 定义IP协议, 通过网关+IP地址+MAC地址找到你要通讯的那一台电脑

    1.4 传输层-TCP协议层

    • 网络层通过IP帮我们区分子网,mac帮我们找到主机

    • 电脑上开的应用程序很多, 我们要找到传输到哪个应用程序, 那么就要定义一个端口, 每个应用程序都有自己的端口

    • 传输层就是建立端口到端口的通讯

    • 端口范围: 0-65535, 其中0-1023为系统占用端口

    1.5 会话层-寻址层

    • 负责数据传输中设置和维护两台计算机的通讯连接

    • 不可能每次通讯都要通过网络层寻址, 再通过传输层找到我们的程序, 回话层就是建立一个自动寻址功能

    • 已弃用, 第七层HTTP,RPC,SDP,RTCP有相同的功能

    1.6 表示层-数据协议层

    • 负责数据转换层接受方兼容的格式

    • 已弃用, 第七层HTTP,FTP,Talnet协议有相同的功能

    1.7 应用层-应用程序层

    • 用户使用的都是应用程序, 规定应用程序的数据格式, 传输层可以为很多程序传递数据, 必须有不同的协议规定数据格式, 这些协议就构成了应用层
    • 常用协议: DNS(域名解析), FTP(文件传输), SMTP(邮件传送), SNMP(网络监控), HTTP(超文件传输)等

    注意:

    1. 数据链路层的协议是对电信号分组使用的以太网协议
    2. 应用层的协议则是针对数据格式进行规定

    2. TCP协议-传输层详解

    2.1 应用读取数据

    • 需要系统内核建立连接, 然后通过应用层协议进行读取数据

    2.2 什么是TCP协议

    • 面向连接的
    • 可靠的传输协议

    2.3 TCP的三次握手

    • 主机1想与主机2建立连接
    • 第一次握手: 主机1发送SYN(建立连接的握手信号)到主机2
    • 第二次握手: 主机2接受到信息返回一个SYN+ACK(确认字符)到主机1
    • 第三次握手: 主机1接受数据返回ACK到主机2
      在这里插入图片描述

    2.4 TCP的四次挥手

    • 主机1要与主机2断开连接
    • 第一次挥手: 主机1发送fin到主机2, 表示我想要断开连接
    • 第二次挥手: 主机2返回fin+ack到主机1, 表示我知道你想要断开
    • 第三次挥手: 主机2返回fin到主机1, 告诉主机1我也想要断开
    • 第四次挥手: 主机1接收信息, 返回ACK, 至此连接断开
    • 其中在第二次挥手到第三次挥手过程中, 主机1要等待主机2的也想要断开的信息, 才能继续挥手
      在这里插入图片描述

    2.5 Socket

    • 一个socket就是一个连接, socket都是唯一的

    • socket-套接字, 就是客户端的ip+port和服务端的ip+port, 一起组成一个socket

    • 只要ip1:port1 - ip2:port 其中一个变化就是另一个socket

    • socket里面有ip-port对, 及资源数据

    3. IO模型

    3.1 BIO模型

    • 同步阻塞IO模型, 服务器通讯实现为一个线程对应一个连接的方式, 客户端有连接, 那么服务器就要启动一个线程, 如果使用单线程, 那么必须到等上一个连接断开才可以继续使用

    3.2 NIO模型

    • 同步非阻塞IO模型,服务器实现一个线程处理多个连接
    • 模式1: 服务器轮训accept所有端口,获取是否有事件发生
    • 模式2: select poll 服务器将连接注册到多路复用器上,通过感知事件,进而处理连接,连接存储在服务器上, 每次要处理连接都要将注册的所有连接信息发送给内核
      • 当有新的连接就在服务器上的selector上注册一下
      • 每次要数据都将注册的所有连接发给内核, 内核判断那个连接数据 准备就绪,返回连接信息
      • 通过内核返回的连接信息, 读取连接中的数据
    • 模式3: epoll 服务器将连接注册到多路复用器上,通过感知事件,进而处理连接,连接存储在服务器和内核上, 每次通过调用epoll_wait获取连接是否有事件发生
      • 调用epoll_create创建一个记事本在内核上
      • 当有连接就调用epoll_ctl_add 将新的连接加入到记事本上
      • 线程只需要调用epoll_wait就可以得知那个socket数据已经准备就绪, 返回连接信息

    3.2.1 select poll模型

    在这里插入图片描述

    3.2.2 epoll模型

    在这里插入图片描述

    • 断开连接直接调用epoll_crtl del将内核记事本上的连接信息删除

    3.3 AIO模型

    • 异步非阻塞IO模型, 采用Proactor模式, 简化程序编写, 有效的请求才启动线程, 优点是当操作系统处理完才通知服务器端启动线程去处理
  • 相关阅读:
    linux文件的隐藏属性
    linux xhost命令
    HTML期末学生大作业-拯救宠物网页作业html+css
    安装Linux虚拟机并在Llinux中安装Redis、MySQL
    《MATLAB 神经网络43个案例分析》:第29章 极限学习机在回归拟合及分类问题中的应用研究——对比实验
    Windows中控制台(cmd)模式下运行程序卡死/挂起现象解决方案(快速编辑模式)
    Security的内容
    Android MediaPlayer IllegalStateException源码分析定位
    GHOST工具访问数据库
    [论文笔记]GLM
  • 原文地址:https://blog.csdn.net/qq_15740267/article/details/127641186