數據包
出自 MBA智库百科(https://wiki.mbalib.com/)
數據包(Data Packe)
目錄 |
什麼是數據包[1]
數據包是指分塊的傳輸數據,它被用於早期的電腦通信網的文獻中,而目前則普遍使用“分組”一詞。
數據包的傳送[2]
如果一個協議已選擇了一個被坤(一個指向網路介面結構的指針)標識的介面,則協議就用以下的調用來傳送一個完全格式化的網路層數據包。
網路介面的輸出常式傳送數據包m給dst中指定的協議地址,或返回一個錯誤號。事實上,傳送可能不是立即進行或可能不是成功的。典型的情況是,輸出常式驗證目的地址,將數據包在發送隊列進行排隊,並且,如果介面不忙就預先準備好一個中斷驅動常式來發送數據包。對於不可靠介質(如乙太網),成功的傳輸僅意味著數據包被放到了電纜上而未遇上衝突。相反,一個X.25介面保證對每一條傳輸的消息提供正確的發送或提供一個出錯指示。網路系統使用的模型並不保證對在一個網路介面出現的數據包進行正確傳送,這與乙太網是最為接近的。輸出常式返回的出錯信息只是那些能立即檢測到的並且通常在實際上是微不足道的錯誤(網路崩潰、沒有緩存空間、無法處理的地址格式等)。如果錯誤在調用返回之後被檢測到,就不告知協議。
當傳送消息時,每一個網路介面通常必須為每個傳出的數據包格式化一個鏈路層地址e。網路介面層必須理解它所支持的每一種協議地址格式,以將其格式化為相應的鏈路層地址。每個協議族的網路層為每一條消息都選擇一個目的地址,然後使用這個地址來選擇要使用的合適的網路介面。把目標地址作為一個sockaddr結構傳遞給該介面的輸出常式。假定該介面支持這種地址格式,那麼該介面必須將目的協議地址映射到一個鏈路層協議地址,這個鏈路層協議與介面所支持的傳輸介質相關聯。這個映射可以是一個簡單的演算法,它可能需要一個表查詢,或者可能需要更多涉及的技術。
數據包的接收[2]
網路介面接收數據包,並根據在鏈路層協議頭部編碼的信息,將數據包分派給合適的網路層協議。每一個協議族必須有一個或多個協議組成網路層。在這個系統中,每一個網路層協議都有一個分配給它的輸入數據包隊列。一個網路介面所接收的數據包在一個協議的輸入數據包隊列中排隊,並發送一個軟體中斷來啟動網路層處理,見圖1-1。網路介面模塊使用相似的隊列來存儲正等待傳送的數據包。
圖1-1 輸入數據包被分派給協議的輸入隊列