CSDN lidp http://blog.csdn.net/perfectpdl
當一個數據報到達時網絡驅動程序把數據報放到一個隊列中,同時發送一個消息給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進程將從該端口中提取并發送這些數據報。
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
