tcp/ip協議並不是我們通常所認為的tcp協議和ip協議,而是基於tcp和ip這兩個最初的協議之上的不同的通訊協議的大集合。用於從應用程式到網路的資料傳輸控制。我們通常稱他們為tcp/ip協議族,它是70年代中期美國國防部為其arpanet廣域網開發的網路體系結構和協議標準,其中大致包含了下面這些協議。
下面我們主要來詳細講解一下tcp協議和ip協議。
ip協議是tcp/ip協議族的核心協議,也是socket網路程式設計的基礎之一。我們從一下兩個方面來**ip協議:
ip資料報的路由和**:ip資料報的路由和**發生在除目標機器之外的所有主機和路由器上,它們決定資料報是否應該被**以及如何**。ip協議是tcp/ip協議族的動力,它為上層提供無狀態,無連線,不可靠的服務。
ipv4的頭部結構如圖所示,其長度通常為20位元組,除非含有可變長的選項部分。
這張中反映了ip模組的工作流程,從右往左分析,當ip模組接收到來自資料鏈路層的ip資料報時,對其頭部做crc校驗。確認無誤就分析頭部資訊。如果該ip資料報的頭部設定了源站選路選項(選項字段),則ip模組呼叫資料報**子模組來處理該資料報。如果該ip資料報的頭部中目標位址ip是本機的某個ip位址,或者是廣播位址,即該資料報是傳送給本機的,則ip模組就根據資料報頭部中的協議欄位來決定將他派發給哪個上層應用。如果發現這個資料報不是傳送給本機的,則也呼叫資料報**子模組來處理該資料報。
資料報**子模組將首先檢測系統是否允許**,如果不允許,ip模組就將資料報丟棄。如果允許,資料報**子模組將對該資料報執行一些操作,然後將它交給ip資料報輸出子模組。
ip模組實現資料路由的核心資料結構是路由表,該錶按照資料報的目標ip位址分類,同一型別的ip資料報將被發往相同的下一跳路由器。
路由表內容如下:
查詢路由表中和資料報的目標ip位址完全匹配的主機ip位址,如果找到,就使用該路由項,沒找到則轉到步驟2.查詢路由表中和資料報的目標ip位址具有相同網路id的網路ip位址,如果找到就是用該路由項,沒找到則轉到步驟3.選擇預設路由項,這通常意味著資料報的下一跳路由是閘道器。
對於允許ip資料報**的系統(主機或路由器),資料報**子模組將對期望**的資料執行如下操作:
檢查資料報頭部的ttl值,如果ttl為0,則丟棄之。檢視資料報頭部的嚴格路由選擇選項。如果被設定,則檢測資料報的目的ip位址是否是本機的某個ip位址,如果不是,則傳送乙個icmp源站選路失敗報文傳送給傳送端。如果有必要,則給源端傳送乙個icmp重定向報文,以告訴它乙個更合理的下一跳路由器。將ttl值減1。處理ip頭部選項。如果有必要,則執行ip分片操作。傳輸層協議主要有兩個:
tcp協議
面向連線,位元組流的可靠傳輸
udp協議
無連線,不可靠的資料報服務
使用tcp協議的通訊雙方必須先建立連線,才能開始資料的讀寫。雙方都要為該連線分配核心資源來管理連線的狀態和資料的傳輸。tcp連線是全雙工的,雙方的資料讀寫可以通過乙個連線進行。完成資料交換之後,通訊雙方都必須斷開連線以釋放系統資源。
當傳送端應用程式連續多次進行寫操作時,tcp模組先將這些資料放入tcp傳送緩衝區中。傳送緩衝區中這些等待傳送的資料可能被封裝成乙個或者多個tcp報文段發出。因此,tcp模組傳送出的tcp報文段的個數和應用程式執行的寫操作次數沒有固定的數量關係。同理,接收端接收到乙個或者多個tcp報文段後,tcp模組將他們攜帶的資料按照tcp報文段的序號依次放入tcp接收緩衝區,接收端應用程式可以一次性將接收緩衝區所有資料全部讀出,也可以分為多次讀出,這取決於使用者指定的應用程式讀緩衝區的大小。因此,應用程式執行讀操作的次數,和tcp模組接收到的tcp報文段之間也沒有固定的數量關係。
這就是位元組流的概念:應用程式對資料的傳送和接收是沒有邊界限制的。
udp傳送端應用程式每執行一次寫操作,udp模組就將其封裝成乙個udp資料報並傳送之。接收端必須即使針對每個udp資料報執行讀操作,否則就會丟包。而且如果使用者沒有指定足夠的應用程式緩衝區來讀取udp資料報,則udp資料報被截斷。
urg:表示緊急指標是否有效。ack:表示確認號是否有效。攜帶ack標誌的tcp報文段被稱為確認報文段。psh:提示接收端應用程式應該立即從tcp接收緩衝區中讀走資料,為後續資料騰出空間。rst:表示要求對方重新建立連線。攜帶rst的報文段被稱為復位報文段。syn:表示請求建立乙個連線。攜帶syn標誌的報文段被稱為同步報文段。fin:表示通知對方本端要關閉連線。攜帶fin標誌的報文段被稱為結束報文段。
第乙個字段說明選項的型別,第二個字段(如果有的話)指定該該選項的長度,第三個字段(如果有的話)是選項的具體資訊。
TCP IP協議詳解
tcp ip協議是乙個比較複雜的協議集,有很多專業書籍介紹。在此,我僅介紹其與程式設計密切相關的部分 乙太網上tcp ip協議的分層結構及其報文格式。我們知道tcp ip協議採用分層結構,其分層模型及協議如下表 傳 輸 層 transport tcp udp 網 間 網層 internet ip a...
TCP IP協議詳解
一 tcp ip 和 iso osi iso osi模型,即開放式通訊系統互聯參考模型 open system interconnection reference model 是國際標準化組織 iso 提出的乙個試圖使各種計算機在世界範圍內互連為網路的標準框架,簡稱osi。tcp ip協議模型 tr...
TCP IP協議分層詳解
一 tcp ip 和 iso osi模型區別 tcp ip 和 iso osi iso osi模型,即開放式通訊系統互聯參考模型 open system interconnection reference model 是國際標準化組織 iso 提出的乙個試圖使各種計算機在世界範圍內互連為網路的標準框...