文章知识来源
本文是对张彦飞(飞哥)的文章的总结,用于学习和技术交流。
飞哥的github:开发内功修炼Github
飞哥的知乎专栏:开发内功修炼知乎专栏
服务端建立
TCP是一个基于客户端-服务器的网络模型,首先要建立服务端。
Linux中会首先建立一个socket对象,socket中主要是维护了两个链表:
1、半连接队列
服务器收到客户端第一次握手的信息的时候,内核会为其生成一个request_sock对象,用来记录对应的客户端握手信息,并将request_sock对象加入到半连接队列中。
半连接队列其实是一个哈希表,因为需要快速的查找和删除。
2、全连接队列
服务器收到客户端第三次握手的信息的时候,内核会从半连接队列中找出对应的request_sock对象,将其从半连接队列中移除,加入到全连接队列中。
因为request_sock要从半连接队列中查找并移除,所以半连接队列采用了哈希表的组织方式,能够实现快速的查找和删除。