TCP模塊在執行連接、收發、斷開等各階段操作時,都需要委托IP模塊將數據封裝成包發送給通信對象。
包的基本知識
包是由頭部和數據兩部分構成的。頭部包含目的地址等控制信息,可以理解為快遞包裹的面單;頭部后面就是委托方要發送給對方的數據,也就是相當于包裹里的貨物。
首先,發送方的網絡設備會負責創建包,創建包的過程就是生成含有正確控制信息的頭部,然后再附加上要發送的數據。接下來,包會發往最近的網絡轉化設備。當到達最近的轉發設備之后,轉化設備會根據頭部中的信息判斷接下來應該發往哪里。
這個過程里會有一張表,這張表里面記錄了每一個地址對應的發送方向,也就是按照頭部里記錄的目的地址在表進行查詢,并根據查到的信息判斷接下來應該發往哪個方向。
包收發操作概覽
IP模塊會添加IP頭部和mac頭部這兩種頭部。IP頭部中包含IP協議規定的、根據IP地址將包發往目的地所需的控制信息;MAC頭部包含通過以太網的局域網將包傳輸至最近的路由器所需的控制信息。
無論要收發的包還是控制包還是數據包,IP對各種類型的包的收發操作都是相同的。
生成包含接收方IP地址的IP頭部
IP頭部最重要的內容是IP地址,這個地址的最初來源是應用程序。還需要填寫發送方的地址,一般是由DHCP服務器自動分配。
因為協議棧的IP模塊與路由器負責包收發的部分都是根據IP協議規則來進行包收發操作的,所以它們也都用相同的方法來判斷把包發給誰。
生成以太網用的MAC頭部
生成了IP頭部后,接下來IP模塊還需要在IP頭部的前面加上MAC頭部。
IP頭部中的接收方IP地址表示網絡包的目的地,通過這個地址我們就可以判斷將包發到哪里,但在以太網的世界中,TCP/IP這個思路是行不通的。
以太網在判斷網絡包目的地是和TCP/IP的方式不同,因此必須采用相匹配的方式才能在以太網中將包發往目的地,而MAC頭部就是干這個用的。
IP模塊根據路由表Gateway欄的內容判斷應該把包發送給誰。通過ARP查詢目標路由器的MAC地址
在以太網中,有一種叫作廣播的方法, 可以把包發給連接在同一以太網中的所有設備。ARP就是利用廣播提問,從而獲取對方的MAC地址。
以太網的基本知識
以太網是一種為多臺計算機通夠彼此自由和廉價地相互通信而設計的通信技術。
這種網絡中任何一臺設備發送的信息所有設備都能接收到。因此需要在信息的開頭加上接收者的信息即地址,與接收者地址相匹配地設備就接收這個包,其他的設備則丟棄這個包。
將IP包轉換成電或光信號發送出去
IP生成的包只是存放在內存中的一串數字信息,沒有辦法直接發送給對方。因些,我們需要將數字信息轉化為電或光信號,才對在網線上傳輸,也就是說,這才是真正的數據發送過程。
負責執行這一操作的是網卡。網卡也無法單獨工作,要控制網卡還需要網卡驅動程序。
給網絡包再加3個控制數據
下面看一下網卡是如何將包轉換成電信號并發送到到網線中的。
網卡驅動從IP模塊獲取包之后,會將其復制到網卡內的緩沖區中,然后向MAC模塊發送發送包的命令。MAC模塊會將包從緩沖區中取出,并在開頭加上報頭和起始幀分界符,在末尾加上用于檢測錯誤的FCS(幀校驗序列)。
用電信號來表達數字信息時,我們需要讓0和1兩種比特分別對應特定的電壓和電流,這樣的電信號就可以表達數字信息。
向集線器發送網絡包
加上報頭、起始幀分界符和FCS之后,我們就可以將包通過網線發送出去了。發送信號的操作分為兩種,一種是使用集線器的半雙工模式,另一種是使用交換機的全雙工模式。
接收返回包
在使用集線器的半雙工模式以太網中,一臺設備發送的信號會到達連接在集線串的所有設備。這意味著無論是不是自己的信號都會通過接收線路傳進來。
通知計算機的操作會使用一個叫作中斷的機制。在網卡執行接收包的操作的過程中,計算機并不是一直監控著網卡的活動,而是去執行其他的任務。