TCP中如何將IP位址指派給進程?

TCP中如何將IP位址指派給進程?

當兩個套接字之間建立TCP 連線時,假設電腦中有多個網路卡,那麼在建立通訊之前,套接字將綁定到哪個IP 位址[或- 將哪個IP 位址傳遞給bind() 函數]。這是由作業系統決定的嗎?

基本上我有幾個疑問:

  1. socket()、bind()、connect()函數是作業系統呼叫的嗎?如果是,那麼在機器中有多個 NIC 的情況下,在 bind() 函數中傳遞哪個 IP 位址?我知道有些地方可能有錯誤,請指正

答案1

socket()、bind()、connect()函數是作業系統呼叫的嗎?

他們不被稱為經過作業系統——他們是部分作業系統,因此它們由程式呼叫。

如果是,那麼在機器中有多個 NIC 的情況下,在 bind() 函數中傳遞哪個 IP 位址?

大多數程序不指定任何地址。

  • 當程式呼叫bind()來選擇本地連接埠來接受入站連接時,它們可以使用特殊值[::](又稱IN6ADDR_ANY_INIT)和0.0.0.0(又稱INADDR_ANY)來指示它們將接受以下連接:全部所有本地 NIC 上的位址(當前和未來)。

  • 當建立出站連線時,程式通常不會呼叫bind()根本不,讓作業系統決定本地地址和本地端口。

    每個作業系統的來源位址選擇邏輯略有不同。 (例如,從Windows 7/Srv2008 開始,作業系統將從出站介面中選擇數字最低的位址。在Linux 中,如果程式不選擇路由表條目,則各個路由表條目可以有一個「首選」來源位址來使用.)

當節目指定本地地址,通常由使用者選擇,而不是由程式選擇。 (例如,大多數服務在其配置中都有「監聽位址」設定。)

相關內容