TCP 连接三次握手、四次挥手
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP 连接三次握手、四次挥手相关的知识,希望对你有一定的参考价值。
参考技术ATCP(传输控制协议)
IP(网际协议)
建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的建立。
进行三次握手的主要作用就是为了: 确认双方的接收能力和发送能力是否正常、指定自己的初始化序列号为后面的可靠性传送做准备。
需要三次握手才能确认双方的接收与发送能力是否正常。
服务器第一次收到客户端的 SYN 之后,就会处于 SYN_RCVD 状态,此时双方还没有完全建立其连接,服务器会把此种状态下请求连接放在一个队列里,称之为 半连接队列 。
ISN 是动态生成的 :三次握手的其中一个重要功能是客户端和服务端交换 ISN(Initial Sequence Number),以便让对方知道接下来接收数据的时候如何按序列号组装数据。如果 ISN 是固定的,攻击者很容易猜出后续的确认号。
第一次、第二次握手不可以携带数据, 第三次可以 。
服务器端的资源分配是在二次握手时分配的,而客户端的资源是在完成三次握手时分配的 。
SYN攻击 :Client在短时间内伪造大量不存在的IP地址,并向Server不断地发送SYN包,Server则回复确认包,并等待Client确认,由于源地址不存在,因此Server需要不断重发直至超时,这些伪造的SYN包将长时间占用未连接队列,导致正常的SYN请求因为队列满而被丢弃,从而引起网络拥塞甚至系统瘫痪。SYN 攻击是一种典型的 DoS/DDoS 攻击。
防御
断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。
这是因为由TCP的半关闭(half-close)造成的: TCP提供了连接的一端在结束它的发送后还能接收来自另一端数据的能力。
因为TCP的半关闭,客户端节数发送后仍然可以接受数据,确保服务端的数据完全传输完成。
为了保证客户端发送的最后一个ACK报文段能够到达服务器。
SYN 相当于是询问,ACK 相当于是确认
TCP为什么是三次握手,为什么不是两次或者四次 && TCP四次挥手
不要再问我三次握手和四次挥手
TCP三次握手与四次挥手
最近在了解web服务器方面的一些基本知识,看到了TCP的三次握手与四次挥手,在此记录以下。
1. TCP协议
TCP协议,传输控制协议(英语:Transmission Control Protocol,缩写为 TCP)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义。
TCP通信需要经过创建连接、数据传送、终止连接三个步骤。
2. 三次握手与四次挥手
三次握手发生在创建连接阶段。客户端和服务器总共需要发送三个包。
第一次握手:客户端发送连接请求
第二次握手:服务器端选择自己 ISN 序列号,放到 Seq 域里,并将客户端的ISN加1发送确认应答。
第三次握手:客户端把服务器发来的ISN加1,发送确认包。
四次挥手发生在终止连接阶段。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close()
操作即可产生挥手操作。
第一次挥手:假如客户端想关闭连接,发送FIN标志为1的包,表明自己不再发送数据,但还可以接收数据。
第二次挥手:服务器发送一个确认包,确认收到了客户端的终止请求。发送完确认包后,服务器进入等待状态,等待自己的数据发送完,客户端也进入等待状态,等待服务器发送关闭信号。
第三次挥手:服务器准备关闭连接,向客户端发送FIN标志为1的包,然后进入LAST-ACK状态,等待客户端的确认。
第四次挥手:客户端接收到服务器的关闭请求,发送确认包,然后进入等待状态,等待服务器可能发送的要求重传ACK包。服务器接收到确认包后就关闭连接,如果没有接收到,一段时间后就会重新发送关闭连接。客户端等待了某个固定时间(两个最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接
3. 为什么连接需要三次关闭需要四次
因为连接时只需要互相确认,没有数据传送,所以服务器端的发送和确认可以合并为一次;结束时服务器端可能还在传送数据,不能直接发送关闭信号,需要等待服务器发送完数据,才发送关闭信号。
参考链接:
[1] https://hit-alibaba.github.io/interview/basic/network/TCP.html
以上是关于TCP 连接三次握手、四次挥手的主要内容,如果未能解决你的问题,请参考以下文章