TCP 三次握手
 首先简单介绍一下TCP三次握手 
 在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态; 
 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 
 通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。 
 三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。 
 
 TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
 1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
 2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
 3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
 TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
 TCP Client
 Flags
 TCP Server
 1 Send SYN (seq=x)
 ----SYN--->
 SYN Received
 2 SYN/ACK Received 
 <---SYN/ACK----
 Send SYN (seq=y), ACK (x+1) 
 3 Send ACK (y+1)
 ----ACK--->
 ACK Received, Connection
 w: ISN (Initial Sequence Number) of the
 x: ISN of the Server
1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。
 如果采用两次的话,会出现下面这种情况。
 比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
 于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
 传完东西后,断开。
 
 结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上