TCP连接管理
- TCP是一个面向连接的协议,连接的建立分三个阶段:连接建立、数据传输、连接释放
- TCP连接的建立采用的是客户服务器模式,主动请求连接的是客户机,而被动等待连接的是服务器
TCP连接的建立
- 首先是A发送请求报文,希望得到B的确认,这个时候的操作称为第一次握手
- 当B收到A的请求之后,再向A发送一个确认的信息,这时称为第二次握手
- 于是A在得知自己发出的请求得到B的确认之后,再向B发送确认报文,这个时候就是第三次握手
- 重点:在这里为什么非要用到第三次握手呢?
这是因为假如我第一握手的过程当中发送的请求被滞留在了网络当中,没有被服务端接收,那么这个时候超时重传,再一次请求,这第二次的请求得到了服务端的回复,于是服务端向客户端发送了确认报文,但是当第一次发送的请求再到达服务端的时候,这个时候由于服务端已经发送了,假如没有第三次握手,这个时候服务端就等不到A向他发送确认了,于是它就会一直在那里等
TCP连接的释放
- 客户端发送连接释放报文段,报文中FIN = 1, seq = u;
- 服务端接收到连接释放报文后发出确认报文,其中ACK = 1; seq = v; ack = u + 1;
- 服务端在发送完数据后,发送连接释放报文FIN = 1, seq = w, ack = u + 1;并停止向客户端发送数据。
- 客户端收到连接释放报文后,发送确认报文, ACK = 1; seq = u + 1; ack = w + 1;并且进入等待2MSL,防止服务端没有接收到确认报文,重传报文。并且使连接产生的报文都消失。