Linux核心是否根據IP位址分配空閒的TCP埠?

Linux核心是否根據IP位址分配空閒的TCP埠?

這是一個假設性問題,只是為了幫助我更了解 TCP 連接埠如何運作。

假設我的機器上有多個乙太網路卡,並且它們連接到不同的子網路。現在,如果我想透過 TCP 連接到遠端計算機,而不綁定本地地址/端口,內核將為我確定 IP 位址和端口。

我的理解是,核心會根據介面的主IP選擇IP位址,其中介面是根據路由表選擇的。

對於 TCP 連接埠部分,核心將為我找到一個未使用的(臨時)連接埠。問題是,核心是否透過 IP 位址保留使用的 TCP 連接埠?意思是,如果我已經使用了連接埠a.b.c.d:12345(假設是介面 A 的 IP),現在封包應該從介面 B 發出,我可以使用e.f.g.h:12345(假設是介面 B 的 IP)嗎?

我可以想到任何一種方式的論點。由於已建立的 TCP 連線是由本機/遠端 IP/連接埠 4 元組標識的,因此答案似乎是yes- 我可以再次使用連接埠12345。然而,在準備 TCP 層時,核心不知道路由資訊(因此是接口,因此是來源 IP),因此核心不可能在 TCP 層分配一個依賴 IP 的空閒 TCP 端口,然後再進行 TCP 層的配置。到IP層。

核函數inet_csk_get_port掃描hinfo->bhash表,僅使用連接埠號碼作為雜湊鍵。這是否意味著臨時端口是全球唯一的,如果這是真的,對於在 .我在這裡錯過了一些重要的事實嗎?希望有人能幫我澄清這一點。謝謝!

相關內容