tcp的三次握手和四次挥手(详解+图片)

TCP的连接和建立都是采用客户服务器方式。主动发起连接建立的应用进程叫作客户(Client)
被动等待连接建立的应用进程叫作服务器(Server),建立TCP需要三次握手才能建立,而断开连接则需要四次挥手。

整个过程如图所示:在这里插入图片描述

一、三次握手

在TCP/IP中,采用三次握手建立一个连接,连接过程就像打电话的过程在这里插入图片描述

  • 第一次握手:Client(客户端主机A)向Server(服务器主机B)发送一个连接请求,在这个包中,标志位SYN=1,发送序号SEQ=x,上图中x=200,Client(客户端)进入SYN_SEND(已发送)状态,等待Server(服务器)确认。
  • (插入)包的概念:包(Packet)是网络上传输的数据片段,也称分组。包是一种统称,在不同的协议不同的层次,包有不同的名字
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,确认序号ACK=x+1=201,随机产生一个发送序号SEQ=y,上图中y=500,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD(已接收)状态。
  • 第三次握手:Client收到确认后,检查确认序号ACK是否为x+1=201,标志位ACK是否为1,如果正确,则将标志位ACK置为1,确认序号ACK=y+1=501,并将该数据包发送给Server,Server检查确认序号ACK是否为y+1=501,标志位ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED(已建立)状态。

完成三次握手,客户端与服务器开始传送数据。

二、四次挥手

四次挥手(Four-Way Wavehand)即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开,如图所示:在这里插入图片描述

  • 第一次挥手:当客户A要断开TCP连接时,发送一个包,其中标志位fin=1,ACK=1,发送序号SEQ=x,确认序号ACK=y,上图中x=200,y=500。Client进入FIN_WAIT_1状态(已发送fin,等待回复)。
  • 第二次挥手:客户B知道A要断开后,发送一个确认包,其中标志位ACK=1发送序号,SEQ=y确认序号ACK=x+1=201,Server进入CLOSE_WAIT状态(被动关闭)。
  • 第三次挥手:客户B也断开TCP连接,此时发送一个包,其中,标志位fin=1,发送序号SEQ=y+1=501,Server进入LAST_ACK状态(确认请求)。
  • 第四次挥手:客户A收到B的断开请求后,Client进入TIME_WAIT状态,接着发送一个确认包,标志位ACK=1,发送序号SEQ=x+1=201,确认序号ACK=y+2=502;Server进入CLOSED状态(关闭)。

由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。

三、补充:6个标志位的含义

在这里插入图片描述

四、简单图解

  1. 三次握手简单图解

在这里插入图片描述在这里插入图片描述

2.四次挥手简单图解在这里插入图片描述

文章中部分转载自《一本书读懂TCP/IP》作者: 王元杰 / 杨波 / 周亚宁 / 陈志刚

发布了14 篇原创文章 · 获赞 8 · 访问量 985

猜你喜欢

转载自blog.csdn.net/Atao_tao/article/details/104313041