乙個tcp連線需要由四元組來形成,即(src_ip,src_port,dst_ip,dst_port)。
假設有客戶端建立了連線(src_ip1,src_port1,dst_ip1,dst_port1),那麼,如果我們還有listen在 (src_ip1,src_port1),那麼當(dst_ip1,dst_port1)傳送訊息過來,系統應該把訊息給誰?所以就說明了客戶端占用了某 一埠時,該埠就不能被其它程序listen了。
那麼,對於有些童鞋,可能還有這樣的疑問,是否一台機器就只能建立65535個連線了(埠16位限制)?非也,乙個連線由四元組 (src_ip,src_port,dst_ip,dst_port)形式,那麼當(src_ip,src_port)一定時,變化的 (dst_ip,dst_port)就可以建立更多連線了。
可能有些童鞋還有疑問,作為乙個伺服器監控乙個埠,比如80埠,它為什麼可以建立上百萬個連線?首先要明白一點,當accept出來後的新 socket,它所占用的本地埠依然是80埠,很多新手都以為是乙個新的隨機埠。由四元組就很容易分析到了,同乙個 (src_ip,src_port),它所對應的(dst_ip,dst_port)可以無窮變化,這樣就可以建立很多個客戶端的請求了。
注:對於http 80, 當accept後乙個新的socket描述符,其所占用的本地埠號依然是80,系統不會使用乙個新的隨機埠.
參考深入淺出linux tcp/ip協議棧(p294):
但第三次握手時(客戶端傳送ack), 伺服器從監聽socket上新轉殖乙個struct tcp_sock, 置其狀態為tcp_syn_recv,然後把新建立的tcp_sock也繫結在跟監聽埠相同的本地埠上.最後,把socket的狀態改為tcp_establish.
套接字 實現埠重用
假如埠被socket使用過,並且利用socket.close 來關閉連線,但此時埠還沒有釋放,要經過乙個time wait的過程之後才能使用,這是tnn的相當煩銀的,為了實現埠的馬上覆用,可以選擇setsockopt 函式來達到目的。以下是網上找到的一篇文章的一小段相關例子,試用之後,相當有效果,特...
最大連線數 Linux的檔案最大連線數
too many open files 檢視當前作業系統連線數設定 ulimit a修改伺服器最大連線數 vim etc security limits.conf新增 soft nofile 65535 hard nofile 65535 soft nproc 65535 hard nproc 65...
MYSQL 檢視最大連線數和修改最大連線數
mysql檢視最大連線數和修改最大連線數 1 檢視最大連線數 show variables like max connections 2 修改最大連線數 set global max connections 200 以下的文章主要是向大家介紹的是mysql最大連線數的修改,我們大家都知道mysql最...