TCP/IP協議棧的四層結構
圖解說明:
接下來我們對於每一層進行說明:
應用層協議
應用層協議由應用程序自己實現,有時程序員自己寫,有時使用現成的,比如http就是典型別人寫好的,現成可用的應用層協議。
如果我們自己實現我們就要自己調用傳輸層的TCP和UDP接口實現,並且自定義數據的傳輸格式。
發送數據時,應用層產生需要發送的原始數據,數據格式由應用層協議決定。
接收數據時,將數據提取出來,如果QQ聊天就顯示數據,如果是網頁數據,應用程序就將提取出的數據以網頁形式進行顯示。
傳輸層協議,網絡層協議,鏈路層協議,由TCP/IP協議棧實現,協議棧可以是OS的組成部分,也可以是獨立於OS之外的代碼實現。
傳輸層
發送數據時,對數據進行分組,接收數據的時候,將分組的數據組合在一起,並且還負責對於數據進行錯誤檢查,並且保證數據的正確性。
網絡層協議
通過“ip分組交換”技術實現,這一層的主要用於控制路由器,由路由器實現ip分組交換,讓我們的數據能夠通過路由器在網絡上進行傳輸。
鏈路層協議
使用MAC地址,及就是物理地址,實現具體的數據通信。
TCP/IP協議族的詳細情況
TCP/IP協議是由不同子協議,按照以上四層結構組合在一起的協議家族。
圖:
網絡層協議中,IP是核心協議,ICMP和IGMP協議是輔助IP協議工作做的子協議。
應用層想使用TCP/IP通信有三條路線:
(1)tcp路線:應用層——>TCP——> ip ——>硬件接口
(2)udp路線:應用層——>UDP——> ip ——>硬件接口
(3)ip路線:應用層——> ip ——>硬件接口
越過了TCP和UDP。
數據傳輸的時的封包和拆包
圖解說明:跨機進程間數據通信
上面的圖不是很清楚,我把上面兩張圖分爲發送端和接收端分開:
網絡層封裝源ip和目的ip、源端口和目的端口的原因:
如果收到數據的主機進程要回複數據,就需要封裝源ip。
如果沒有目標ip就沒有辦法找到接收數據主機。
如果發送端有若干個應用程序,那麼如果發送端主機收到了回覆的數據,那麼有若干個應用程序都在進行網絡通信,所以必須通過源端口進行區分。
那麼目標端口的封裝和源端口的原理相似,發送給對方的主機目前可能運行多個應用程序都在進行網絡通信,所以也必須區分,才能知道發送給目標主機上的哪一個正在通信的應用程序。否則也會無法區分。
注意:
不是所有的應用程序都有端口,只有專門實現網絡通信的應用程序纔有端口,通過端口才能識別應該把數據回答給哪一個應用程序。
ip層封裝的源IP和目標IP是怎麼來的。
(1)源ip:自動檢測本機ip得到。
(2)目標ip:由應用層(應用程序)或者傳輸層交給ip層的。
爲什麼是應用層或者傳輸層交給IP層的?
答:因爲只有應用層或則傳輸層才知道你要將數據發送給誰(目標)。