关于tcp协议三次握手中的一些细节

之前回答别人的疑问,张口说出了,synflood攻击的原理是tcp建立连接后,分配了资源,苦苦等待造成了服务器资源的耗尽。

进而被追问,syn包发起并请求,客户端没有回复ack,怎么会造成服务器资源的消耗,此时还没有建立起完整的连接。一时语塞,十分尴尬。

服务器何时分配资源

第二次握手:服务器的TCP收到连接请求报文段后,如同意建立连接,就向客户机发回确认,并在OS内核中为该TCP连接分配TCP缓存和变量。在确认报文段中,SYN和ACK位都被置为1,确认号字段的值为x+1(表示希望收到的下一个字节的序号为x+1),并且服务器随机产生起始序号seq=y(确认报文不携带数据,但也要消耗掉一个序号)

第三次握手包丢失

或者因为第三次握手包因为链路的原因导致晚于数据包到达服务器。tcp如何处理这个问题。

不同的状况下有不同的处理方式。
情况一:第二次握手包因为某些原因未送达客户端,那么客户端肯定不会回复ack包。此时服务器会等待,直到服务器的计时器超时后,会重新发送一个syn+ack。如果仍然没有收到回复,计时器超时后,会发送rst,关闭连接,释放系统资源。

情况二:客户端回复ack包,但是丢失了,服务器会等待。此时如果没有实际的数据传输,那么超时后,服务器重传syn+ack。类似情况一。

情况三:客户端回复ack包后,可能丢失了,或者晚于数据包到达。服务端,并不会直接简单的发送syn+ack。因为数据包中也存在着ack的标识。

In other words, if the ACK is dropped but the next packet is not dropped, then everything is fine. Otherwise, the connection must be reset. Which makes perfect sense.
如果后面的数据包没丢失,那么tcp连接没有问题。否则连接会被重置。

可见,tcp协议设计的是如此的精妙,他支持着pc,移动终端,智能家居,摄像头等等的可靠连接。

参考资料

第三次握手丢包tcp如何处理:https://stackoverflow.com/questions/16259774/what-if-a-tcp-handshake-segment-is-lost

http://blog.csdn.net/leo_walker/article/details/51627760

©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页