天天看点

TCP协议的三次握手(为了建立连接)

TCP协议的三次握手(为了建立连接)

  • 第一次握手:客户端(Client)向服务器端(Server)发送连接请求,等待服务器端确认;在这一次,客户端会发送一个含SYN同步标志的 TCP报文,SYN同步报文会指明客户端使用的端口以及TCP连接的初始序号(确定每次发来的请求的先后顺序,如果出现发送数据出问题,会根据此序号判断,然后重新发送数据);初始状态客户端与服务器端都处于关闭状态,发送完成后,客户端处于SYN_SENT已发送状态。
  • 第二次握手: Server向Client回一个响应,通知客户端自己收到了请求;服务端结束Listen阶段(当客户端发来请求时,服务端结束closed状态,进入Listen状态);会返回一个syn+ack报文,表示客户端的请求被接受到了。同时tcp序号加1,随后服务器端进入SYN-RCVD阶段。
  • 第三次握手:客户端再次向服务器端发送确认信息,确认连接,客户端返回一个确认报文ACK给服务 器端,同样TCP序号被加1,至此一个TCP连接完成;然 后才开始通信的第二步,数据处理。

为什么要三次握手,而不是两次或是四次呢?

  • 1.三次握手才可以阻止重复历史连接的初始化(主要原因)
  • 2.三次握手才可以同步双方的初始序列号
  • 3.三次握手才可以避免浪费资源

TCP协议四次挥手(TCP连接的释放)

  • 第一次:客户端主动释放连接,向服务器端发送一段Tcp报文;包含的内容:标记为FIN=1,表示“请求释放连接“;序号为Seq=u;随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。
  • 第二次:服务器端收到了客户端请求释放连接的Tcp报文后,确认客户端想要释放连接,随后服务器端结束ESTABLISHED状态,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文。TCP报文包含ACK=1 ack=u+1 seq=v。
  • 第三次:服务器端发出ACK确认报文,向客户端确认是否真的要释放连接。再次向客户端发出一段TCP报文。
  • 第四次: 客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文。

继续阅读