11月15日总结
在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel ,ChannelHandler,ChannelPipeline。
这一篇将学习服务端是如何构建新的连接。
一丶网络包接收流程#
当客户端发送的网络数据帧通过网络传输到网卡时,网卡的DMA引擎将网卡接收缓冲区中的数据拷贝到DMA环形缓冲区,数据拷贝完成后网卡硬件触发硬中断,通知操作系统数据已到达。
随后网卡中断处理程序将DMA环形缓冲区的数据拷贝到sk_buffer,sk_buffer位于内核中,它提供了一个缓冲区,使得网卡中断程序可以将他接收到的数据暂存起来,避免数据丢失和切换。
随后发起软中断,网络协议栈会处理数据包,对数据包进行解析,路由,分发(根据目的端口号,分发给对应的应用程序,通过网络编程套接字,应用程序可以监听指定端口号,并接受网络协议栈的数据包)
当新的连接建立时,网络协议处理栈会将这个连接的套接字标记为可读,并生成一个accept事件,这个事件通知应用程序有新的连接需要处理
当已经建立的连接上有数据到达时,网络协议处理栈会将套接字标记为刻度,并生成一个read事件,这个事件通知应用程序有数据可供读取
当应用程序向已经建立的连接写入数据时,如果写

浙公网安备 33010602011771号