首页 > 应用开发 > Java > tcp三次握手和四次挥手
百度百科对于tcp的定义是
"TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。TCP假设它可以从较低级别的协议获得简单的,可能不可靠的数据报服务。 原则上,TCP应该能够在从硬线连接到分组交换或电路交换网络的各种通信系统之上操作。"
TCP是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。 在客户端和服务器的 内存里保存的一份关于对方的信息,如ip地址、端口号等。TCP可以看成是一种字节流,它会处理IP层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在TCP头部。
TCP提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用四次挥手来关闭一个连接。
三次握手原理
SYN:请求建立连接,并在其序列号的字段进行序列号的初始值设定。建立连接,设置为1
ACK:确认号是否有效,一般置为1
FIN:希望断开连接
URG:紧急指针是否有效。为1,表示某一位需要被优先处理
PSH:提示接收端应用程序立即从TCP缓冲区把数据读走
RST:对方要求重新建立连接,复位
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
通俗点说
1)A-->B:你好,我是A,收到了吗
2)B-->A:你好A,我是B,我收到了
3)A-->B:收到,通信开始
四次挥手原理
第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手
通俗的说
1)A-->B:你好B,我的东西已经传输完毕
2)B-->A:收到,我的东西还没传输完,请稍等
3)B-->A:你好A,我的东西传输完毕
4)A-->B:好的,通信结束
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69917874/viewspace-2677191/ ,如需转载,请注明出处,否则将追究法律责任。