Linux

TCP可以提供超過65535個埠嗎?

  • July 22, 2018

是否可以設置 Linux 系統以提供超過 65,535 個埠?目的是讓超過 65k 的守護程序在給定係統上進行監聽。

顯然有埠正在使用,因此由於這些原因這是不可能的,所以將其視為一個理論練習,試圖了解 TCP 在執行此類操作時會受到哪些限制。

查看 TCP 的 RFC:RFC 793 - 傳輸控制協議,答案似乎是否定的,因為 TCP 標頭限制為源/目標埠欄位的 16 位。

    #1

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 地址。 > > >

                 SS#2

那麼如何獲得更多埠呢?

一種方法是使用更多介面堆疊額外的 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

來源:iproute2:ifconfig 之後的生活

參考

引用自:https://unix.stackexchange.com/questions/130797