• TCP的长连接与短连接


    1.TCP连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接,如图所示:

    (1)第一次握手:建立连接,客户端A发送SYN包(SYN=j)到服务器B,并进入SYN_SEND状态,等待服务器B确认.

    (2)第二次握手:服务器B收到SYN包,必须确认客户A的SYN(ACK=j+1),同时自己也发送一个SYN包(SYN=k),即SYN+ACK包,此时服务器B进入SYN_RECV状态.

    (3)第三次握手:客户端A收到服务器B的SYN+ACK包,向服务器B发送确认包ACK(ACK=k+1),此包发送完毕,客户端A和服务器B进入ESTABLISHED状态,完成三次握手。

                          图1.TCP三次握手建立连接

    2.TCP断开连接

    由于TCP连接时全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

    (1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送

    (2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1,和SYN一样,一个FIN将占用一个序号。

    (3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A.

    (4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1.

                            图2.TCP四次挥手关闭连接

    3.TCP短连接

    client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作。因此,短连接一般只会在client/server间传递一次读写操作。

    4.TCP长连接

    client向server发起连接,server接受client请求,双方建立连接。client向server完成一次读写请求之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

    在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多。server早晚会崩掉,这时候server端需要采取一些措施,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端受损。

    来自:

      http://blog.163.com/yichangjun1989@126/blog/static/1319720282014620410065/

      http://www.cnblogs.com/liuyong/archive/2011/07/01/2095487.html

  • 相关阅读:
    python之Selenium
    Python常用集锦(upgrading...)
    豆瓣爬虫
    poj 2299 Ultra-QuickSort(求逆序对)
    nyoj117 求逆序数
    codeforces 644A Parliament of Berland
    codeforces 659A Round House
    poj 3264 Balanced Lineup(RMQ裸题)
    nyoj 119 士兵杀敌(三)(RMQ)
    hdu 5655 CA Loves Stick
  • 原文地址:https://www.cnblogs.com/sixue/p/4282704.html
Copyright © 2020-2023  润新知