TCP 连接三次握手、四次挥手

2021-08-13  本文已影响0人  追星人小豪

前言

TCP/IP(Transmission Control Protocol/Internet Protocol) 是能够在多个不同网络间实现信息传输的协议簇。

TCP(传输控制协议)

IP(网际协议)

TCP 报文


三次握手

建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。

进行三次握手的主要作用就是为了:确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。

三次握手流程

1. 为什么需要三次握手?

需要三次握手才能确认双方的接收与发送能力是否正常。

2. 半连接队列

服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,称之为半连接队列

3. ISN(Initial Sequence Number)是固定的吗?

ISN 是动态生成的:三次握手的其中一个重要功能是客户端和服务端交换 ISN(Initial Sequence Number),以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果 ISN 是固定的,攻击者很容易猜出后续的确认号。

4. 三次握手过程中可以携带数据吗?

第一次、第二次握手不可以携带数据,第三次可以

5. SYN攻击

服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的

SYN攻击:Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。

防御


四次挥手

断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。

这是因为由TCP的半关闭(half-close)造成的:TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。

四次挥手流程


1. 挥手为什么需要四次?

因为TCP的半关闭,客户端节数发送后仍然可以接受数据,确保服务端的数据完全传输完成。

2. 四次挥手释放连接时,等待2MSL的意义

MSL是Maximum Segment Lifetime的英文缩写,可译为“最长报文段寿命”,它是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。

为了保证客户端发送的最后一个ACK报文段能够到达服务器。

SYN 相当于是询问,ACK 相当于是确认

参考

TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手

不要再问我三次握手和四次挥手

上一篇下一篇

猜你喜欢

热点阅读