Linux中TCP流程详解

本文详细介绍了Linux中TCP服务端的建立过程,包括半连接队列和全连接队列的运作机制,以及网络数据包从网卡到内核的接收流程。重点讲解了accept()、内核线程ksoftirqd的角色,以及如何通过epoll实现单线程接收多个socket数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章知识来源

本文是对张彦飞(飞哥)的文章的总结,用于学习和技术交流。

飞哥的github:开发内功修炼Github

飞哥的知乎专栏:开发内功修炼知乎专栏

服务端建立

在这里插入图片描述

TCP是一个基于客户端-服务器的网络模型,首先要建立服务端。

Linux中会首先建立一个socket对象,socket中主要是维护了两个链表:
1、半连接队列
服务器收到客户端第一次握手的信息的时候,内核会为其生成一个request_sock对象,用来记录对应的客户端握手信息,并将request_sock对象加入到半连接队列中。

半连接队列其实是一个哈希表,因为需要快速的查找和删除。

2、全连接队列
服务器收到客户端第三次握手的信息的时候,内核会从半连接队列中找出对应的request_sock对象,将其从半连接队列中移除,加入到全连接队列中。

因为request_sock要从半连接队列中查找并移除,所以半连接队列采用了哈希表的组织方式,能够实现快速的查找和删除。

accept()

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值