Linux
TCP可以提供超過65535個埠嗎?
是否可以設置 Linux 系統以提供超過 65,535 個埠?目的是讓超過 65k 的守護程序在給定係統上進行監聽。
顯然有埠正在使用,因此由於這些原因這是不可能的,所以將其視為一個理論練習,試圖了解 TCP 在執行此類操作時會受到哪些限制。
查看 TCP 的 RFC:RFC 793 - 傳輸控制協議,答案似乎是否定的,因為 TCP 標頭限制為源/目標埠欄位的 16 位。
IPv6 有改善嗎?
不會。儘管 IPv6 會給我們提供更大的 IP 地址空間(32 位與 128 位),但它並沒有嘗試改進 TCP 數據包對埠號的 16 位限制。有趣的是 RFC for IPv6: Internet Protocol, Version 6 (IPv6) Specification,需要擴展 IP 欄位。
當 TCP 在 IPv6 上執行時,根據RFC 2460更改用於計算校驗和的方法:
> > 任何在其校驗和計算中包含來自 IP 標頭的地址的傳輸或其他上層協議都必須修改為在 IPv6 上使用,以包含 128 位 IPv6 地址而不是 32 位 IPv4 地址。 > > >
那麼如何獲得更多埠呢?
一種方法是使用更多介面堆疊額外的 IP 地址。如果您的系統有多個 NIC,這會更容易,但即使只有一個 NIC,也可以在需要時使用虛擬介面(又名別名)來分配更多 IP。
**注意:**使用別名已被取代
iproute2
,您可以使用別名在單個介面(即eth0
)上堆疊 IP 地址。例子
$ sudo ip link set eth0 up $ sudo ip addr add 192.0.2.1/24 dev eth0 $ sudo ip addr add 192.0.2.2/24 dev eth0 $ ip addr show dev eth0 2: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000 link/ether 00:d0:b7:2d:ce:cf brd ff:ff:ff:ff:ff:ff inet 192.0.2.1/24 brd 192.0.2.255 scope global eth1 inet 192.0.2.2/24 scope global secondary eth1
參考