1. 程式人生 > >TCP/IP協議是什麼?我們10分鐘搞定

TCP/IP協議是什麼?我們10分鐘搞定

零·程式設計的我們為什麼要了解TCP/IP?

我們來想想,我們編寫的程式大致可以分為幾種?為了我們的生活方便,我們運用程式設計將我們的工作效率大大提高,這是一種工具性的程式。好了,可是我們的程式不是拿來自己用用就可以了,我想每一個具有網際網路和程式設計思想的人都希望自己的作品可以被大家看見,我們就要將我們的程式分享。也就是說我們的程式的走向大概會歸到網際網路這條大河裡面。所以瞭解網際網路的傳輸方式和規則,也成了我們這類人的生活技能和硬性需求。當然,如果你的程式設計產品正好是社交通訊方面的,那麼TCP/IP協議你就不能是瞭解這麼簡單了。

一·什麼是TCP/IP

所謂協議(protocol),其實就是一個群體之間規定的規則,這個規則的目的是為了保證這個群體裡面的人可以正常交流。還是回到計算機和網路的通訊這邊來舉例。比如,
如何探測到通訊目標、由哪一邊先發起通訊、使用哪種語言進行通訊、怎樣結束通訊等規則都需要事先確定。不同的硬體、作業系統之間的通訊,所有的這一切都需要一種規則。

協議中存在各式各樣的內容。從電纜的規格到 IP 地址的選定方法、尋找異地使用者的方法、雙方建立通訊的順序,以及 Web 頁面顯示需要處理的步驟,等等。

像這樣把與網際網路相關聯的協議集合起來總稱為 TCP/IP。也有說法認為,TCP/IP 是指 TCP 和 IP 這兩種協議。還有一種說法認為,TCP/IP 是在 IP 協議的通訊過程中,使用到的協議族的統稱。

這裡寫圖片描述

二· 為什麼不能只有一個協議?

當我們知道TCP/IP是一個協議群的時候,我想有些人會有這樣一個疑問。為什麼要有這麼多的協議?如果是關於通訊的話,為什麼我們不能用一個比較全的協議,這樣不是更簡單?

對於這個問題我想說:多不等於複雜,少不等於簡單。有時候可能恰恰相反。

對於上面那句話的解釋和對“為什麼不能只有一個協議? ”問題的回答我想分兩個方面回答:

對於通訊,我們的客觀世界本身是有所區分的。舉個例子,我們要將資訊發給其他人,對於我們來說,就是我們電腦的訊息轉移到其他人的電腦上,至於怎麼完成這件事的放大,我們一概不知。可是有一點我們是可以明白的。就是,我們電腦裡的東西不可能如隔空取物一般的到人家的電腦裡,肯定是根據什麼什麼東西傳輸過去的。

其實,通過為了達成我們所描繪的檔案傳輸,其實需要線纜、無線訊號和每個電腦是具有的唯一的地址等條件。我們看這些條件,就發現了這裡面有很多東西是屬於不同類別的,有的是物體,比如線纜,有的是無線的,比如無線電。如果我們以這個思路將我們的協議分為幾個層面,讓每個層面有專門的協議去負責,那麼我們既可以做到詳細和完整,我們還可減輕工作量,如我們要修改協議,我們不需要將所以的協議都改,只需要修改我們需要的部分就好了。


第二個原因更加直白:沒有人能夠全面掌握網際網路中的傳輸狀況

在到達通訊目標前的中轉過程中,那些計算機和路由器等網路裝置只能獲悉很粗略的傳輸路線。

這種機制稱為路由選擇(routing),有點像快遞公司的送貨過程。想要寄快遞的人,只要將自己的貨物送到集散中心,就可以知道快遞公司是否肯收件發貨,該快遞公司的集散中心檢查貨物的送達地址,明確下站該送往哪個區域的集散中心。接著,那個區域的集散中心自會判斷是否能送到對方的家中。我們是想通過這個比喻說明,無論哪臺計算機、哪臺網路裝置,它們都無法全面掌握網際網路中的細節。

就是因為沒有人能知道網際網路的資訊傳輸的所有細節,那麼我們就無法只用一個協議去將它的一切都包括起來。我們將協議根據一個思路進行分組和切割,讓負責這一塊的人來了解這一塊的協議,這種分工協作更專業也更加科學。

三.TCP/IP的分層

對於,協議分層,TCP/IP 協議族按層次分別分為以下 4 層:應用層、傳輸層、網路層和資料鏈路層。

這裡寫圖片描述

TCP/IP 協議族各層的作用如下。

應用層

應用層決定了向用戶提供應用服務時通訊的活動。TCP/IP 協議族內預存了各類通用的應用服務。比如,FTP(FileTransfer Protocol,檔案傳輸協議)和 DNS(Domain Name System,域名系統)服務就是其中兩類。HTTP 協議也處於該層。

傳輸層

傳輸層對上層應用層,提供處於網路連線中的兩臺計算機之間的資料傳輸。在傳輸層有兩個性質不同的協議:TCP(Transmission ControlProtocol,傳輸控制協議)和UDP(User Data Protocol,使用者資料報協議)。

網路層(又名網路互連層)

網路層用來處理在網路上流動的資料包。資料包是網路傳輸的最小資料單位。該層規定了通過怎樣的路徑(所謂的傳輸路線)到達對方計算機,並把資料包傳送給對方。與對方計算機之間通過多臺計算機或網路裝置進行傳輸時,網路層所起的作用就是在眾多的選項內選擇一條傳輸路線。

鏈路層(又名資料鏈路層,網路介面層)

用來處理連線網路的硬體部分。包括控制作業系統、硬體的裝置驅動、NIC(Network Interface Card,網路介面卡,即網絡卡),及光纖等物理可見部分(還包括聯結器等一切傳輸媒介)。硬體上的範疇均在鏈路層的作用範圍之內。

四·瞭解主要的一些協議

一.IP協議

按層次分,IP(Internet Protocol)網際協議位於網路層。InternetProtocol 這個名稱可能聽起來有點誇張,但事實正是如此,因為幾乎所有使用網路的系統都會用到 IP 協議。TCP/IP 協議族中的 IP 指的就是網際協議,協議名稱中佔據了一半位置,其重要性可見一斑。可能有人會把“IP”和“IP 地址”搞混,“IP”其實是一種協議的名稱。

IP 協議的作用是把各種資料包傳送給對方。而要保證確實傳送到對方那裡,則需要滿足各類條件。其中兩個重要的條件是 IP 地址和 MAC地址(Media Access Control Address)。

IP 地址指明瞭節點被分配到的地址,MAC 地址是指網絡卡所屬的固定
地址。IP 地址可以和 MAC 地址進行配對。IP 地址可變換,但 MAC地址基本上不會更改。

使用 ARP 協議憑藉 MAC 地址進行通訊

IP 間的通訊依賴 MAC 地址。在網路上,通訊的雙方在同一區域網(LAN)內的情況是很少的,通常是經過多臺計算機和網路裝置中轉才能連線到對方。而在進行中轉時,會利用下一站中轉裝置的 MAC地址來搜尋下一個中轉目標。這時,會採用 ARP 協議(AddressResolution Protocol)。ARP 是一種用以解析地址的協議,根據通訊方的 IP 地址就可以反查出對應的 MAC 地址。

這裡寫圖片描述

二·TCP協議

按層次分,TCP 位於傳輸層,提供可靠的位元組流服務。

所謂的位元組流服務(Byte Stream Service)是指,為了方便傳輸,將大塊資料分割成以報文段(segment)為單位的資料包進行管理。而可靠的傳輸服務是指,能夠把資料準確可靠地傳給對方。一言以蔽之,TCP 協議為了更容易傳送大資料才把資料分割,而且 TCP 協議能夠確認資料最終是否送達到對方。

確保資料能到達目標

為了準確無誤地將資料送達目標處,TCP 協議採用了三次握手(three-way handshaking)策略。用 TCP 協議把資料包送出去後,TCP不會對傳送後的情況置之不理,它一定會向對方確認是否成功送達。21握手過程中使用了 TCP 的標誌(flag) —— SYN(synchronize) 和ACK(acknowledgement)。

傳送端首先發送一個帶 SYN 標誌的資料包給對方。接收端收到後,回傳一個帶有 SYN/ACK 標誌的資料包以示傳達確認資訊。最後,傳送端再回傳一個帶 ACK 標誌的資料包,代表“握手”結束。

若在握手過程中某個階段莫名中斷,TCP 協議會再次以相同的順序傳送相同的資料包。

注意的是:除了上述三次握手,TCP 協議還有其他各種手段來保證通訊的可靠
性。

這裡寫圖片描述

三·DNS協議
DNS(Domain Name System)服務是和 HTTP 協議一樣位於應用層的協議。它提供域名到 IP 地址之間的解析服務。

計算機既可以被賦予 IP 地址,也可以被賦予主機名和域名。比如www.badidu.com。

使用者通常使用主機名或域名來訪問對方的計算機,而不是直接通過 IP地址訪問。因為與 IP 地址的一組純數字相比,用字母配合數字的表示形式來指定計算機名更符合人類的記憶習慣。

但要讓計算機去理解名稱,相對而言就變得困難了。因為計算機更擅長處理一長串數字。

為了解決上述的問題,DNS 服務應運而生。DNS 協議提供通過域名查詢 IP 地址,或逆向從 IP 地址反查域名的服務。

五·協議之間的關係

這裡寫圖片描述

六·未完

我們知道了一些簡單的協議和協議的用法之後。我們發現,協議的存在就是規則的存在,並且這個規則是無比的繁雜。也就是說,當我們知道了解協議之後,當我們真實的需要運用協議來達到我們的目的時候,我們是要運用到它真是的核心和內容,所以學習還沒有結束。
未完……..

PS:文章中的配圖均來自《圖解HTTP》

相關推薦

TCP/IP協議是什麼?我們10分鐘

零·程式設計的我們為什麼要了解TCP/IP? 我們來想想,我們編寫的程式大致可以分為幾種?為了我們的生活方便,我們運用程式設計將我們的工作效率大大提高,這是一種工具性的程式。好了,可是我們的程式不是拿來自己用用就可以了,我想每一個具有網際網路和程式設計思想的人

Python:10分鐘不寫代碼的爬蟲

出現 ring swe 導入 gem 取數據 bbb del delay 代碼自己敲 使用 Chrome 瀏覽器插件 Web Scraper 可以輕松實現網頁數據的爬取,不寫代碼,鼠標操作,點哪爬哪,還不用考慮爬蟲中的登陸、驗證碼、異步加載等復雜問題。 Web Scrap

10分鐘Lync 2010和Quintum AF集成

Lync Quintum AF集成 接線拓撲接線方法:l 電信直線直接接在Quintum AF的FXO口上l AF采用RJ45接入網絡 使用效果:l PSTN用戶撥打直線的號碼,會聽到二次撥號音,然後再輸入Lync用戶的分機號碼就可以直接振鈴Lync用戶l Lync用戶直接撥打外部號碼就可以直

Python資料處理之(十 八)10分鐘matplotlib

Matplotlib 簡介 1.1 為什麼用 Matplotlib 1.2 Matplotlib 安裝 基本使用 2.1 基本用法 2.2 figure 影象 2.3 設定座標軸1 2.4 設定座標軸2 2.5 Legend 圖例 2.6 Annota

程式設計師界改BUG“神”發明,學會10分鐘一個BUG

對於大部分開發人員來說,你所看到的絕大部分BUG已經被別人修復並且分享出來了,這時候百度已經足以幫你 但是你也有可能會遇到一些稀奇古怪的Bug,這時候你就需要靜下心來,好好的仔細研究一下了。下面,分享一下我偶然得到的心得體會。 首先,找出Bug 換環境 換使用者

nginx安裝詳細版【10分鐘

話不都說,如果不是太瞭解nginx的話 給大家推薦一篇之前寫的部落格,請點選nginx全部知識 百度雲分享連線: 連結:https://pan.baidu.com/s/1fLBUSSLNHMCOcCIOcY6kwg 提取碼:mavd 注: 裡邊有安裝包和文件都有,特別詳細,不下載

玩轉雲主機,手把手叫你10分鐘一個屬於自己wordpress部落格(mysql詳盡篇)

前言 寫到這裡,在前面幾篇我們已經安裝好了所需的環境,我還用七牛雲主機,在搭建了SS,以後就可以愉快的訪問谷歌了(你懂的)。 當然,其實主機沒有展現它原本的猙獰。我們還可以用它來做點什麼呢? 當然是搭建個屬於自己的部落格!!! 一、前置環境 php nginx

10分鐘Java帶token驗證的註冊登入

這是spring boot框架下的登入註冊功能,並且帶有token驗證,可以用於生產環境的例項原理太簡單,直接上程式碼,讓你知道什麼叫拿來主義!!1,java中專案介紹 2,resources 中的內容3,用法:建立好所有的需要的類,,資料庫中建立好需要的資料庫,程式碼複製貼上,啟動,就可以用了實際程式碼:&

零基礎Python爬蟲下載圖片 10分鐘

本人從未學過Python  想開始學但是 但是不喜歡聽理論課 就直接開始在時間中學習進入正題Python爬蟲非常簡單 第一步首先獲取開啟頁面 獲取整個網頁原始碼def getHtml(url): page = urllib.request.urlopen(url)

【前端知識體系-JS相關】10分鐘JavaScript正則表示式高頻考點

1.正則表示式基礎 1.1 建立正則表示式 1.1.1 使用一個正則表示式字面量 const regex = /^[a-zA-Z]+[0-9]*\W?_$/gi; 1.1.2 呼叫RegExp物件的建構函式 const regex = new RegExp(pattern, [, flags]) 1.1.3

HTML5 知識一覽,10分鐘

#HTML5知識點彙總 ##HTML5 中的一些有趣的新特性 用於繪畫的 canvas 元素 用於媒介回放的 video 和 audio 元素 對本地離線儲存的更好的支援 新的特殊內容元素,比如 article、footer、header、nav、section 新的表單控制元件,比如 calendar(日曆

10分鐘 Java 併發佇列好嗎?好的

| **好看請贊,養成習慣** > - 你有一個思想,我有一個思想,我們交換後,一個人就有兩個思想 > > - If you can NOT explain it simply, you do NOT understand it well enough 現陸續將Demo程式碼和技術文

10分鐘讓你困惑的 Jenkins 環境變數

## 前言 Jenkins, DevOps 技術棧的核心之一,CI/CD 離不開編寫 Pipeline 指令碼,上手 Jenkins ,簡單查一下文件,你就應該不會被 agent,stages,step 這類關鍵詞弄懵,也能很快構建出 pipeline 的骨架 但是當向骨架中填充內容的時候,尤其如何利

002::每天五分鐘入門TCP/IP協議棧::IP協議IP首部長度問題

IP 首部 首部長度 事出反常必有妖,邪乎到家必有鬼。 整個TCP/IP協議中,IP協議是最核心的協議。 IP協議是不可靠的、無連接的服務。 何為不可靠?不能保證IP數據報能夠成功到達目的地,傳輸的可靠×××給傳輸層或應用層去實現。 何為無連接?IP並不維護任何關於後續數據報的狀態信息。 進入正題

003::每天五分鐘入門TCP/IP協議棧::IP協議之TOS字段說明

IP首部 ToS服務類型 從IP首部看ToS的位置:ToS即為服務類型,只有當網絡設備能夠支持(能夠識別IP首部中的ToS字段)識別ToS字段時,這給字段設置才有意義。否則都是空談。 先說具體字段的意義:Tos字段長度為8bit前3bit字段:為優選權子字段,現在已經廢棄,這個字段默認值是000,從w

004::每天五分鐘入門TCP/IP協議棧::IP協議之16位總長度字段引出的MTU值問題

IP首部 MTU 數據封裝 要理解MTU以及實際生產環境中的MTU問題,就得搞清楚三個問題:IP數據報包含什麽內容;數據進入協議棧的封裝過程;MTU具體代表含義; 首先要理解一個過程:數據進入協議棧的封裝過程!數據從發送主機發送出去之前,在主機的協議棧中會經歷上述圖中的幾個封裝過程。本次以TCP

TCP/IP協議--10 TCP 連線的建立與終止

TCP連線的建立可以簡單的稱為三次握手,而連線的中止則可以叫做四次握手。 TCP是一個面向連線的協議,所以在連線雙方傳送資料之前,都需要首先建立一條連線。這和前面講到的協議完全不同。前面講的所有協議都只是傳送資料而已,大多數都不關心傳送的資料是不是送到,UDP尤其明顯,從程式設計的角度來說,UD

zookeeper-非常重要的zab協議-《每日五分鐘大資料》

上篇文章paxos與一致性說到zab是在paxos的基礎上做了重要的改造,解決了一系列的問題,這一篇我們就來說下這個zab。 zab協議的全稱是ZooKeeper Atomic Broadcast即zookeeper“原子”“廣播”協議。它規定了兩種模式:崩潰恢復和訊息廣播 恢復模式 什麼時候進入? 當整

zookeeper核心-zab協議-《每日五分鐘大資料》

上篇文章《paxos與一致性》說到zab是在paxos的基礎上做了重要的改造,解決了一系列的問題,這一篇我們就來說下這個zab。 zab協議的全稱是ZooKeeper Atomic Broadcast即zookeeper“原子”“廣播”協議。它規定了兩種模式:崩潰恢復和訊息廣播 恢復模式 什麼時候進入?

TCP/IP詳解 (10) 動態選路協議

10 動態選路協議 10.1 引言在前面各章中,我們討論了靜態選路。在配置介面時,以預設方式生成路由表項(對於直接連線的介面),並通過route命令增加表項(通常從系統自載入程式檔案),或是通過ICMP改變路由生成表項(通常是在預設方式出錯的情況下)。在網路很小時,與其它網路