三次握手是TCP建立连接的协议,四次握手是关闭连接的协议
三次握手
为什么3次?有什么作用?是为了建立TCP连接,需要三次握手才能确定对方的接收能力和发送能力都没有问题,指定自己的初始化***为后面的可靠性传送做准备
初始化***有什么用?动态生成,每个连接不同,客户端开始以x,下次x+1,类推;可以根据***组装数据;
三次握手中够可以携带数据吗?第一次不可以,这样可以防止攻击;第三次可以,因为对客户端来说,连接已建立。
SYN攻击?通常半连接队列爆满,Server不断重复确认包直到超时(攻击方不断发送连接请求,但又不确认);
四次握手
半关闭?一方结束数据发送任务后,还能接受来自另一方的数据;即TCP是全双工连接,每个方向需要单独进行关闭;
详细解释
- 客户端发送一个FIN,用来关闭客户到服务器的数据传送。
- 服务器收到,发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
- 服务器关闭客户端的连接,发送一个FIN给客户端。
- 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。同时自身等待2MSL就转到CLOSED状态
等待2msl目的是什么?一定要吗?等待2MSL时间主要目的是:怕最后一个ACK包对方没收到,那么对方在超时后将重发第三次握手的FIN包,主动关闭端接到重发的FIN包后可以再发一个ACK应答包。在实际应用中可以通过设置SO_REUSEADDR选项达到,不必等待2MSL时间结束再使用此端口。
统一的状态图
3次和4次握手正常情况下,入蓝黄红箭头所示: