當前位置: 華文問答 > 數碼

TCP協定中的埠具體指的是什麽,為什麽要有埠,你是怎麽理解的?

2014-01-22數碼

樓主你把我們知道的、不知道的全說出來了,我們無話可說了…

這是我目前看到解釋埠最好、最合理的,沒有人雲亦雲,獨立思考,給你100個贊!

來了總要說點自己的理解,各位多指正:

乙太網路上封裝了很多種協定

IPv4: 0x0800

ARP:0x0806

802.1q: 0x8100

PPPoE : 0x8863 0x8864

IPv6: 0x86DD

等等協定,乙太網路卡需要這個協定號來區分是哪個棧的,網卡也只會讀取乙太網路頭14個字節,然後根據協定資訊來做辨別,如果他需要讀取TCP埠號的資訊,那也就沒有TCP/IP協定棧什麽事了,網卡直接提供介面函數給應用程式,個人認為網絡分層的概念,就是數據鏈路層做自己份內的事,網絡層的事還是留給IP來做比較合理。

所以個人認為,網卡不會和套用層直接打交道,不會解釋埠號資訊。

IPv4 或IPv6在啟動的時候,應該透過一個序號產生器制,以IPv4為例,告訴網卡0x0800是我IPv4的,有包來了請通知我,透過我註冊時的回呼函式 callback 來執行,包到達IPv4,透過IP頭的協定號來分辨是哪個上層協定,和剛才的方式類似,透過回呼函式到達上層,比如TCP;TCP讀取埠號,這個埠號就是建立socket時註冊的,socket建立成功應該有一個process ID,這應該是作業系統來完成的,TCP於是就把[ 埠號 Process ID] 聯系了起來,於是就和這個Process ID行程交換,完成數據的發送和接收。