TCP协议栈
TCP协议栈
listen
- 构建tcp control block(tcb)
- 将状态置为listen
connect
int connect(fd, serveraddr, sizeof); |
- 找到fd对应的tcb
- 发送syn包
accept
int accept(fd, clientaddr, &len); |
确定网络包在半连接队列的节点
- 通过五元组(sip, dip, sport, dport, proto)
- tcb通过五元组确定其唯一性
bind
socket创建一个fd
bind将fd与tcb (ip, port)进行绑定,但是不改变tcb状态
close
大量close_wait
- 没有及时调用close:将清理缓冲区剩余数据交给线程池,进行异步操作
大量fin_wait_2状态
- 设置TIME_WAIT超时(影响fin_wait_2等待时间),超时强制退出该状态
双方同时close
- 进入closing,双方进入TIME_WAIT状态
TCP/IP协议栈实现
拿到网络数据
raw socket:原始套接字
netmap
dpdk
网络连接主要由VFS来解决,DPDK不能提高网络并发量
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 LZY的Code生活!