简述TCP协议的六个标志位和三次握手与四次挥手的过程及原理

来源:互联网 发布:java 乐观锁 例子 编辑:程序博客网 时间:2024/05/21 09:27

简述TCP协议的三次握手与四次挥手的过程及原理

       今天,我们来分享一下TCP协议的六个标志位和三次握手与四次挥手的过程及原理。

       先介绍一下TCP中的六个控制位,

         SYN表示建立连接;

         FIN表示关闭连接;

         ACK表示响应;

         PSH表示有 DATA数据传输;

         RST表示连接重置;

         URG表明紧急指针有效.

       URG标志表明紧急数据之后正常数据的起始位置,URG的序列号到紧急指针之间的数据为紧急数据,而紧急指针开始的数据才是正常数据。当URG=1时,表示分段中有紧急数据应当加速传送。

       PSH标志 PSH 紧急位。当PSH=1时,要求发送方马上发送该分段,而接收方尽快的将报文交给应用层,不做队列处理。

       URG=1,表示紧急指针指向包内数据段的某个字节(数据从第一字节到指针所指字节就是紧急数据),不进入接收缓冲,直接交给上层进程,而余下的数据都是要进入接收缓冲的。

      而一般情况下,TCP是要等到整个缓存都填满了后再向上交付,但是如果PSH=1的话,就不用等到整个缓存都填满,直接交付,但是这里的交付仍然是从缓冲区中交付的。

       所以PSH要经过缓冲区而URG不需要,千万要记住哦!

       其次,SYN和FIN不能同时有效,当出现SYN和FIN同时有效的数据包时,可能有人在恶意攻击你的网络,要多多注意,并采取响应措施。

       而RST用于异常终止一个链接,RST报文段不会导致另一端产生任何响应,另一端根本不进行确认。收到RST的一方将终止该连接,并通知应用层连接复位。另外就是RST用于检测半打开连接,即一方已经关闭或异常终止连接而另一方却还不知道,并且只要不打算在半打开连接上传输数据,仍处于连接状态的一方就不会检测另一方已经出现异常。此时,TCP的处理原则是接收方以复位作为应答方式。其他的应该就不用解释了吧!

      

       TCP协议服务器和客户端建立连接的过程被称为三次握手,而TCP协议服务器和客户端断开连接的过程被称为四次挥手。在连接之前和断开连接之后,服务器和客户端之间是不能传输数据的,

       三次握手:

First:客户端向服务器发送连接的请求(SYN),并等待服务器应答。

Second:服务器应答(ACK)客户端的连接请求,并向客户端发送连接请求(SYN),等待服务器应答。

Third:客户端应答(ACK)服务器的连接请求,客户端和服务器连接完成,可以相互进行数据传输。

       分析:

       如果第二步失败,客户端会不断等待然后重新发送连接请求,直到得到服务器端应答为止。

       如果第三步失败,服务器端会先等待然后重新发送连接请求,在一定时间内得不到客户端的应答,为避免服务器受到DOC攻击,服务器端有权断开它与此客户端的连接。

       所以不管是哪一步失败,都尽量不影响服务器的正常运行,并且在不占用大量系统资源的情况下,完成TCP服务器和客户端之间的连接。

       四次挥手:

First:客户端完成数据接收任务,并不打算再向服务器传送数据时,向服务器的发送断开连接的请求(FIN),并等待服务器应答。

Second:服务器应答(ACK)客户端的断开连接请求。

Third:服务器完成数据接收任务,并不打算再向服务器传送数据时,向客户端的发送断开连接的请求(FIN),并等待客户端应答。

Fourth:客户端应答(ACK)服务器的断开连接请求。

       此时,客服端与服务端的连接才算断开。

注:first、second与third、fourth可以交换先后顺序,因为已建立连接的双方都可以先提出断开连接的请求。

        分析:

       连接是为了传输数据,断开是双方暂时不再传输数据,为了不占用系统资源而断开。所以断开前,双方必须确定不需要再传输数据并且接收数据完毕,由于双方收发数据速度不同,为确定数据接收的完整性,响应另一方断开请求的一方,不一定都能在响应断开请求的同时也能发起断开请求,所以至少挥手四次才能完成断开服务器和客户端的连接的功能。

       图解三次握手和四次握手如下:

 

       三次握手其中客户端要主动请求,如上图所示至少通过3次才能建立服务器和客户端之间的连接,此时即将进入ESTABLISHED状态。

       而四次挥手双方都可以先提出,但是只有都经过双方的同意而断开连接,才算真正的断开了连接。由于双方接收数据的速度可能存在不一致的问题,在保证数据被接受并且都经过双方的同意而断开连接的前提,至少通过四次来完成断开连接的过程。只有一方断开连接时,此时处于TIME_WAIT状态,而服务器为了减少TIME_WAIT状态造成的资源浪费,在可能的情况下,尽量不主动断开连接。所以一般都是客户端主动断开连接。

      下面简要解释一下ESTABLISHED状态和TIME_WAIT状态。

       ESTABLISHED状态:建立连接,两台机器正在通信。

       TIME_WAIT状态:我方主动调用close()断开连接,收到对方确认后状态变为TIME_WAIT。TCP协议规定TIME_WAIT状态会一直持续2MSL(即两倍的分 段最大生存期),以此来确保旧的连接状态不会对新连接产生影响。处于TIME_WAIT状态的连接占用的资源不会被内核释放,所以作为服务器,在可能的情况下,尽量不要主动断开连接,以减少TIME_WAIT状态造成的资源浪费。

       目前有一种避免TIME_WAIT资源浪费的方法,就是关闭socket的LINGER选项。但这种做法是TCP协议不推荐使用的,在某些情况下这个操作可能会带来错误。该怎么避免TIME_WAIT状态,达到减少资源浪费,在接下来的博客会有介绍。

      分享如上,如有错误,望斧正!愿大家学习有进步!

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 网销客户不说话怎么办 两岁宝宝不说话怎么办? 4岁儿童说话结巴怎么办 3岁宝宝说话结巴怎么办 6岁儿童舌头短怎么办 5岁宝宝说话结巴怎么办 两岁宝宝说话晚怎么办 6岁儿童说话结巴怎么办 2岁宝宝呕吐拉稀怎么办 2岁宝宝突然呕吐怎么办 2岁宝宝呕吐发烧怎么办 2岁宝宝呕吐厉害怎么办 1岁宝宝半夜呕吐怎么办 2岁半宝宝呕吐怎么办 2岁宝宝半夜呕吐怎么办 两岁宝宝一直吐怎么办 原画师老了以后怎么办 孩子不想上学怎么办怎么去说服 嫉妒别人比我好怎么办 三岁宝宝爱打人怎么办 1岁宝宝喜欢打人怎么办 ps图层解锁不了怎么办 沈腾结婚马丽怎么办 延长甲没有纸托怎么办 高考第一志愿没录取怎么办 电子画颜料干了怎么办 数字画颜料干了怎么办 彩砂纸画不好了怎么办 宝宝吃了油画棒怎么办 2岁宝宝不爱刷牙怎么办 两岁宝宝不刷牙怎么办 1岁宝宝不爱刷牙怎么办 3岁宝宝不肯刷牙怎么办 20岁没学历迷茫怎么办 四岁了不长头发怎么办 17岁掉头发严重怎么办 头发很油,又少怎么办 25岁头发变稀怎么办 宝宝头发少又黄怎么办 头旋附近头发少怎么办 25岁掉头发严重怎么办