zoukankan      html  css  js  c++  java
  • TCP/IP: 插口I/O

    插口层对应的O/I,主要是用于发送数据,接收数据,数据的select选择。

    • 插口缓存:

    缓存的概念是很明白的,每个插口都有一个发送缓存和一个接收缓存。设置缓存是为了加快读取和输出速度。

    • 插口宏和函数

    不一一列举,无聊的函数。

    • write,witev,sendto,sendmsg的系统调用

    这四个函数的作用是往网络连接上发送数据。

    作为内核函数,进程通过内核函数调用,传输到相关协议,如TCP,UDP,ICMP,TP4等。就是一个目的要将进程的数据传输到网络连接的协议栈上。

    然后就是无聊的数据结构和包结构。

    • sendmsg系统调用

    通过这函数可以访问到插口API相关的所有功能。

    这个函数有三个参数:插口描述符:指向msghdr结构的指针;几个控制标志。

    • sendit函数

    无聊的函数。

    • sosend函数

    复杂的函数,但是很重要。sosend函数根据协议支持的语义和缓存限制,将数据和控制信息传送给pr_usrreq函数。sosend从不将数据放在发送缓存中。

    • read,readv,recvfrom,recvmsg系统调用

    所有的插口输入都是由soreceive处理

    从recv,recvmsg,recvit,soreceivr最后到TCP.UDP,ICMP,TP4.这是个连环的过程。

    • recvmsg系统调用

    1复制IOV函数

    2recvit收集数据,并且释放缓存。

    无聊的函数调用

    • recvit函数

    recvit函数,无聊的函数,中转站。。。

    • soreceive函数

    主要作用是从插口的接受缓存传送到进程制定的缓存。

    带外数据OOB

    报文边界

    控制信息和带外数据

    OOB的主要作用是标记和同步。

    • Select系统调用

    selscan函数

    soo_select函数

    selrecord函数

    selwakeup函数

    • 小结:

    本节主要介绍了读写和选择系统调用。

    具体的机制和实现手段细节要具体看。分层的增加和减少未来会动态的变化。

    但是没有什么计算机技术的问题是分层解决不了的。

    千秋邈矣独留我 百战归来再读书
  • 相关阅读:
    GitFlow 工作流指南
    第一个 Spring Boot 应用程序
    Spring Boot MyBatis
    JavaScript的并且&&
    利用JavaScript的%读分秒
    利用JavaScript的%做隔行换色
    利用JavaScript制作计算器
    利用JavaScript制作简易日历
    javascript实现选项卡切换的4种方法
    循环
  • 原文地址:https://www.cnblogs.com/lordwind/p/10892094.html
Copyright © 2011-2022 走看看