1. 程式人生 > >65535與TCP連線數的關係測試結論

65535與TCP連線數的關係測試結論

首先說結論:

  • 一臺主機上只能保持最多65535個TCP連線是嗎?

    • 客戶端是這樣的,服務端不是
  • 是否有關係

    • .有關係
      • 對於客戶端

        • 對於客戶端來說,只有65535,因為根據TCP四元組的sport來說,sport只有16位,所以(2^16)-1是65535。也就是最多有65535個可用埠,這裡只說長連結,不包括SOCK_REUSEOPT
        • 但是,並不能說,一個客戶端可以保持到同一個伺服器65535個連線,因為
        1. 1024以下,由系統佔用
        2. local_port_range引數控制了可用埠範圍
          sctl -a |grep port_rangenet.ipv4.ip_local_port_range = 50000    65000      -----意味著50000~65000埠可用
          可以通過修改ip_local_port_range來擴大範圍,但是也只能到65535
      • .對於服務端來說

        • 65535的限制,是針對單個客戶端IP的連結的
        • 調整MAX OPEN FILE即可保持更多連線
        • 調整 ip_local_port_range 支援更大的埠範圍(不過應該沒有什麼客戶端需要建立這麼多的埠吧?)

遇到的錯誤碼:

  • Cannot assign requested address.
    • 其實就是埠範圍不足
  • too many open files(開啟的檔案過多)
    • 修改最大開啟數就行

測試環境:

  • 5臺ubuntu 2G 2U,其中一臺作為SERVER

測試結果:

  • 因為我當時設定的MAX OPEN FILE是102400, 最大測試到102100左右的長連結(ESTABLISHED狀態),並沒有全等於102400個,因該有一些被系統佔用了

測試程式碼
下邊是測試程式碼地址,修改上邊兩個引數,使用兩臺機器測試一下
https://gist.github.com/lisqorz/165204c1703b3cad325231ecbade3876

擴充套件閱讀

有興趣瞭解四元組的可以下邊的文章
https://www.cnblogs.com/ouzi/archive/2012/10/29/2745430.html

有興趣看描述符的操作的,可以看這個

https://blog.csdn.net/u011436427/article/details/103215