网络IO_草稿图
2024-01-22 16:34:19 1 举报
网络IO_草稿图
作者其他创作
大纲/内容
1.数据从外部到达网络
复制完成
9.唤醒被阻塞的用户程序
进程C
总线
Client-2
监听
网卡
DMA拷贝
Client
文件读取缓冲区
rdllist
主动关闭
系统调用
递交在aio_read中指定的信号中
数据链路层
工作队列
应用层
Socket
注册
用户
recvfrom
CPU拷贝
2.网卡把数据DMA到内存
EWOULDBLOCK
ThreadPool
文件描述符
等待队列
buffer
内存
Client-1
socket = new Socket()bind()accept()read()
9999
应用进程recvfrom
thread
1
内核空间
磁盘
物理层
进程继续执行
5.kssoftirqd进程处理软中断,调用网卡驱动收包
Thread
CLOSED
返回可读条件
FIN_WAIT-2
处理数据报
ESTABLISHED
无数据报准备好
将数据从内核复制到用户空间
进程B
应用进程缓冲区(任意大小)
用户程序
套接字发送缓冲区(SO_SNDBUF)
拷贝
OSI七层模型
内核
SYN_RECV
....
进程A
引用
3
应用进程
等待数据
硬件控制器
read完成
LISTEN
客户端连接
返回
直接内存
LAST_ACK
接收缓冲区
ServerSocketChannel
eventpoll
中断处理程序
递交SIGIO
Client-3
用户进程
信号处理程序处理数据报
返回成功提示
Socket发送缓冲区接收缓冲区等待列表
6.保存为skb
selector(多路复用器)
客户端/服务端
socketchannel
.......
SYNC_SEND
网络设备缓冲区
表示层
内存映射(MMAP)
task
数据报准备好复制数据报
FIN_WAIT-1
........
网络
Server
传输层
开始read
就绪事件列表rdllist
内核无数据准备好
操作系统物理内存
发送数据
SelectionKey
7.协议层处理skb
进程受阻于select调用,等待可能多个套接字中的任一个变为可读
4.响应硬中断,发出软中断
数据复制到应用缓冲区期间进程阻塞
ESTABLISH
TIME_WAIT等待2*MSL
开始send
2
socket缓冲区
网络层
数据复制到引用缓冲区期间进程阻塞
添加到等待列表
复制数据报
PIPE
channel注册完返回的SelectionKey与Channel绑定
数据报准备好
CLOSE_WAIT
返回成功指示
拷贝完成
会话层
拷贝数据报
进程反复调用recvfrom等待返回成功指示(轮询)
8.放入socket的接收队列
文件描述符列表
套接字发送缓冲区(SO_SNDBUF)
sigaction系统调用
JVM
进程阻塞于recvfrom的调用
select
发送缓冲区
3.硬中断通知CPU
send完成
将数据从内核拷贝到用户空间
内核无数据报准备好
CPU
建立SIGIO的信号处理程序
信号处理程序recvfrom
TCP/IP四层模型
0 条评论
下一页