网络协议系列之十:TCP连接的建立与释放-阿里云开发者社区

开发者社区> rhwayfun> 正文

网络协议系列之十:TCP连接的建立与释放

简介:
+关注继续查看

TCP连接的建立(三次握手)

1> 客户端发送(主动)一个SYN给服务端(相当于告诉服务端,我要打开连接了,你注意一下)。客户端的状态变化:CLOSED–> SYN_SENT,服务端状态变化:CLOSED–>LISTEN;
2> 服务端收到SYN报文,发送SYN+ACK两个报文给客户端,其中ACK报文是对客户端发来的SYN报文的确认(相当于告诉客户端,我收到你的连接请求了)。而这里的SYN报文则是服务端主动给客户端发送的请求连接报文(相当于告诉客户端,我要和你建立连接了,你注意一下)。服务端的状态变化:LISTEN–>SYN RECEIVED,客户端的状态无变化
3> 客户端收到服务端的SYN+ACK报文,就知道服务端同意自己的连接请求。接着处理SYN报文,就知道服务端要与自己建立连接,于是发送一个ACK报文(相当于告诉服务端,我同意了你的连接请求,让我们愉快的玩耍吧)。服务端收到客户端的ACK报文后,双方的连接就建立起来了。客户端的状态变化:SYN_SENT–>ESTABLISHED;服务端的状态变化:SYN RECEIVED–>ESTABLISHED

TCP连接的释放(四次挥手):

1> 客户端操作结束后,发送FIN报文给服务端(相当于告诉服务端,我要断开连接了)。服务端状态变化:ESTABLISHED–>CLOSE_WAIT,客户端的状态变化:ESTABLISHED–>FIN_WAIT_1;
2> 服务端收到客户端的FIN报文后,知道客户端要断开连接了,发送一个ACK报文(注意:服务端并没有发送FIN报文,表示服务端还没有准备好断开连接。相当于告诉客户端,我知道了,但是我的数据还没有处理完毕,你再等等呗);
3> 客户端收到ACK 报文后,知道服务端收到了自己的断开连接的请求。但是服务端还没有准备断开,那就等呗。客户端的状态变化:FIN_WAIT_1–>FIN_WAIT_2;
4> 服务端传送完毕之后,给客户端发送一个FIN报文(相当于告诉客户端,我也传送数据完毕,准备断开连接了,状态由CLOSE_WAIT–>LAST_ACK),客户端收到FIN报文后,发送一个ACK报文(好了,我知道了。但是客户端担心服务端收不到自己的ACK报文,所以就启动一个计时器,状态由FIN_WAIT_2–>TIME_WAIT),等待的时候是2MSL(也就是2倍最长报文生存时间)。如果超过这个时间,服务器没有发送重传ACK报文的请求,就认为服务端已经收到了自己ACK报文,所以就关闭自己的连接,状态由TIME_WAIT–>CLOSED。服务端如果收到了ACK报文,那么就断开自己的连接。状态由LAST_ACK–>CLOSED。如果ACK报文发生了丢失,就发送一个重传请求,客户端就会重新发送一个ACK报文,并重置计时器。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
linux内核之网络协议栈
https://www.ibm.com/developerworks/cn/linux/l-ntflt/
863 0
网络基础CCNP|传输层与以太网协议
以太网协议与传输层简介
1063 0
Java网络编程(TCP_UDP)
版权声明:本文为博主原创文章,转载请注明出处。 https://blog.
758 0
解决TCP网络传输“粘包”问题
当前在网络传输应用中,广泛采用的是TCP/IP通信协议及其标准的socket应用开发编程接口(API)。TCP/IP传输层有两个并列的协议:TCP和UDP。其中TCP(transport control protocol,传输控制协议)是面向连接的,提供高可靠性服务。
1140 0
+关注
111
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载