2013-06-02 144 views
0

這可能是一個基本的疑問。 當我們在TCP套接字通信的情況下填寫客戶端源代碼時,我們用服務器的目標地址填充套接字地址結構。使用套接字的TCP/IP通信

但是,當數據包從服務器發送回客戶端時,服務器如何知道客戶端的IP地址?

簡而言之,誰將源IP和源端口填入發送方的IP數據包中,以便目標主機能夠感受到它?

感謝

回答

0

每個IP報頭包含源和目的IP地址,每個TCP報頭包含源和目的端口。服務器通過檢查客戶端發送給它的IP和TCP數據包頭來知道客戶端IP地址。

操作系統中的網絡堆棧填入客戶端/源地址。創建客戶端套接字時,可以設置自己的源端口,但大多數時候更容易讓操作系統爲您選擇一個未使用的「短暫」端口。如果您在創建客戶端套接字時未指定自己的源端口,則操作系統會將其填充到您的TCP標頭中。

+0

謝謝..但我懷疑是什麼組件的網絡堆棧,即哪個協議填充IP數據包中的源IP地址?它是ARP/DHCP/NAT? – arpita

+0

以上都是:-)。 TCP/IP或OSI協議棧中較低層的各種路由協議和設備可以修改TCP或IP協議頭,但是客戶/源操作系統必須填寫初始值,以便數據包可以在前往服務器。 – lreeder