TCP三次握手、四次挥手的原理是什么?过程简述

XIAO 2020-04-17 17:18:07 java常见问答 5398

其实我们日常生活中,在互联网上面冲浪或是访问某个具体的网址的时候,其实就已经接触到了网络协议了,只是我们常见的可能就是Http协议,其实这只是一种,很很重要的协议还有TCP,下面小编就带大家一起以TCP的三次握手、四次挥手过程来看看其原理到底是什么呢?

首先我们来看看TCP的概述:

TCP把连接作为其最基本的对象,每一条TCP连接都有两个端点,这种端点我们叫作socket(套接字),它的定义其实是端口号拼接到IP地址即构成了套接字,例如,若IP地址为192.168.56.16 而端口号为80,那么得到的套接字为192.168.56.16:80。

三次握手(Three-way Handshake),其实是指建立一个 TCP连接时,需要客户端和服务器总共发送3个报文。三次握手的目的是连接服务器指定的端口,去建立TCP连接,并同步连接双方的序列号和确认号,交换TCP窗口大小信息。在socket编程中,客户端在执行connect()方法的时候会触发三次握手。三次握手过程的示意图如下:

TCP三次握手、四次挥手的原理是什么?过程简述

第一次握手,客户端将TCP报文标志位SYN置为1,会随机产生一个序号值seq=J,保存在TCP首部的序列号(Sequence Number)字段里,指明客户端打算连接的服务器的端口,并将该数据包发送给服务器端,发送完毕后,客户端进入SYN_SENT状态,再等待服务器端确认。

第二次握手,服务器端收到数据包后,立刻由标志位SYN=1知道客户端请求建立连接,服务器端将TCP报文标志位SYN和ACK都置为1,ack=J+1,随机产生一个序号值seq=K,并且将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。

第三次握手,客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

四次挥手就是终止TCP的连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包用来确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。但是由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则就是当一方完成数据发送任务之后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,就是不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。四次挥手过程的示意图如下所示:

TCP三次握手、四次挥手的原理是什么?过程简述

好了,以上就有关TCP三次握手、四次挥手的所有有关内容了,还想了解更多java一些知识问答,记得去关注本站消息哦。