(一)三次握手

1、过程
- 第一次握手:建立连接时,客户端发送syn包到服务器,并进入SYN_SENT状态,等待服务期确认;
- 第二次握手:服务器收到syn包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK,发送完毕客户端和服务器进入TCP连接成功状态,完成三次握手
2、为什么不是两次
在服务端对客户端的请求来进行回应(第二次握手)后,就会理所当然的认为连接已建立,二如果客户端没有收到服务端的回应呢,此时,客户端仍认为连接未建立,服务端会对已建立的连接保存必要的资源,如果大量的这种情况,服务端会崩溃。
(二)四次挥手

因为TCP连接是全双工的,所以每个方向都要单独关闭,当一方完成数据传送任务时,发送一个FIN表示终止这个方向的连接,接收到FIN的一方还可以发送数据,首先进行关闭的一方执行主动关闭,另一方执行被动关闭
1、过程
- 客户端发送一个FIN,用来关闭客户端到服务器的数据传送
- 服务器收到这个FIN,返回给客户端一个ACK,确认序号为收到的序号加一
- 服务器关闭与客户端的连接,发送一个FIN给客户端
- 客户端发送一个ACK确认,确认序号为收到的序号加一
2、四次挥手原因
在大多数情况下ACK报文和FIN报文是分开发送的,当收到对方的FIN时,仅仅表示对方没有数据要发送给你了,但是有可能你还有数据没有发送完,所以未必会马上关闭SOCKET,有可能还要发送一些数据之后再发送FIN报文表示你同意现在可以关闭连接。
1286

被折叠的 条评论
为什么被折叠?



