TCP/IP協議族(TCP/IP網絡編程)【linux】(zzp)

TCP/IP協議棧的四層結構

圖解說明:

TCP/IP協議棧的四層結構

接下來我們對於每一層進行說明:

應用層協議

應用層協議由應用程序自己實現,有時程序員自己寫,有時使用現成的,比如http就是典型別人寫好的,現成可用的應用層協議。
如果我們自己實現我們就要自己調用傳輸層的TCP和UDP接口實現,並且自定義數據的傳輸格式。

發送數據時,應用層產生需要發送的原始數據,數據格式由應用層協議決定。
接收數據時,將數據提取出來,如果QQ聊天就顯示數據,如果是網頁數據,應用程序就將提取出的數據以網頁形式進行顯示。

傳輸層協議,網絡層協議,鏈路層協議,由TCP/IP協議棧實現,協議棧可以是OS的組成部分,也可以是獨立於OS之外的代碼實現。

TCP/IP協議棧實現

傳輸層

發送數據時,對數據進行分組,接收數據的時候,將分組的數據組合在一起,並且還負責對於數據進行錯誤檢查,並且保證數據的正確性。

網絡層協議

通過“ip分組交換”技術實現,這一層的主要用於控制路由器,由路由器實現ip分組交換,讓我們的數據能夠通過路由器在網絡上進行傳輸。

鏈路層協議

使用MAC地址,及就是物理地址,實現具體的數據通信。

TCP/IP協議族的詳細情況

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層的?
答:因爲只有應用層或則傳輸層才知道你要將數據發送給誰(目標)。

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