tcp/ip協議棧實現機制

  CSDN lidp  http://blog.csdn.net/perfectpdl


tcp/ip協議棧屬於操作系統內核層,通過提供系統調用供用戶空間訪問,從數據報到達最底層的網卡到最終傳遞給上層軟件有一個過程,
當一個數據報到達時網絡驅動程序把數據報放到一個隊列中,同時發送一個消息給ip進程,這裏ip進程是一個獨立的程序,專門處理ip數據報,tcp/ip協議棧中,根據協議的功能及複雜程度,一般通過進程方式實現,而協議間的數據傳遞則藉助於操作系統提供的進程間通訊機制,當ip進程接受了一個傳入的數據報,他必須決定將其發往何處作進一步處理,如果數據報中的內容是一個報文段,則必須將其交付給TCP模塊,如果他攜帶的是用戶數據報(UDP),則必須將其交付給udp模塊,以此類推。


由於TCP比較複雜,因而在許多設計方案中,有一個獨立的進程來處理傳入的TCP報文段,由於IP和TCP有各自獨立的進程執行,因而IP和TCP必須藉助進程間的通信機制來通信。


一旦tcp模塊收到ip進程傳送過來的報文段,就利用tcp協議端口號來尋找該報文段所屬的連接,如果報文段中含有數據,TCP將把數據添加到與該連接相關的一個緩衝區中,並給發送方返回一個確認,如果輸入的報文段中含有對放送出去的數據的確認,tcp輸入進程還必須與tcp定時器管理進程通信,取消超時重發事件。

而處理udp數據報的進程結構與處理tcp進程採用的結構不同,由於udp比tcp要簡單,udp模塊不作爲獨立進程存在,事實上,它是由一些常規過程組成。ip進程通過調用來處理傳入的udp數據報,這些過程檢查udp目的站的協議端口號,根據端口號爲udp數據報選擇一個操作系統隊列,ip進程把udp數據報放在響應的端口中,是應用程序可從這些端口中提取數據報。

                                                                                                                   TCP/UDP數據輸入流程圖

                                                                                  





TCP數據報輸出過程
與輸入一樣,tcp的輸出也是很複雜的,必須先建立連接,所傳送的數據必須放到報文段中,在對方發來確認之前,報文段必須不斷重發,tcp把報文交給ip,由ip來處理選路和傳送,系統協議棧利用兩個tcp進程來處理這一複雜過程,一個爲tcpout,由他來處理報文段和數據傳輸細節,另一個進程是tcptimer,他管理一個定時器,爲超時重發事件定時,通知tcpout進程重發。下圖爲tcp, udp數據輸出結構圖。


                                                                          





總結:tcp/ip協議棧是計算機操作系統中的一部分,它使用進程這一抽象概念使各個協議軟件互相獨立,每一個進程獨立執行,並提供明確的並行機制,這種系統中有ip進程,tcp輸入進程,tcp輸出進程和tcp定時器管理進程,同時每個應用程序還各有一個進程。


上層應用程序作爲獨立進程通過系統調用向tcp傳遞數據流或者想udp數據報,對於udp輸出處理,運行某個應用程序的進程調用一個系統調用,執行一段udp過程,申請一個ip數據報,填寫相應的目的地址,將udp數據封裝在Ip數據報中,然後將ip數據報傳遞給ip進程,由ip進程發送出去。

對於tcp輸出,運行應用程序的進程調用一個系統調用(socket,send..),將數據傳入操作系統中,並保存在一個緩衝區內,應用進程隨後通知tcp輸出進程,有新的數據等待發送,當tcp輸出進程執行時,他將數據流劃分成報文段,然後將這些數據封裝在ip數據報中,最後,tcp輸出進程將ip數據報放入某一端口中,ip進程將從該端口中提取併發送這些數據報。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章