计算机网络——三次握手,四次挥手

目录

一、认识常用的序号和标识位

二、TCP连接建立(三次握手)

1、三次握手过程

2、问题

三、TCP连接释放(四次挥手)

1、四次挥手过程

2、过程解释:

3、问题


一、认识常用的序号和标识位

(1)序号:seq,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

(2)确认序号:ack序号,占32位,只有ACK标志位为1时,确认序号字段才有效,ack=seq+1。

(3)标识位:

        ACK:确认序号有效

       SYN:发起一个新连接。
       FIN:释放一个连接

二、TCP连接建立(三次握手)

1、三次握手过程

在本例中A运行的为TCP客户程序,B运行的为TCP服务器程序,A属于主动打开连接,B属于被动打开连接

第一次发送消息:A向B发送请求报文段,A随机选取一个初始序号(seq=x)并将同步位SYN置为1,发送之后,TCP客户进入SYN-SENT(同步已发送状态)

第二次发送消息:当B服务器收到来自A的请求报文段后,若同意建立连接,则向A发送确认,因为B已经收到序列号为x的数据包,B准备接受序列号为x+1的包,所以ack=x+1。同时B告诉A自己的初始序列号:seq = y,并将SYN,ACK都置为1,B发送确认消息后,进入SYN-RCVD(同步收到状态)

第三次发送消息:当A客户进程收到B的确认消息后,还要向B发送确认告诉B已经收到了它发来的确认信息并准备建立连接,A自己这条消息的序列号是x+1,所以seq=x+1, 而ack=y+1是表示A正准备接受B序列号为y+1的数据包。A向B发送确认后进入ESTABLISHED(已建立连接状态)

当B收到A的确认后也进入建立连接状态,则建立连接结束。

2、问题

为什么是三次握手,不能是两次握手?
1.如果A没有向B发送ACK确认收到消息,则服务器会不断地超时重传ACK/SYN(第二个报文段)
2.若为2次,会浪费服务器的资源(SYN溢出攻击或网络环境影响 客户端的SYN会被重传多次)

三次握手的必要性?

防止已失效的连接请求报文段突然又传送到了B,因而产生错误

假定出现一种异常情况,即A发出的第一个连接请求报文到并没有丢失,而是因为某些网络节点长时间滞留了,以致延误到连接释放后的某个时间才到达B

但是B收到此“已失效的报文段”后,就误以为A又发出一次新的连接请求。于是就向A发出确认报文段,同意建立连接。

由于现在A并没有再次向B发出建立请求的连接,因此就不会理会B,也不会向B发送数据。但是B却一直等待A发来数据。这样就会浪费B的资源利用。

采用“三次握手”的方法可以防止上述现象的发生。如上述的假定情况,A不会向B发送确认信息。B由于收不到确认,就知道A并没有要求建立连接

三、TCP连接释放(四次挥手)

1、四次挥手过程

2、过程解释:

建立连接,数据传输结束后,通信双方就可以释放连接了。

此例中A位主动关闭方,B为被动关闭方。

(1)、主动关闭方A向被动关闭方B发送终止连接请求,将终止控制位FIN置为1,序列号seq=u,此时A进入FIN-WAIT-1(终止等待1)状态,虽然FIN不携带数据,但也消耗一个序号

(2)、当被动关闭方B收到A发来的释放连接报文后向A发送确认信息,确认号ack=seq+1,即ack=u+1,自己的序列号为v,发送后B进入CLOSE-WAIT(关闭等待状态),此时A到B方向的连接就释放了,TCP连接处于半关闭状态

(3)、A收到了B发来的释放确认后就进入了FIN-WAIT-2(终止等待2)状态,被动关闭方过一段时间如果没有要向A发送的数据了,就通知TCP进程也释放连接,这时B向A发送释放连接通知,FIN置为1,其序列号为W,由于半封闭状态可能有数据,则B要重复上次的确认号ack=u+1,这时B进入LAST-ACK(最后确认状态)

(4)、当A收到B发来的释放请求时,要发出确认,ACK=1,seq=u+1,sck=w+1,然后进入TIME-WAIT(时间等待状态)经过2MSL进入CLOSED状态,当B收到A发来的确认消息,则也进入CLOSED状态,释放连接结束。

3、问题

为什么要进行两次FIN?
   因为为全双工信道,任意时刻双方互相通讯,至少有2条通讯信道,一个FIN只能关一条,所以得有两个FIN。

第一条FIN为关闭主动方到被动方的传输通道,第二条FIN关闭被动方到主动方的传输通道。

为什么要设置等待时间TIME-WAIT?
         1.保证迟来的数据能被识别并丢弃
         2.保证可靠的终止TCP连接,防止对后续运行的程序造成影响(TIME_WAIT存在时间               内,主动断开方无法用相同的IP地址端口号再启动一个网络通讯)

         (存在时间大约是2MSL:MSL为报文段在网络中最大生存时间)

猜你喜欢

转载自blog.csdn.net/qq_50582468/article/details/121423549