TCP三次握手详解和四次挥的手

  

TCP的三次握手四次挥手时面试时面试官经常问道的问题

  

在互联网中,如何使不同网段的主机相互通信,需要用到TCP协议,
TCP、提供面向连接的服务,在传送数据之前必须先建立连接,数据传送完成后要释放连接.TCP是一种可靠的的运输服务,采用三次握手建立一个连接。

  

首先介绍下TCP的报文格式
 TCP三次握手详解和四次挥手”> <br/> <强>序号</>强发送端为每个字节编号,方便接收端正确重组。<br/> <强>确认号</强>用于确认发送端的信息。<br/> <强>窗口大小</强>用于说明本地可接收数据段的数目。</p>
  <p> <强>标志位</强> <br/> <强> </强>开始紧急指针位1开启0关闭。<br/>不经过缓存直接提交给对方。</p>
  <p> <强> PSH </强>快速接受传递给应用层1开启0关闭<br/>需要经过缓存,等一批报文段到齐,直接发送应用层。</p>
  <p> <强> SYN </强>同步序号位建立连接的请求标记<br/> <强>鳍</强>断开连接的请求标记<br/> <强> </>强消确认序号位<br/> <强> RST </强>重新连接</p>
  <h3>三次握手</h3>
  <p> <强>第一次握手</强> <br/>客户机想和服务器建立连接,就向服务器发送了一个SYN到服务器,等待服务器确认<br/> <强>第二次握手</强> <br/> TCP服务器收到请求报文后,先确认SYN包,如果同意连接,则发出SYN + ACK包。<br/> <强>第三次握手</强> <br/>客户端收到服务器的SYN + ACK包后,还需要向服务器发送确认包ACK,此包发送完毕,此后双方就可以开始通信了,完成三次握手。</p>
  <h3>四次挥手</h3>
  <p>由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个鳍来终止这个方向的连接。收到一个鳍只意味着这一方向上没有数据流动,一个TCP连接在收到一个鳍后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。<br/> <强>第一次挥手</强> <br/>服务器向客户端发送鳍和ACK位置1的TCP报文段。<br/> <强>第二次挥手</强> <br/>客户端向服务器返回ACK位置1的TCP报文段。<br/> <强>第三次挥手</强> <br/>客户端向服务器发送鳍和ACK的位置1的TCP报文段。<br/>在TCP断开连接的过程中,有一个半关闭的概念.TCP的一方(通常是客户端)可以终止发送数据,但仍然可以接受数据,称为半关闭。</p>
  <p> <强>为什么建立连接时时三次握的手,而断开连接时时四次挥手? </强> <br/>关闭连接时,服务器收到对方的鳍报文时,表示对方不再发送数据,但是还能接收数据,而自己也未必把全部数据都发送给对方了,所以发送完数据给对方后,再发送鳍报文给对方来表示同意现在关闭连接,因此,ACK和鳍一般都会分开发送,从而导致多了一次。</p><h2 class=TCP三次握手详解和四次挥的手