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函数

  • 小结:

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

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

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

千秋邈矣独留我 百战归来再读书
原文地址:https://www.cnblogs.com/lordwind/p/10892094.html