首页 > 试题广场 >

TCP的连接和释放连接。

[问答题]
简单描述一下,TCP的连接和释放过程。
Tcp的链接建立(三次握手)
1.    服务端进程先创建传输控制块(TCB),准备接受客户端进程的连接请求,服务端处于listen的状态,等待客户端的连接请求;
2.    客户端继承创建传输控制块(TCB),然后向服务端发送请求报文段,这是首部的同步位SYN=1,同时选择一个序列号seq = x.(TCP规定,SYN报文段不能携带任何数据,但是要消耗一个序号),这时客户端进程进入SYN-SENT(同步已发送)状态;
3.    服务端收到客户端的请求报文后,如同意建立连接,则向客户端发送确认。在确认报文中应把SYN和ACK都置为1,确认号是ack=x+1,同时也为自己选择一个初始的序号seq=y,这个确认报文也不能携带数据,但是要消耗一个序号,这时TCP服务端进程进入SYN-RCVD(同步已收到状态)状态。
4.    客户端收到服务端的确认后,还要向服务端进行确认。确认报文段的ACK为1,确认好为ack = y+1,自己的序号为seq = x+1,ACK报文段可以携带数据,但是如果不携带数据则不消耗序号,此时TCP连接已经建立,客户端进入ESTABLISHED状态(已建立连接状态);
5.    服务端收到确认后也进入以建立连接状态。
Tcp的连接释放(四次握手)
1.    当不再需要传输数据时,客户端会向服务端发送释放报文段,将连接释放报文段的FIN置为1,其序号为seq = u,这时客户端进入终止等待1状态;(TCP规定,FIN报文段即使不携带数据,也消耗掉一个序号)
2.    服务端收到释放报文段后发送确认,确认号为ack=u+1,这个报文段自己的序号为w,然后服务端进入关闭等待状态(这时TCP服务器进程就会通知应用进程,因而从客户端到服务器的连接就是放了),这时TCP处于半关闭状态
3.    当客户端收到来自服务器端的确认后就会进入终止等待2状态,等待服务器发出的连接释放报文;
4.    服务端发出连接释放报文段,使得FIN=1,服务器必须重复上次已发送的确认号ack=u+1,这时服务器进入最后的确认状态,等待客户端的确认;
5.    客户端在收到服务端的释放报文段后,必须对此发出确认。在确认报文段中报ACK置为1,确认号为ack = w+1,自己的序号变成seq = u+1,进入时间等待状态。

发表于 2019-03-04 22:30:12 回复(0)
TCP三次握手整个流程为: 1 客户端主动打开,发送连接请求报文段,将SYN标识位置为1,Sequence Number置为x(TCP规定SYN=1时不能携带数据,x为随机产生的一个值),然后进入SYN_SEND状态 2 服务器收到SYN报文段进行确认,将SYN标识位置为1,ACK置为1,Sequence Number置为y,Acknowledgment Number置为x+1,然后进入SYN_RECV状态,这个状态被称为半连接状态 3客户端再进行一次确认,将ACK置为1(此时不用SYN),Sequence Number置为x+1,Acknowledgment Number置为y+1发向服务器,最后客户端与服务器都进入ESTABLISHED状态 TCP四次挥手 当客户端没有数据再需要发送给服务端时,就需要释放客户端的连接,这整个过程为: 1 客户端发送一个报文给服务端(没有数据),其中FIN设置为1,Sequence Number置为u,客户端进入FIN_WAIT_1状态 2 服务端收到来自客户端的请求,发送一个ACK给客户端,Acknowledge置为u+1,同时发送Sequence Number为v,服务端年进入CLOSE_WAIT状态 3 服务端发送一个FIN给客户端,ACK置为1,Sequence置为w,Acknowledge置为u+1,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态 4 客户端收到FIN后,进入TIME_WAIT状态,接着发送一个ACK给服务端,Acknowledge置为w+1,Sequence Number置为u+1,最后客户端和服务端都进入CLOSED状态
发表于 2019-01-25 16:08:13 回复(0)
三次握手四次挥手
发表于 2019-02-28 18:49:19 回复(0)
TCP建立连接采用三报文握手机制
TCP连接释放采用四报文握手机制
发表于 2020-04-29 11:55:48 回复(0)