linux内核xyz,结合linux内核源码理解SYN_RECV状态

本文详细探讨了Linux内核2.4.0中TCP连接的SYN_RECV状态,指出这一状态实际上是服务器在收到客户端SYN包并回应SYN+ACK之后,等待ACK确认时所处的状态。在Linux内核中,这一状态的维持时间很短,通常在监听套接字收到ACK包后,连接套接字会迅速转变为ESTABLISHED状态。文章通过内核函数调用分析了这一过程,并解释了为何在实际应用中很少观察到SYN_RECV状态。
摘要由CSDN通过智能技术生成

(以下基于linux内核2.4.0)

SYN_RECV状态,顾名思义,是收到SYN包后应该置的状态。关于SYN_RECV状态,受某些教科书的误导,我以前一直理解为服务器收到SYN包后应该置此状态。也没细想到底是置那个socket的状态,最近在看三次握手协议在linux内核中的实现时,才仔细思考这个问题应该是置连接套接字的状态而非监听套接字的状态。

通常,SYN包只用于TCP三次握手协议中。常见的tcp三次握手协议过程(当然还有同时连接、

半连接等其它一些情况)如下:

1、client SYN包---> server

2、client 3、client ACK包---> server

根据tcp状态图,对应下述4个状态的变化

a、client发送完毕,状态变成SYN_SEND;

b、server收到SYN报并发送ack确认包和SYN包,状态变为SYN_RECV

c、client发送ack包完毕,状态变成ESTABLISHED

d、server发送ack包完毕,状态变成ESTABLISHED

在linux内核中,上述几个状态对应为TCP_SYN_SEND、TCP_SYN_RECV、TCP_ESTABLISHED.

RFC793中关于SYN_RECV状态的描述如下:

SYN-RECEIVED - represents waiting for a confirming connection

request acknowledgment after having both received and sent a

connection request.

从上面可以看出,这个状态是在本端接收到对端连接请求,并发送连接对端请求后,等待对端应答时所置的状态。所以,本质上连接的过程是双方请求应答的来

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值