三次握手与四次挥手的学习笔记

三次握手示意图
三次握手与四次挥手的学习笔记
代入几个关键词,
“半连接队列”,
“ISN是固定的吗(也叫初始化***)”,
“SYN攻击”
“三次握手是否可以中断”
①什么是半连接队列?
客户端向服务端发送完SYN同步位之后,服务端处于SYN_RCVD状态,此时客户端还没有与服务端完成三次握手,服务端会此种状态下的请求放入一个连接队列中,我们会此种状态下的队列称之为半连接队列。已经完成三次握手的连接队列称之为全连接队列。

②ISN是动态生成的,它可能会随着时间的变化而变化,如果它是固定的话,很容易被猜出后续的***,有很大的安全隐患。

③SYN攻击,黑客伪造大量不存在的IP地址,向服务端发送SYN请求包,由于原地址不存在,所以服务端会不断的发送着响应包直至请求超时,这些伪造的SYN请求包会长时间占据着半连接队列,浪费服务端的有限资源,严重时会导致正常的客户端因为队列已满而无法连接或者是被丢弃,造成网络拥塞甚至系统瘫痪。

解决方法?
如果在短时间内看到服务端半连接队列剧增,且源主机地址都是随机的,基本可以断定这是一次SYN攻击,可以使用linux自带的命令来检查SYN攻击。
或者增加半连接队列,缩短连接超时时间
netstat -n -p TCP | grep SYN_RECV

④三次握手是否可以中断,可以中断!服务端收到连接请求之后会将客户端发送连接确认,如果一直收不到客户端的连接确认,就会将他移出半连接队列,释放资源。
三次握手与四次挥手的学习笔记
为什么挥手断开连接需要四次?
服务端收到了客户端发送的FIN关闭请求之后,已经处于等待关闭状态,在收到一条关闭请求之后,服务端的socket连接并不会立即关闭,会先发送一条对客户端关闭请求信息的确认,然后进入最后确认状态,主动向客户端发送FIN关闭请求的确认,在收到客户端的确认请求之后,才会真正关闭连接。
2MSL等待是怎么个回事儿?
首先,1个MSL的意思是一个报文段在被丢弃前在网络上的最大生存时间。2个MSL等待时间正好是接收端与接收端一次发送与接收确信报文包的时间。也就是说发送端发送完最后的确认关闭报文时会等待2MSL,如果这个时间段再次收到了服务端的确认报文,就代表着确认关闭可能丢失了,发送端会重新发送确认关闭的报文,同时重新计时。当2MSL之后,没有收到接收端的报文段,发送端就会关闭,连接也就就此关闭了。