TCP/IP连接的三次握手和四次挥手

目录

    • 一、TCP/IP建立连接的三次握手
    • 二、两次不行吗?
    • 三、TCP/IP断开连接的四次挥手

客户端向服务端请求进行连接,需要通过TCP/IP的三次握手和四次挥手彼此才能连接/断开来的

一、TCP/IP建立连接的三次握手

过程如下:
1、首先服务端需要开启监听,等待客户端的连接请求,这个时候服务端处于“收听”状态(listen());
2、(第一次握手)客户端向服务端发起连接,选择seq=x的初始序列号,此时客户端处于“同步已发送”(SYN_SENT)状态,等待服务器确认;
3、(第二次握手)服务端收到客户端的连接请求,同意连接并向客户端发送确认,确认号是ack = x+1 表示客户端可以发送下一个数据包序号从x+1开始,同时选择seq = y的初始序列号,此时服务端处于“同步收到”(SYN_RCVD)状态;
4、(第三次握手)客户端收到服务端的确认后,向服务端发送确认消息,确认号是ack=y +1 表示服务端可以发送下一个数据包序号从y+1开始,此时客户端处于“已建立连接”的状态。服务端收到客户端的确认后,也进入“已建立连接的状态”。

二、两次不行吗?

从三次握手的过程可以看出如果只有两次握手,那么客户端的起始序列号可以确认,服务端的起始 序列号将得不到确认。
TCP/IP连接的三次握手和四次挥手_第1张图片

三、TCP/IP断开连接的四次挥手

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。
1、(第一次挥手)主动关闭方发送一个FIN 携带信息seq= x +2 ,用来关闭主动关闭方到被动关闭方的数据传送(也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了,但是在这个时候,主动关闭方还可以接收数据)。
注意:在FIN包之前发送出去的数据,如果没有收到对应的ack确认报文,主动官方依然会重发这些数据
2、(第二次挥手)被动关闭方收到FIN包后,发送一个ack= x +3 给对方。
3、(第三次挥手)被动关闭方发送一个FIN 携带信息 seq = y + 1,用来关闭被动关闭方到主动关闭方的数据传输(也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了)。
4、(第四次挥手)主动关闭方收到FIN后,发送一个ack给被动关闭方,确认序号ack=y+2,至此,完成四次挥手。

你可能感兴趣的:(计算机网络,网络,tcp/ip)