[标签]: TCP3次握手 TCP建立连接过程 TCP4次挥手 TCP结束连接的过程
问题详情的描述或方案目标的预期:
两个通信节点需要发送消息,那建立连接和发送数据之后的结束连接,具体过程是怎么样的?
【解决方案】
TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议,TCP/IP协议不仅仅指的是TCP 和IP两个协议,还包括(但不限于)如下这些:
应用层:Telnet、FTP、SMTP;传输层:UDP、TCP;网络层:ICMP、IP、IGMP;数据链路层:ARP、RARP。
TCP(Transmission Control Protocol 传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。
建立或者断开连接过程会用到如下6种标示码:
SYN(synchronous建立连接)
ACK(acknowledgement 确认)
PSH(push传送)
FIN(finish结束)
RST(reset重置)
URG(urgent紧急)
Sequence number(顺序号码)
Acknowledge number(确认号码)
*********************************************************************
【三次握手过程】
第一次握手:客户端发起建立连接请求。发送给服务端报文内容:SYN=1,Sequence Number = X
SYN=1表示告知这是一个建立连接请求报文;Sequence Number = X的意义仅为发送一个信息出去,x可为任意信息。发送该报文后客户端进入SYN_SEND状态,等待确认
第二次握手:服务端收到请求、+1确认、发送自己的信息。反发送给客户端报文内容:ACK=1,Sequence Number = X+1,SYN=1,Sequence Number = y
ACK=1意思为这是一个确认信息,Sequence Number = X+1可以理解为看过了,SYN=1我也要发送个东西看你能不能收到,Sequence Number = y我发送的东西是y
第三次握手:客户端收到服务器的SYN+ACK报文段,把y+1又发回服务端表示信息收到、看过了。
至此客户端发送了消息服务端确认收到、服务端也发送了消息客户端确认收到。哥俩都准备好了,进入ESTABLISHED状态,开始传输数据。

*********************************************************************
当客户端和服务器三次握手建立TCP连接以后,数据传送完毕,肯定是要断开TCP连接啊。那对于TCP的断开连接,这里就有了神秘的“四次分手”:
【四次挥手过程】
第一次:机A(可以是客户端或服务端任意一方)给机B发送结束报文:Sequence Number=123456, Acknowledgment Number=654321, FIN=1
Sequence Number=123456表示发送个东西给B看能否收到,FIN=1表这是一个结束报文
第二次:机B收到后给机A返回一个确认收到报文:ACK = 1,Sequence Number=123457 告诉机A收到信息了,知晓并同意其关闭请求
第三次:机B给机A发送结束报文:Sequence Number=y,FIN=1
第四次:机A收到后给机B返回确认报文:Acknowledgment Number=y+1, ACK=1
机B收到机A的ACK报文段以后,就会关闭连接;此时机A等待2MSL后依然没有收到回复,则证明机B已正常关闭,机A也关闭连接。
总结:
你会发现,两个过程很类似。“我要连接--知道了,我也要连接--知道了”、“我要分手--知道了-我也要分手--知道了”
再归纳一下就是:发送请求--确认--另一方也发送请求--初始方确认。
断开连接多一次是因为可能那时已经没有新发送需求,但是还有数据正在传输还未完成。但是不回复“收到”那初始方就会一直发。所以分两次,收到初始方来消息说[发送完没数据了、请求结束连接]后先回复“已收到、已知晓你没数据了已知晓你准备断开”,等数据传输完后,又发送一次表示[我也没事了,请求结束]。两个人就结束了。