TCP传输连接--建立连接阶段(TCP三次握手)

目录

一、TCP相关概念:

二、TCP连接建立过程中要解决的问题:

三、TCP三次握手的过程:

四、可以两报文握手建立连接

五、总结:


一、TCP相关概念:

1.TCP是面向连接的协议。

2.TCP是基于传输连接(不是物理连接,是逻辑上的连接)来传送TCP报文段。

TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程。

3.TCP运输链接有三个阶段:

(1)建立连接(三次握手) 。

(2)数据传送。

(3)释放连接(四次挥手)。

4.TCP的运输连接管理就是使运输连接的建立和释放都能正常地进行。

二、TCP连接建立过程中要解决的问题:

1.要使TCP双方能够确知对方的存在。

2.要允许TCP双方协商一些参数(如:最大窗口值、是否使用窗口扩大选项和时间戳选项以及服务质量等);

3.能够对运输实体资源(如缓存大小、连接表中的项目等)进行分配。

三、TCP三次握手的过程:

这里有两台主机,他们要基于TCP进行通信,主机A中的某个应用进程主动发起连接建立,建立称为TCP客户。而主机B中 被动等待的应用进程称为TCP服务器。,我们将TCP建立连接的过程比喻为握手,需要在TCP客户和服务器之间交换三个TCP报文段。


最初两端的TCP进程都处于关闭状态,一开始主机B的服务器进程首先创建传输控制块,用来存储TCP连接中的一些重要信息:例如TCP连接表、指向发送和接受缓存的指针、指向重传队列的指针等。之后就准备接受TCP客户进程的连接请求,此时TCP服务器进程就要进入监听状态,等待TCP客户进程的连接请求,TCP服务器进程是被动等待来自TCP客户进程的连接请求,而不是主动发送,因此成为被动打开连接


主机A中的TCP客户进程也是首先创建传输块,然后再打算建立TCP连接时向主机B发送TCP连接请求报文段并进入同步已发送状态,TCP连接请求报文段首部中的同步位SYN被设置为1,表明这是一个TCP连接请求报文段,seq字段被设置为x作为TCP客户进程可选择的初始序号。(TCP规定SYN被设置为1的报文段不能写携带数据,但要消耗掉一个序号)。


由于TCP连接,建立是由TCP客户进程主动发起的,因此称为主动打开连接。

 


主机B中的服务器进程收到TCP链接请求报文段后如果同意建立连接,向主机A的TCP客户进程发送TCP连接请求确认报文段,并进入同步已接收状态。TCP确认请求报文段中的首部位SYN = 1确认位ACK=1表明这是一个TCP连接请求确认报文段seq(序号)字段被设置为y作为TCP服务器进程所选的初始序号, 确认字段ack被设置为x+1(这是对TCP连接请求所选序号字段(seq=x)的确认)。



主机A中的TCP客户端发送一个普通的TCP确认报文段,并进入连接已建立状态,TCP确认报文段的ACK=1(表明这是一个普通的TCP确认报文段),序号seq字段被设置为x+1(由于第一个发送的序号为x且不携带数据,第二个报文段的序号为x+1),确认号ack字段被设置为y+1 (这是对TCP服务器进程序号的确认)。


  主机B的服务器进程收到改TCP报文段后,也进入连接已建立状态,现在TCP双方都进入连接已建立状态,他们可以进行数据的传输。


四、可以两报文握手建立连接吗?

不可以。

原因:

主机A 中的TCP客户进程发出一个TCP连接请求报文段,但该报文段在某些网络节点滞留了,这必然会造成该报文段的超时重传。


假设超时重传的TCP报文段到达TCP服务器端,TCP客户端给TCP服务器端发送一个TCP连接请求确认报文段,并进入连接已建立状态,因为我们此时是两次握手所以TCP服务器端直接进入TCP连接请求已建立状态。


TCP客户进程收到TCP服务器端的TCP连接请求确认报文段后,处于连接已建立状态,不会给TCP服务器端发送TCP确认报文段。他们之间已建立连接状态可以传输数据,之后通过四报文挥手释放连接。


他们双方都进入关闭状态,之后TCP服务器端进入监听状态, 准备接受客户进程的连接请求,而TCP客户进程将一直处于关闭状态(除非应用进程通知它需要进行新的进程连接)。


而此时失效的应用进程到达了主机B,TCP服务器进程会误认为这是TCP客户端重新发送的请求,于是给TCP客户端请求发送TCP连接请求报文段(并处于连接已建立状态 )。该主机的TCP连接请求报文段到达主机A,由于主机A处于关闭状态并没有发起TCP连接,因此不理睬该报文段,依然处于关闭状态。而此时主机B的资源就会浪费。


 五、TCP三次握手总结:

1、第一次握手:TCP客户端和TCP服务器端都处于关闭状态。客户端向服务器端发送一个TCP请求连接,将同步位SYN设置为1,随机产生一个seq(序号)值为x,并将此报文段发送给客户端,自己处于同步位已发送状态。 

2、第二次握手:TCP服务器端接受TCP客户端发送的请求连接,并发送一个SYN为1,ACK为1,seq(序号)为y,ack为x+1的TCP请求确认,此时自己处于同步已接收状态。

3、第三次握手:主机A中的TCP客户端发送一个普通的TCP确认报文段,并进入连接已建立状态,TCP确认报文段的ACK=1(表明这是一个普通的TCP确认报文段),序号seq字段被设置为x+1(由于第一个发送的序号为x且不携带数据,第二个报文段的序号为x+1),确认号ack字段被设置为y+1 (这是对TCP服务器进程序号的确认)。

注:视频资料参考《湖科大教书匠》。

猜你喜欢

转载自blog.csdn.net/weixin_43690348/article/details/112692825