tcp/ip之三次握手,四次挥手(超级详解)

一,原理解析

在这里插入图片描述
通过上图可知,tcp在发送报文时的基本数据情况列在上表。由于只对握手以及挥手进行讲解,那么仅需要对其中的几个参数进行分析即可,先记着以下的参数,有利于后面的分析

32位序列号 : seq (该序列号为一个随机序列号)
32位确认序列号 : ack
ACK : 确认接收的信号 状态为1
FIN :建立断开的确认序列号 状态为1
SYN :建立连接的确认序列号 状态为1
二,三次握手

在这里插入图片描述
如上图
1,由客户端向服务端发送请求,如果发送成功,那么需要建立一个确认连接的序列号,并产生一个seq的随机数。

2,服务端在接收到客户端发送过来的请求之后呢,那么服务端即将向客户端给予回应。
也先需要建立一个确认连接的序列号;同时呢需要产生一个seq的随机数,并且返回一个ACK,用于表示确认收到了客户端的请求。并且返回的32位确认序列号ack的值设置为客户端请求的seq序列号+1,即ack = seq(客户端请求) + 1;

3,这样的话,客户端这边就完事了,因为客户端这边呢既能给服务器发送请求,并且还能得到响应,但是呢,服务器这边并不知道这个客户端是否接受到了自己返回给客户端的信息,因此服务器需要一直等待。那么客户端就必须告诉服务端我接受到你给我的响应了,咋们开始在一起吧,建立连接吧!即和客户端需要返回一个ACK确认接收到服务端信息的状态码,以及产生一个随机数。这样tcp/ip就连接成功了!

三,四次挥手

在这里插入图片描述
1,客户端给服务端发送断开的请求并建立断开的序列号设置为1,并产生一个seq32位序列号的随机数。

2,服务端在接收到请求后,开始对客户端做出响应,向客户端发送一个ACK=1的标记,告诉服务端,好的,我接收到了你的请求,并将ack确认设置的序列号设置为seq+1,告知客户端响应了哪条请求。

3,在这之前,可能大家会先有一个疑问,为什么服务器不像连接时一样,在确认收到服务端断开连接的请求时,并作出断开连接的响应。这就体现了tcp连接的可靠性了。
由于之前已经建立连接了,需要处理大量的请求,而且tcp连接为可靠连接,在建立连接和销毁连接时需要花大量的时间,所以不可能立即作出响应,而是需要让客户端等待一段时间才作出响应。即确认响应tcp的断开连接的请求,将FIN设置为1,并产生一个seq的随机数。

4,这步依旧如此,服务端需要知道客户端是否接收到了自己的响应,因此需要等待。那么客户端需要发送一个ACK的确认请求,告知服务端我收到你的响应请求了,那么服务端与客户端开始愉快的分手了

猜你喜欢

转载自blog.csdn.net/zhenghuishengq/article/details/113755062