TCP连接过程和状态变化

1. 前言

    关于TCP连接过程与状态,其实网上已经有非常多的好文章了,为什么我还要抽时间写一遍,一是对知识的整理,二是近期再换工作,人生第一次跳槽,觉得应该找个博客网站当港湾,养成知识整理的好习惯,因为,长大了,就很难有志同道合的朋友促膝长谈了,闲话再撩就多了,下面进入正题。

    本篇文章的立意,不研究TCP传输太底层的原理与实现,我们学习TCP更多的是想为我们在应用层的各项工作提供服务,学以致用才是王道,所以本文重点关注TCP与应用层的紧密关联上、TCP状态对应用层的含义,以及不同系统间TCP通讯时重点关注的状态和调优关注点上。

2. TCP建立连接--三次握手

TCP三次握手网上有很多,下面给出我的理解:


CLOSED:虚拟出来的状态,实际不存在,你在netstat -ant | grep 端口的时候是找不到的;

LISTEN:表示Server大门已开,随时准备有Client前来连线;

SYN_SENT:只在Client端出现,表示Client发送过SYN了,正在焦急地等待Server的ACK;

SYN_RCVD:只在Server端出现,表示Server收到Client的SYN了,并且已经发给Client自己的ACK和SYN了;

ESTABLISHED:在Client端出现表示Client把自己的ACK(第3次握手)发出去了,Client已经就绪;在Server端出现表示Server已经收到Client的ACK(第3次握手)了,Server已经就绪;

注:只有在Client和Server同时为ESTABLISHED时,即同时就绪时才可以进行数据传输

2.1 闲撩

    实际工作中,在编写网络应用程序时,一般不会自己去封装Socket底层通讯框架,我们往往喜欢站在巨人的肩膀上,这样可以少点重复造轮子,借鉴前人的东西会提升不少工作效率,使用前人的东西为自己深度定制。以Java为例,一般我们使用NIO,但不直接使用JDK的NIO通讯包,目前比较流行的是Netty,需要重点学习。

3. TCP断开连接

    (先去做饭……)







猜你喜欢

转载自blog.csdn.net/u012985817/article/details/80782228