由乙個經典問題來引出:一台機器最多可以建立多少tcp連線?
這個問題基本都是從server的角度來回答,因為很少會有客戶端需要建立多個連線。
需要記住:
client_ip:client_port <---> server_ip:server_port,乙個四元組可以確定乙個連線
一.對於單機server,單機可以接受的最大連線數是多少?
65536是乙個經典錯誤答案.
理論上是受系統支援的最大開啟檔案描述符的數目限制;實際則受到系統資源的各種限制。之前轉過一篇**探索單機server 支援200m連線的嘗試。
對於從同乙個listen的socket accept進來的連線,是本機埠號都是同乙個埠號,都是listen之前bind的那個埠號。從同乙個listen的socket可以接受的連線實際上也遠大於65536
對於單機server來講,通常server_ip和server_port是固定的,client_ip和client_port都是可變數,可變數目遠大於65536。實際上server_ip也可以通過多網絡卡,虛ip等手段來變化
二.對於單機client,單機可以發起的最大連線數是多少?
1.client連線的只是乙個對端server,即對端ip:port是確定的,只有乙個。
這時,要受到系統埠號的限制,每發起乙個新的連線,就要占用乙個新的埠號。這就是65536這個數字的由來,因為埠號是16位無符號整數,0-65535之前變化。
但實際最大連線數並到不了65536,還要受到net.ipv4.ip_local_port_range 這個範圍的限制,自己的程式只能使用這個範圍內的埠號。
這種情況下,通常server_ip,server_port,client_ip都是固定的,可變的只有client_port,所以受到埠號數目的限制。實際上client_ip也可以通過多網絡卡,虛ip等手段來變化
2.client連線的是多個server,即對端ip:port有多個可以同時連線
這時的答案和單機server的情況是一樣的,理論上是受系統支援的最大開啟檔案描述符的數目限制;實際則受到系統資源的各種限制。
對於這種情況下,只有client_ip是固定的,server_ip server_port client_port都是可變數,可變數目遠大於65536,但在實際程式設計處理時,需要注意如何支援使用相同的本地ip和port向不同的遠端發起連線,即支援:
client_ip:client_port ------- server_ip1:server_ip1
client_ip:client_port ------- server_ip2:server_ip2
這樣的情況,需要設定客戶端socket 的so_reuseaddr選項,即可使用相同的本地ip和port向不同的遠端發起連線
so_reuseaddr通常只在server端設定,用來能使server快速重啟
stevens的unix網路程式設計中說,so_reuseaddr可以用在以下四種情況下:
1.當有乙個有相同本地位址和埠的socket1處於time_wait狀態時,而你啟動的程式的socket2要占用該位址和埠,你的程式就要用到該選項。
2.so_reuseaddr允許同一port上啟動同一伺服器的多個例項(多個程序)。但每個例項繫結的ip位址是不能相同的。在有多塊網絡卡或用ip alias技術的機器可以測試這種情
3.so_reuseaddr允許單個程序繫結相同的埠到多個socket上,但每個socket繫結的ip位址不同。
4.so_reuseaddr允許完全相同的位址和埠的重複繫結。正常只用於udp的多播
測試了ubuntu和centos下的nc程式,作為客戶端時都是沒有設定so_reuseaddr選項的.
firefox,chrome限制埠的解決方案
firefox,chrome限制埠的解決方案 firefox 一天在用firefox測試自己 的時候,瀏覽器提示 此位址訪問受限,此位址使用了乙個通常應該用於其他網頁瀏覽的埠。由於安全原因,firefox 取消了該請求 我使用的位址是ip位址加自定埠,上網查了一下,網上的解答是這樣的 某些 使用了非...
socket 埠 程序的關係
socket 埠 程序的關係!埠是tcp ip協議中的概念,描述的是tcp協議上的對應的應用,可以理解為基於tcp的系統服務,或者說系統程序!如下圖,ftp就需要占用特定的tcp埠。而 socket 呢,是網路程式設計中的概念,對tcp ip協議進行了抽象和實現,並為應用層提供介面。這裡的應用a,可...
socket 埠 程序的關係
socket 埠 程序的關係 2017年06月25日 15 12 06 socket 埠 程序的關係!埠是tcp ip協議中的概念,描述的是tcp協議上的對應的應用,可以理解為基於tcp的系統服務,或者說系統程序!如下圖,ftp就需要占用特定的tcp埠。而 socket 呢,是網路程式設計中的概念,...