TCP协议三次握手
TCP协议是面向连接的,所谓面向连接,就是当计算机双方通信时必须经过先建立连接,然后传送数据,最后拆除连接的三个过程:
第一次握手: 客户端向服务器端发出连接请求,等待服务器确认.(SYN报文)
客户端发送一个含SYN同步标志的 TCP报文,SYN同步报文会指明客户端使用的端口以 及TCP连接的初始序号;客户端随机初始化序号(client_isn),SYN标志位置为1;
第二次握手: 服务器端向客户端回送一个响应,通知客户端收到连接请求.(SYN+ACK报文)
服务器在收到客户端的SYN报文后, 将返回一个SYN+ACK报文,表示客户端的请求被接收。 同时TCP序号被加1;服务端随机初始化序号(server_isn),把收到客户端的ISN+1,SYN和ACK标志位置为1;
第三次握手: l客户端再次向服务器端发送确认信息,确认连接(ACK报文)
客户端返回一个确认报文ACK给服务 器端,同样TCP序号被加1,至此一个TCP连接完成;然 后才开始通信的第二步,数据处理。把收到服务端的ISN+1,ACK标志位置为1。
为什么是三次握手?不是两次、四次?
①三次握手才可以阻止重复历史连接的初始化(主要原因)②三次握手才可以同步双方的初始序列号 ③三次握手才可以避免资源浪费
TCP协议四次挥手
第1次挥手:客户端打算关闭连接,此时会发送 一个 TCP 首部 FIN 标志位被置为 1 的报文, 也即 FIN 报文,之后客户端进入 FIN_WAIT_1 状态。第2次挥手:服务端收到该报文后,就向客户端 发送 ACK 应答报文,接着服务端进入 CLOSED_WAIT 状态。 客户端收到服务端的 ACK 应答报文后,之后进 入 FIN_WAIT_2 状态。第3次挥手:等待服务端处理完数据后,也向客 户端发送 FIN 报文,之后服务端进入 LAST_ACK 状态。第4次挥手:客户端收到服务端的 FIN 报文后, 回一个 ACK 应答报文,之后进入 TIME_WAIT 状态 服务器收到了 ACK 应答报文后,就进入了 CLOSE 状态,至此服务端已经完成连接的关 闭。 客户端在经过 2MSL 一段时间后,自动进入 CLOSE 状态,至此客户端也完成连接的关闭