每個(gè)人每天都在依賴(lài)網(wǎng)絡(luò)通信,那么這些設(shè)備之間究竟是如何通信的?我在這里寫(xiě)下這篇文章,你卻能在千山萬(wàn)水之外閱讀它。今天簡(jiǎn)要談一下通信協(xié)議。 網(wǎng)絡(luò)通信協(xié)議網(wǎng)絡(luò)通信協(xié)議主要是對(duì)信息的傳輸速率、傳輸代碼、代碼結(jié)構(gòu)、傳輸控制步驟、差錯(cuò)控制等做出的規(guī)定并制訂的標(biāo)準(zhǔn)。 協(xié)議主要由以下三個(gè)部分組成:
OSI參考模型OSI不是規(guī)范,準(zhǔn)確的來(lái)說(shuō),是一個(gè)抽象的參考模型,他沒(méi)有提供任何具體的實(shí)現(xiàn)標(biāo)準(zhǔn)?,F(xiàn)有網(wǎng)絡(luò)大多數(shù)可以通過(guò)OSI模型來(lái)進(jìn)行分析,了解OSI模型有助于分析和管理網(wǎng)絡(luò)。 OSI是一個(gè)分層結(jié)構(gòu),共有七層: TCP/IP協(xié)議簇介紹TCP/IP協(xié)議簇先于OSI參考模型開(kāi)發(fā),因此層次無(wú)法完全和OSI模型對(duì)應(yīng)起來(lái)。他將不同的通信功能集成到不同的網(wǎng)絡(luò)層次,形成了一個(gè)具有四層的體系結(jié)構(gòu)。
各層的職責(zé)
重要概念面向連接與無(wú)連接: 想要通過(guò)面向連接的協(xié)議在兩臺(tái)主機(jī)之間通信,需要兩臺(tái)主機(jī)之間首先建立連接,才能通信。如何建立/斷開(kāi)連接?這就涉及到三次握手和四次揮手。后續(xù)再講。 而無(wú)連接的協(xié)議在通信前不需要建立連接,就像寄信,只需要知道目的地地址就行了(請(qǐng)注意,這只是一個(gè)比喻,發(fā)郵件并不是使用的無(wú)連接協(xié)議,因?yàn)闊o(wú)連接的協(xié)議通常是不可靠的) 可靠與不可靠 可靠的協(xié)議保證數(shù)據(jù)能傳輸?shù)侥康牡兀覂?nèi)容不會(huì)發(fā)生變化。TCP就是一種可靠的協(xié)議。 不可靠的協(xié)議不能保證將數(shù)據(jù)傳送到目的地,但是它會(huì)盡力而為,還會(huì)檢驗(yàn)送到目的地的數(shù)據(jù)是否完整。UDP就是一種不可靠的協(xié)議。 那么有人可能會(huì)說(shuō)了?既然有了可靠的協(xié)議,還需要不可靠的協(xié)議干什么?不是多此一舉嗎?非也,下面詳細(xì)說(shuō)說(shuō)TCP和UDP的優(yōu)缺點(diǎn)。 字節(jié)流與數(shù)據(jù)報(bào) 字節(jié)流協(xié)議表示可以將發(fā)送方傳輸給接收方的數(shù)據(jù)看作是字節(jié)流。先發(fā)出的數(shù)據(jù)將會(huì)被先接收到。TCP屬于字節(jié)流協(xié)議。 數(shù)據(jù)報(bào)協(xié)議是將數(shù)據(jù)一個(gè)個(gè)傳送,沒(méi)有順序。UDP就是一種數(shù)據(jù)報(bào)協(xié)議。 套接字(Socket) 網(wǎng)絡(luò)層中,IP利用協(xié)議號(hào)來(lái)指定傳輸協(xié)議,傳輸層中,TCP/UDP使用端口號(hào)來(lái)區(qū)分應(yīng)用程序。將一個(gè)IP地址和一個(gè)端口號(hào)結(jié)合,就形成了一個(gè)套接字(也稱(chēng)為插座),套接字用來(lái)標(biāo)明網(wǎng)絡(luò)中的唯一網(wǎng)絡(luò)進(jìn)程。 TCP與UDP的優(yōu)缺點(diǎn)TCP:
UDP:
那么,哪些場(chǎng)景使用TCP,哪些場(chǎng)景使用UDP? TCP:郵件,遠(yuǎn)程登錄等等。UDP:NDS,廣播,即時(shí)通訊,視頻電話等等。 TCP的三次握手和四次揮手三次握手建立連接 TCP建立連接在理論上似乎只要一次請(qǐng)求和一次響應(yīng)就可以了,但是在實(shí)際情況中,請(qǐng)求或者響應(yīng)可能會(huì)丟失,此時(shí)需要重傳來(lái)建立連接。假如只通過(guò)一次請(qǐng)求和一次響應(yīng),可能會(huì)出現(xiàn)以下問(wèn)題(圖片轉(zhuǎn)自知乎用戶(hù)@大閑人柴毛毛):
下面我還是畫(huà)一張圖來(lái)描述這個(gè)流程: 四次揮手?jǐn)嚅_(kāi)連接 分層分析和排查故障之前一次電話面試的時(shí)候,面試官問(wèn)我:假如在調(diào)用第三方服務(wù)時(shí),沒(méi)有返回?cái)?shù)據(jù),可能是什么問(wèn)題?我當(dāng)時(shí)回答說(shuō)通過(guò)返回的狀態(tài)碼來(lái)判斷,他補(bǔ)充狀態(tài)碼也沒(méi)返回。我一時(shí)語(yǔ)塞,不知道面試官想要考察什么,只好尷尬地跳過(guò)。(我比較菜) 后來(lái),才想到通過(guò)對(duì)協(xié)議簇的分層分析可以較為有效地排查故障。 一般有兩種排查方式:
為了高效解決問(wèn)題,在實(shí)際應(yīng)用中,往往會(huì)從中間層開(kāi)始檢測(cè),這似乎也有點(diǎn)像二分查找思想。 那么回到一開(kāi)始的一個(gè)問(wèn)題:
1、ping目標(biāo)遠(yuǎn)程計(jì)算機(jī) 若成功則說(shuō)明網(wǎng)絡(luò)是正常的,可以去考慮更高層的事,需要去測(cè)試服務(wù)或應(yīng)用程序。 若失敗,則繼續(xù)2. 2、ping同一子網(wǎng)的網(wǎng)關(guān),確認(rèn)正在使用的這臺(tái)主機(jī)是否連接到了本地網(wǎng)絡(luò)。 若成功,說(shuō)明本地網(wǎng)關(guān)和遠(yuǎn)程目標(biāo)計(jì)算機(jī)之間的連通有問(wèn)題,可以跟蹤測(cè)試路由。 若失敗,則繼續(xù)3. 3、ping環(huán)回地址127.0.0.1。 若成功,說(shuō)明本地網(wǎng)關(guān)和當(dāng)前計(jì)算機(jī)之間通信有問(wèn)題。 若失敗,檢查IP是否有問(wèn)題,若有問(wèn)題,再檢查本地TCP/IP協(xié)議軟件是否有問(wèn)題等等。
|
|
來(lái)自: 太極混元天尊 > 《學(xué)習(xí)資料》