1.TCP是什么?
TCP是面向连接的协议,它基于运输连接来传送TCP报文段,TCP运输连接的建立和释放,是每一次面向连接的通信中必不可少的过程。
TCP运输连接有以下三个阶段:
建立TCP连接,也就是通过三报文握手来建立TCP连接。
数据传送,也就是基于已建立的TCP连接进行可靠的数据传输。
释放连接,也就是在数据传输结束后,还要通过四报文挥手来释放TCP连接。
2.TCP的6种状态表示
SYN(建立联机)
ACK(确认)
PSH(传送)
FIN(结束)
RST(重置)
URG(紧急)
3.TCP的连接建立
1.三次握手
TCP 建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP 报文段,称之为三报文握手,采用三报文握手主要是为了防止已失效的连接请求报文段突然又传送到了,因而产生错误。握手过程中使用了TCP的标志,SYN和ACK。
初始化状态:客户端处于close关闭状态,服务器处于Listen监听状态。
第一次握手:
主机A向主机B发送TCP连接请求数据包,其中包含了主机A的初始序列号seq=x(随机生成的)。
其中报文中同步标志位SYN=1,ACK=0:
表示这是一个TCP连接请求数据报文;
序列号seq=x:
表明传输数据时的第一个数据字节的序号为x。
第二次握手:
主机B收到了主机A的请求后,会发回连接确认数据包。(算是一种“机制协议”)
其中,确认报文段中,标识位SYN=1,ACK=1:
表示这是一个TCP连接响应的数据报文,其中包含了主机B的初始序列号,seq=y,以及主机B对主机A初始序号的确认号ack=seq+1=x+1
第三次握手:
主机A收到主机B的确认报文后,还需要做出确认,也就是发送一个序列号,seq=x+1,确认号为ack=y+1的报文。此时,主机B收到主机A的回复后,就可以数据传输了。
发送三封信息给朋友,这三次握手主要是为了验证我这边和朋友那边的发送/收信能力是没有问题的,证明连接是通的,可以正式发送信息。
2.四次挥手
由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。
(1) TCP客户端发送一个FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端发回ACK报文确认,并将确认序号设置为收到序号加1。