概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎( 四 )


概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎

文章插圖
  • 應用層數據通過協議棧發到網絡上時 , 每層協議都要加上一個數據首部(header),稱為封裝(Encapsulation) 。首部信息中包含了一些類似于首部有多長 , 載荷(payload)有多長 , 上層協議是什么等信息

概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎

文章插圖
因每一層的傳輸數據單元不同,所以需要封裝報文頭部,以此使下一層能夠看懂識別 。傳輸層:傳輸層有TCP/IP兩個協議 , TCP(傳輸控制協議)和UDP(用戶數據報協議) 。TCP協議傳輸更加穩定可靠,UDP協議傳輸效率更高 。所以,上層數據到達傳輸層后需要封裝TCP頭部或者UDP頭部 。網絡層:同理,上層數據到達這里需要封裝IP頭部 。TCP/IP定義了網絡互聯協議(IP)(英文是Iternet Protocol) 。而IP又由四個支撐協議組成:ARP(地址解析協議),RARP(逆地址解析協議) , ICMP(網際控制報文協議)和IGMP(網際組管理協議) 。數據鏈路層:同理 , 上層數據到此需要封裝MAC頭部 。物理層:到達物理層就直接由計算機通過信號接收了 。
  • 數據封裝成幀后發到傳輸介質上,到達目的主機后每層協議再剝掉相應的首部,根據首部中的 “上層協議字段” 將數據交給對應的上層協議處理

概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎

文章插圖
問題:
  • 每一協議層的數據包是什么?
?數據包=報頭+有效載荷
  • 協議的共性是什么?
?1.如何將數據包中的報頭和有效載荷分離的問題,這個過程叫做解包 。?2.自底向上 , 要確認自己的有效載荷交付給上層的那個協議,這個過程叫做分用 。
  • 如何解決將數據包中的報頭和有效載荷分離的問題?
? 1.定長報頭 。報頭的長度是確定的 , 這樣就可以實現二者分離 。
【概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎】?2.自定義描述符字段 。報頭中添加一個字段,表示報頭的長度 。
數據封裝的過程:
概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎

文章插圖
局域網通信局域網內的主機是通過路由器和交換機連接在一起的,局域網內的兩臺主機通信本質就是兩個協議棧之間在進行通信,下面是兩臺主機通過TCP/IP協議進行文件傳輸的過程:
概念+協議的了解+OSI七層模型,TCP/IP五層協議,網絡數據傳輸流程 Linux--網絡基礎

文章插圖
數據在自身協議棧自頂向下進行封裝:
  • 數據包交給應用層,應用層添加上對應的應用層協議報頭 , 然后把整個數據包向下交付給傳輸層
  • 傳輸層再添加上對應的傳輸層協議報頭,然后把整個數據包向下交付給網絡層
  • 網絡層再添加上對應的網絡層協議報頭,然后把整個數據包向下交付給數據鏈路層
  • 數據鏈路層再添加上對應的數據鏈路層協議報頭,然后把整個數據包通過網絡交付給對端數據鏈路層
數據在對端協議棧自底向上進行分用:
  • 數據鏈路層將數據包的報頭和有效載荷進行解包分離,然后將有效載荷交付給上層的網絡層
  • 網絡層將數據包的報頭和有效載荷進行解包分離,然后將有效載荷交付給上層的傳輸層
  • 傳輸層將數據包的報頭和有效載荷進行解包分離,然后將有效載荷交付給上層的應用層
  • 應用層將數據包的報頭和有效載荷進行解包分離,將最后的數據進行相關處理然后交付給用戶
思考下面幾個問題:
1.局域網中 , 所有的主機可以直接通信,它們是如何確定數據是發給哪一臺主機,目標主機又是如何確認數據是發給自己的?
在數據鏈路層 , 有一個MAC地址(48位) , 網卡硬件地址或者序列號,是全球唯一的,用來標識主機的唯一性 。每一臺主機都要一個MAC地址,且都知道,發送方將數據發出去,這個數據里面包含目標主機的MAC地址信息 , 每個主機都可以收到這一份數據 , 且用自己的MAC地址與數據中的目標主機MAC地址進行比較,如果不同,表明該數據不是發給自己的,就將數據丟掉,相同就表明該數據是發給自己的,就收下 。
2.局域網中,如何將數據發送給所有主機?
主機發送數據是 , 將MAC地址設置為一個廣播地址,這樣所有的主機都認為這個數據是發給自己的

推薦閱讀