浅谈TCP三次握手和四次挥手

来源:互联网 发布:设计模型软件下载 编辑:程序博客网 时间:2024/06/04 19:42

一、TCP三次握手

1、Client首先发送一个连接试探,ACK=0表示确认号无效,SYN = 1表示这是一个连接请求报文,同时表示这个数据报不能携带数据,seq = x表示Client自己的初始序号,表示客户端等待服务器的回复。

2、Server监听到连接请求报文后,如同意建立连接,则向Client发送确认。SYN和 ACK都置1,ack = x + 1表示期望收到对方下一个报文段的第一个数据字节序号是x + 1,同时表明x为止的所有数据都已正确收到,seq = y 表示Server自己的初始序号,表示服务器已经收到Client的连接请求,等待client的确认。

3、Client收到确认后还需再次发送确认,同时携带要发送给Server的数据。ACK置1,ack = y + 1表示期望收到对方下一个报文段的第一个数据字节序号是y + 1,seq= x + 1表示Client自己的初始序号,一旦收到Client的确认之后,TCP连接就建立完毕。


二、TCP四次挥手

1、Server端向Client端发送一个FIN数据段,序列号为iFINACK都置,用来关闭Server端到Client端的数据传送,也就是告诉Client端,Server端已经不会再发数据了(当然,在FIN包之前发送出去的数据,如果没有收到对应的ACK确认报文,Client端依然会重发这些数据),但此时Server端还可以接收数据。

2Client端接到FIN(i)报文后,但是如果还有数据没有发送完成,则不必急着关闭Socket,可以继续发送数据,Client端发送ACK,序列号为i + 1ACK1,告诉Server端请求已经收到了,但Client端还没准备好,Server端继续等待Client端的FIN报文。

3、当Client端确定数据已发送完成,则向Server端发送FIN报文,序列号为jFINACK都置1,告诉Server端,Client端数据发完了,准备好关闭连接了。

4、Server端收到FIN(j)报文后,就知道可以关闭连接了,Server端发送ACK,序列号为j + 1ACK1 Client端收到ACK后,就知道可以断开连接了,至此,TCP连接就已经完全关闭了!

1 0
原创粉丝点击