TCP/IP基礎概念及通信過程舉例
出現
上個世紀60年代,由於中央集中式網絡的容災性較弱,以美國國防部為中心的一家組織研究出分組交換網絡。后來為了驗證分組交換技術的實用性,ARPANET出現了,並且在3年內逐漸發展,由4個節點發展至34個節點。20世紀70年代前半葉,ARPANET一個機構研制出了TCP/IP,1982年具體規范確定,1983年成為ARPANET唯一指定協議。乘着TCP/IP的發展之風,互聯網應運而生。
標准化
先說明一下TCP/IP的含義。其實它是指利用IP進行通信是所用到的協議群的統稱。TCP/IP協議標准化具有兩大特點:開放性及實用性。前者指任何人可以通過一定的方式制定修改協議;后者指TCP/IP協議根據實際實驗情況和可行性不斷修改,貼合應用。關於TCP/IP的規范由IETF制定,並在RFC文檔中可以查看。具體網址:rfc-editor,讀者可以在該網站查看TCP/IP協議文檔或是對TCP/IP協議的修改給出自己的建議。
互聯網基礎認知
前面說了互聯網是基於TCP/IP一步步發展起來了,這里大概介紹一下互聯網相關的知識。互聯網中的每個網絡都是由骨干網和末端網組成的,每個網絡通過NOC相連。如果運營商不同則通過IX連接。參考下圖:
TCP/IP協議分層模型簡介及通信舉例
這個系列的上一篇文章博主提到了OSI分層模型,下面我們將要學習的是TCP/IP分層模型。先參考下圖:

在TCP/IP中把OSI一些層次進行了抽象整合,整個TCP/IP分為硬件、數據鏈路層、網絡層、傳輸層和應用層。我們在這里先大致介紹一下各個分層的作用,后面的文章會詳細對每個分層相關的協議進行梳理。
簡介
硬件層:負責數據傳輸的硬件物理設備,由於硬件之間的差異性難以統一定義及指標。
數據鏈路層:利用以太網中的數據鏈路層進行通信,可以理解為NIC的“驅動程序”。
網絡層:使用IP協議,類似OSI第三層網絡層。此外除了IP協議還有ICMP協議(用於處理數據發送異常),ARP協議(用於從IP地址中解析MAC地址)。
傳輸層:讓應用程序之間實現通信,主要有TCP、UDP兩種協議。
應用層:類似OSI中的會話層、表示層及應用層。包括HTTP(應用層)、HTML(表示層)、E-Mail、FTP、SSH等等。
下面通過一個簡單的例子來說明一下這些分層是如何協調工作的。
通信舉例
發送
再次以發送郵件為例。點擊“發送”時開始進行TCP/IP通信。首先程序進行編碼,然后確定通信的建立連接、發送數據的時間。下面建立TCP連接。TCP根據應用指示負責建立連接、發送數據及斷開連接。TCP首部包括源端口號和目標端口號、序號及校驗和(詳細內容見后面的文章),通過首部信息傳遞TCP層的信息。加完首部后數據包往下傳遞到IP層,IP層加上IP首部包括地址等信息用於尋址操作,之后將數據繼續往下傳遞附加數據鏈路層首部。最后發送時的分組數據包會加上以太網包尾(用於循環冗余校驗)。
接收
主機收到數據包后會在以太網包首部找到MAC地址判斷是否為自己的包,如果不是則丟棄,如果是則傳遞給上一層IP層處理,以此類推,不斷往上傳遞至TCP層。在TCP層會計算校驗和以判斷數據是否破壞,然后檢查是否按序號接收數據,最后檢查端口號。處理完成之后數據包繼續往上層發送,即到了應用層。如果這時出現主機無郵件信箱、硬盤空間滿等情況,主機B則會發送“處理異常”通知發送端。


到這里TCP/IP通信流程大概梳理了一遍,具體細節在后面闡述。