深入理解TCP

TCP的三次握手过程中,第一次和第二次握手不可携带数据,以防恶意攻击。第三次握手客户端可以携带数据,因已确认服务器接收和发送能力正常。即使服务器不调用accept,客户端仍能建立连接。客户端关闭连接后,服务器会进入CLOSE_WAIT状态,直到服务进程退出。
摘要由CSDN通过智能技术生成

TCP第三次握手携带数据
第一次和第二次是不可以携带数据的,但是第三次是可以携带数据的。
加入第一次握手可以携带数据的话,那对于服务器来说太危险了,如果有人恶意攻击服务器的话,每次都在第一次握手中的SYN报文中放入大量的数据,并且不断的重发SYN报文,服务器就会花费很多时间和内存空间去接收这些报文。
第三次握手,此时客户端已经处于ESTABLISHED状态。对于客户端来说,已经建立了连接,并且已经知道服务器的接收和发送能力是正常的,所以也就可以携带数据了。

服务器不调用accept
即使服务端不调用accept,客户端依然可以连接。

当客户端调用connect时,将触发三次握手过程,客户端首先发送SYN请求分组,此时服务器会将请求放入SYN队列,同时向客户端发送ACK确认报文,然后客户端向服务器再次发送ACK确认报文。服务器收到ACK确认报文后,将SYN队列中的连接请求移入accept队列中。此时三次握手结束,即TCP连接成功建立。然后内核通知用户空间的阻塞的服务进程,服务进程调用accept仅仅是从accept队列里取出一个连接而已。也就是说客户端调用connect连接服务器,与服务器调用accept“接收”连接是两个独立的过程。

但是客户端调用close函数关闭连接后,服务器就会处于CLOSE_WAIT状态,注意最后的CLOSE_WAIT状态会一直存在,直到服务器进程退出。当客户端进程退出后,客户端保留的FIN_WAIT2状态自然释放,但服务器由于未获得connection的文件描述符无发主动调用close函数,因此服务器的CLOSE_WAIT状态会一直持续到服务进程退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DaysAway

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值