淺談TCP IP協議棧(一)入門知識【轉】

来源:https://www.cnblogs.com/linhaostudy/archive/2019/01/20/10296259.html
-Advertisement-
Play Games

說來慚愧,打算寫關於網路方面的知識很久了,結果到今天才正式動筆,好了,廢話不多說,寫一些自己能看懂的入門知識,對自己來說是一種知識的總結,也希望能幫到一些想瞭解網路知識的童鞋。 萬事開頭難,然後中間難,最後結尾難。。。哈哈,不扯這種心靈砒霜了,講講我這個小菜鳥是如何從對網路一竅不通到現在可以完整的說 ...


說來慚愧,打算寫關於網路方面的知識很久了,結果到今天才正式動筆,好了,廢話不多說,寫一些自己能看懂的入門知識,對自己來說是一種知識的總結,也希望能幫到一些想瞭解網路知識的童鞋。

萬事開頭難,然後中間難,最後結尾難。。。哈哈,不扯這種心靈砒霜了,講講我這個小菜鳥是如何從對網路一竅不通到現在可以完整的說出一個報文是如何轉發的初級水平,先看一下TCP/IP的介紹:

Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/網際網路互聯協議,又名網路通訊協議,是Internet最基本的協議、Internet國際互聯網路的基礎,由網路層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入網際網路,以及數據如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給網際網路的每一臺聯網設備規定一個地址。

如此深奧的解釋,相信沒幾個人能看的懂。。。,其實你可以簡單理解為,互聯網傳輸是分層的,就像蓋房子一樣,一層累一層。
舉個簡單的例子,就拿我們平時最常見的上網,打開瀏覽器,輸入www.baidu.com,瀏覽器上就會顯示百度的界面,可能一秒都不到的時間,事實上我們的報文已經走了個來回。這麼說還是有點抽象,但是要給大家講的一點就是,在互聯網的世界,一切的數據都是以報文的形式傳送的,而這份報文,大致是長這樣的:

image

你可能過會說,這是什麼玩意,但事實上報文就是這麼的不講道理,如果你面對的是這樣一個個十六進位的字元,恐怕會瘋的,因為你根本無從下手,所以我們需要分層次清晰得劃分一下報文的結構,劃分的層次如下:

image

那為什麼要叫TCP/IP協議棧內,這些協議和棧有什麼關係呢,大家應該都知道棧是一種先進後出的數據結構,那這和TCP/IP協議有什麼關係呢?我們就拿一個HTTP報文來說吧,HTTP報文屬於應用層協議的報文,我們輸入網址,首先會調用到DNS協議(功能變數名稱協議,後面會講到),然後把我們輸入的網址轉換為IP地址,這個IP地址大致就相當於現實生活中每個人的身份證一樣,是每個網頁唯一的標識,關於IP地址,後續我會詳細介紹,IP協議屬於網路層的協議。

我們先將HTTP報文壓入一個棧中(就好像是在分裝報文),然後是IP,不對,我們貌似漏了一個傳輸層啊,別急別介,HTTP報文在傳輸層用的是TCP協議,好,我們把TCP壓入棧中,再講IP層也壓入棧中,至於鏈路層的話,就用最常見的乙太網就OK了,好了,現在我們的棧裡面從頭至尾依次是以太幀頭-IP協議-TCP協議-HTTP協議,然後我們先忽略最底層的物理層,假設這個封裝好的棧一樣的報文漂洋過海,來到了它的目的地(至於怎麼過來的,我們後續也會講到),當對端收到這個報文以後,也就是我們封裝好的這個棧一樣的東西以後該怎麼辦呢?

會不會也是先拿HTTP呢?因為這個報文是我們構造的一個棧,所以說它的順序肯定也是棧,因此拿取的順序就是以太幀頭-IP協議-TCP協議-HTTP協議,發現沒,最先被封裝入的HTTP報文是最後才被拿出來的,這中間的細節如果能全部掌握,那基本商就算是入門了,關於這部分東西,我會在後面詳細介紹,現在有這個概念就可以了。

回顧一下,寫的有點亂,總結起來就是互聯網是分層的,協議是如何層層遞進封裝和解分裝的,記得大學里電腦網路是自頂向下,也就是先從應用層講起,我覺得這樣不太好,所以我會從底層講起,也就是自底向上的學習順序,一步步解開網路的神秘面紗!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 寫之前的說明 0. 其實吧。 這個東西已經寫好了,地址在:https://github.com/hjx601496320/JdbcPlus 這 系列 文章算是我寫的過程的總結吧。(恩系列,說明我可能會寫好久,╮(╯▽╰)╭) 1. 現在有很多的現成的orm框架,為什麼還要自己寫一個? 框架這種東西個 ...
  • 開始研究動態代理之前 先簡要談下動態代理的概念 在不改變原有類結構的前提下增強類的功能以及對類原有方法操作,註意是方法不是屬性(屬性一般被設計為private修飾,不可以直接被調用) 動態代理的基本實例不做闡述,網上一大把 不理解的同學可以直接去搜索。 今天說的是自己在項目中遇到的一個實際的動態代理 ...
  • 引入 gRPC 是谷歌推出的一個高性能優秀的 RPC 框架,基於 HTTP/2 實現。並且該框架對 .NET Core 有著優秀的支持。最近在做一個項目正好用到了 gRPC,遇到了需要串流傳輸的問題。 引入 項目創建 首先還是需要安裝 .net core sdk,可以去 http://dot.net ...
  • 項目上用到的,隨手做個記錄,哈哈。 直接上代碼: 1 using System; 2 using System.Data; 3 using System.Configuration; 4 using System.Collections.Generic; 5 using System.IO; 6 u ...
  • 在UWP應用開發中,我們常常有向用戶發送一些提示性消息的需求。這種時候我們一般會選擇MessageDialog、ContentDialog或者ToastNotification來完成功能。 但是,我們大多數時候僅僅是需要在應用內向用戶顯示一條提示消息(例如“登錄成功!”),不需要用戶對這條消息做出處 ...
  • 代碼期間,把代碼過程經常用的內容做個珍藏,下邊代碼是關於C#的String.Split 分割字元串用法詳解的代碼,應該對碼農們有些用途。 1) public string[] Split(params char[] separator)2) public string[] Split(char[] ...
  • 旁白音:本文是不定時更新的.net core,當前主線任務的Nuxt+VueAdmin教程的 nuxt.js 之 tibug項目已上線,大家可以玩一玩:http://123.206.33.109:7090,具體的部署教程會在下周發表。 緣起 哈嘍大家周五好呀,今天是一個不定時更新的文章,是很簡單的一 ...
  • 目錄 1、 環境準備 2、搭建ss服務端 2.1. 安裝pip 2.2. 使用pip安裝並配置shadowsocks 2.3. 配置啟動腳本並啟動服務 3、配置客戶端並連接ss伺服器 3.1. 各平臺客戶端下載地址 3.2. 配置客戶端並連接 作為一個IT從業者and愛好者,我們必然會使用百度、Go ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...