<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          理論 | 三天兩夜,萬字長文,吃透TCP/IP

          共 4353字,需瀏覽 9分鐘

           ·

          2020-09-03 02:56


          這是小小的本周第二篇,在本周的第二篇里,將會用長文講解TCP和IP的理論相關(guān)知識。用于進(jìn)行詳解。

          這是小小本周的第二篇

          思維導(dǎo)圖

          思維導(dǎo)圖如下

          計算機(jī)體系網(wǎng)絡(luò)結(jié)構(gòu)分層

          概述

          這里進(jìn)行概述如下

          物理層

          物理層上傳送的單位為比特,規(guī)定了網(wǎng)絡(luò)的一些電器特定,主要負(fù)責(zé)0,1比特流與電子信號之間的轉(zhuǎn)換,如果沒有物理層,0,1 構(gòu)成的比特流將會無法在物理介質(zhì)中傳播。

          鏈路層

          數(shù)據(jù)鏈路層,又稱作為鏈路層,單純的0和1是沒有任何意義的,必須規(guī)定其解讀方式,多少個電信號算一組,每個電信號又有什么意義,這就是數(shù)據(jù)鏈路層的作用,數(shù)據(jù)鏈路層,規(guī)定主要有三個功能,分別是封裝成幀、透明傳輸、差錯控制。將會依次解釋這三個內(nèi)容。

          封裝成幀

          在一段數(shù)據(jù)的前后分別添加首部和尾部,來對幀與幀之間實現(xiàn)一個定界。定界如下

          透明傳輸

          由于不管什么數(shù)據(jù),所傳送的都應(yīng)該能在鏈路上傳送,因此透明傳輸會帶來一個問題,當(dāng)數(shù)據(jù)中的比特組合恰好一致的時候,如果采用不適當(dāng)?shù)拇胧瑢斐蓴?shù)據(jù)被切分。如下圖所示。

          這里使用字節(jié)填充法實現(xiàn)透明傳輸?shù)膯栴},發(fā)送端的數(shù)據(jù)在鏈路層中出現(xiàn)控制字符SOH或者ETO的時候,在前面添加一個轉(zhuǎn)義字符ESC,如果ESC也出現(xiàn)的話,這里就在ESC之前繼續(xù)添加一個ESC實現(xiàn)轉(zhuǎn)義,如下所示。

          差錯控制

          在數(shù)據(jù)傳輸?shù)倪^程中,如果出現(xiàn)丟失,或者幀損壞,這里就需要差錯控制來進(jìn)行檢測和糾正,這個協(xié)議將會在網(wǎng)絡(luò)層中進(jìn)行說明。

          MAC地址

          數(shù)據(jù)幀準(zhǔn)備好了,這里還有一個問題,計算機(jī)A和計算機(jī)B之間數(shù)據(jù)相互發(fā)送,但是誰傳給誰,如何區(qū)分,這里MAC地址便出現(xiàn)了。MAC地址,連人網(wǎng)絡(luò)的每一個計算機(jī)都會有網(wǎng)卡接口,每一個網(wǎng)卡都會有一個唯一的地址,這個地址稱作為MAC地址,計算機(jī)網(wǎng)絡(luò)之間相互傳送的時候,都會使用MAC地址進(jìn)行相互的傳送。

          網(wǎng)絡(luò)層

          網(wǎng)絡(luò)層的主要功能負(fù)責(zé)不同網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)數(shù)據(jù),實現(xiàn)這個功能的,為路由器。

          如果你在杭州的計算機(jī)A要給紐約的計算機(jī)B通信,這里就會使用廣播方式發(fā)送數(shù)據(jù)包,然后對比MAC地址,相同的接收,不同的丟棄,很明顯,這樣相當(dāng)?shù)牟缓湍?,所以在網(wǎng)絡(luò)層中,劃分了子網(wǎng),協(xié)議規(guī)定,假如是在同一個子網(wǎng),就會使用廣播的形式把數(shù)據(jù)發(fā)送給對方,如果不是在同一個子網(wǎng),將會發(fā)送給網(wǎng)關(guān),然后進(jìn)行轉(zhuǎn)發(fā)。

          傳輸層

          通過網(wǎng)絡(luò)層,A已經(jīng)發(fā)送到了B,在這里就有了傳輸層,傳輸層的主要作用,為互相通信的應(yīng)用進(jìn)程,提供數(shù)據(jù)傳輸服務(wù),當(dāng)計算機(jī)A與計算機(jī)B通信時,在傳輸層上,還需要指定一個端口,來給特定的應(yīng)用程序,即,傳輸層功能是建立端口到端口的通信,相比網(wǎng)絡(luò)層的功能是建立主機(jī)到主機(jī)的通信。

          在傳輸層中,主要使用TCP/UDP協(xié)議。

          TCP 傳輸控制協(xié)議,在數(shù)據(jù)傳輸?shù)臅r候,會建立會話,同時會把需要傳輸?shù)奈募M(jìn)行分段,提供可靠傳輸和流量控制,例如下載視頻,當(dāng)數(shù)據(jù)較大的時,用的是TCP協(xié)議。

          UDP 協(xié)議,一個數(shù)據(jù)包就能完成數(shù)據(jù)通信,也就是說不需要建立會話,不需要流量控制,同時也是不可靠傳輸,例如DNS域名解析,屏幕廣播,這里使用的就是UDP協(xié)議。

          應(yīng)用層

          當(dāng)數(shù)據(jù)傳輸?shù)搅藗鬏攲拥臄?shù)據(jù)之后,接下來需要解讀,因為互聯(lián)網(wǎng)開放式的,應(yīng)用層作用規(guī)定應(yīng)用的數(shù)據(jù)格式,例如TCP協(xié)議可以傳輸Email,WWW,F(xiàn)TP等,這些協(xié)議的數(shù)據(jù)格式。例如域名的DNS,萬維網(wǎng)的HTTP協(xié)議,電子郵件的SMTP協(xié)議等等。這些數(shù)據(jù)單元稱之為報文。

          TCP/IP基礎(chǔ)

          具體含義

          TCP/IP這里指的是一些協(xié)議群,具體來說,這里指的是IP或者ICMP,TCP,UDP,F(xiàn)TP等,這些協(xié)議,以及HTTP等的TCP/IP協(xié)議,等等這些協(xié)議都統(tǒng)統(tǒng)稱之為TCP/IP網(wǎng)際協(xié)議群。在互聯(lián)網(wǎng)進(jìn)行通信的時候,需要相應(yīng)的網(wǎng)絡(luò)協(xié)議,TCP/IP原本就是為互聯(lián)網(wǎng)開發(fā)定制的協(xié)議,這里互聯(lián)網(wǎng)協(xié)議就是TCP/IP,TCP/IP就是互聯(lián)網(wǎng)的一些協(xié)議。這里協(xié)議如下圖所示

          基本工作原理

          TCP/IP模型有四層,分別是應(yīng)用層,網(wǎng)際層,網(wǎng)絡(luò)接口層,這四層,每層分別具有不同的功能,TCP/IP協(xié)議協(xié)議是一組在不同層上的多個協(xié)議的組合,每層在實現(xiàn)自身的情況下直接提供服務(wù),同時也為上層提供服務(wù)其圖示如下

          進(jìn)行封裝和拆解的過程如下圖

          在這里,將會加入相關(guān)的數(shù)據(jù)報,以及相關(guān)的數(shù)據(jù)信息,達(dá)到傳送數(shù)據(jù)的目的。

          數(shù)據(jù)包

          在這里,指的是TCP/IP協(xié)議數(shù)據(jù)通信中的數(shù)據(jù)單位,即,數(shù)據(jù)包, 即,從最上層,一層層的封裝,直到網(wǎng)絡(luò)層,最后借由數(shù)據(jù)鏈路層發(fā)送的數(shù)據(jù)單元。即。數(shù)據(jù)包為一個完整的數(shù)據(jù)單元,如果超過了MTU,這個時候,會和多個幀組合在一起,然后形成一個完整的數(shù)據(jù)包。

          數(shù)據(jù)包的分層如下

          在網(wǎng)絡(luò)傳輸中,數(shù)據(jù)包由兩個部分組成,一個是協(xié)議所需要用的首部,另一部分是上一層傳過啦的數(shù)據(jù),首部的結(jié)構(gòu)由協(xié)議的具體規(guī)范進(jìn)行定義,在數(shù)據(jù)包的首部,明確標(biāo)明了協(xié)議應(yīng)該如何讀取數(shù)據(jù),即,看到首部,就能明確的直到該協(xié)議所需要的信息和所需要處理的數(shù)據(jù)。

          傳輸中和TCP和UDP

          端口

          端口,英語為port,稱之為連接端口,端口,協(xié)議端口, 位于傳輸層的通信協(xié)議通常需要指定端口號,例如在TCP/IP協(xié)議族之下的TCP與UDP協(xié)議。在應(yīng)用層中,使用主從式架構(gòu)的通信協(xié)議,在每個端口上提供多路復(fù)用服務(wù)(multiplexing service)。經(jīng)由公認(rèn)端口號(well-known port numbers),通常可以辨認(rèn)出這個連線使用的通信協(xié)議,其中具代表性的是最基礎(chǔ)的1024個公認(rèn)端口號(well-known port numbers),例如Telnet協(xié)議默認(rèn)使用23端口來連線,Secure Shell協(xié)議默認(rèn)使用22端口,HTTP協(xié)議默認(rèn)使用80端口,HTTPS協(xié)議默認(rèn)使用443端口。

          源端口號

          源端口號一般是由系統(tǒng)自己動態(tài)生成的一個從1024-65535的號碼,當(dāng)一臺計算機(jī)A通過網(wǎng)絡(luò)訪問計算機(jī)B時,如果它需要對方返回數(shù)據(jù)的話,它也會隨機(jī)創(chuàng)建一個大于1023的端口,告訴B返回數(shù)據(jù)時把數(shù)據(jù)送到自己的哪個端口,然后軟件開始偵聽這個端口,等待數(shù)據(jù)返回。而B收到數(shù)據(jù)后會讀取數(shù)據(jù)包的源端口號和目的端口號,然后記錄下來,當(dāng)軟件創(chuàng)建了要返回的數(shù)據(jù)后就把原來數(shù)據(jù)包中的原端口號作為目的端口號,而把自己的端口號作為原端口號,也就是說把收到的數(shù)據(jù)包中的原和目的反過來,然后再送回A,A再重復(fù)這個過程如此反復(fù)直到數(shù)據(jù)傳輸完成。當(dāng)數(shù)據(jù)全部傳輸完A就把源端口釋放出來,所以同一個軟件每次傳輸數(shù)據(jù)時不一定是同一個源端口號。

          UDP

          UDP全稱為用戶數(shù)據(jù)報協(xié)議,是一個簡單的面向數(shù)據(jù)報的通信協(xié)議,位于OSI模型的傳輸層,UDP為不可靠傳輸,

          具有以下幾個特點(diǎn)

          1. 面向無連接 UDP不需要和TCP一樣在數(shù)據(jù)發(fā)送前進(jìn)行三次握手進(jìn)行連接,只是數(shù)據(jù)的搬運(yùn)工,不會對數(shù)據(jù)進(jìn)行相關(guān)的處理。具體來說, 在發(fā)送端,應(yīng)用層把數(shù)據(jù)傳輸為UDP協(xié)議,UDP只會給數(shù)據(jù)增加一個UDP頭標(biāo)識標(biāo)識是UDP協(xié)議。在接收端,網(wǎng)絡(luò)層把數(shù)據(jù)傳送給傳輸層,不會做任何的拼接操作。

          功能點(diǎn)

          具有單播,多播,廣播等功能。

          面向報文

          UDP是面向報文的,既不合并,也不拆分,因此應(yīng)用程序需要選擇合適的報文,進(jìn)行發(fā)送。

          不可靠性

          UDP回發(fā)生數(shù)據(jù)的丟失,由于沒有相關(guān)的數(shù)據(jù)的確認(rèn)過程。

          傳輸效率高

          由于頭部開銷小,傳輸數(shù)據(jù)的時候報文效率相當(dāng)?shù)母摺?/p>

          TCP

          當(dāng)一臺計算機(jī)與另一臺計算機(jī)通信的時候,兩臺計算機(jī)需要通信暢通,并且可靠,這樣才能保證收發(fā)數(shù)據(jù),所以就有了一個三次握手,四次揮手,實現(xiàn)數(shù)據(jù)的連接。

          三次握手

          1. 第一次握手(SYN=1, seq=x):

          客戶端發(fā)送一個 TCP 的 SYN 標(biāo)志位置1的包,指明客戶端打算連接的服務(wù)器的端口,以及初始序號 X,保存在包頭的序列號(Sequence Number)字段里。

          發(fā)送完畢后,客戶端進(jìn)入 SYN_SEND 狀態(tài)。

          1. 第二次握手(SYN=1, ACK=1, seq=y, ACKnum=x+1):

          服務(wù)器發(fā)回確認(rèn)包(ACK)應(yīng)答。即 SYN 標(biāo)志位和 ACK 標(biāo)志位均為1。服務(wù)器端選擇自己 ISN 序列號,放到 Seq 域里,同時將確認(rèn)序號(Acknowledgement Number)設(shè)置為客戶的 ISN 加1,即X+1。發(fā)送完畢后,服務(wù)器端進(jìn)入 SYN_RCVD 狀態(tài)。

          1. 第三次握手(ACK=1,ACKnum=y+1)

          客戶端再次發(fā)送確認(rèn)包(ACK),SYN 標(biāo)志位為0,ACK 標(biāo)志位為1,并且把服務(wù)器發(fā)來 ACK 的序號字段+1,放在確定字段中發(fā)送給對方,并且在數(shù)據(jù)段放寫ISN的+1

          發(fā)送完畢后,客戶端進(jìn)入 ESTABLISHED 狀態(tài),當(dāng)服務(wù)器端接收到這個包時,也進(jìn)入 ESTABLISHED 狀態(tài),TCP 握手結(jié)束。

          四次揮手

          1. 第一次揮手(FIN=1,seq=x)

          假設(shè)客戶端想要關(guān)閉連接,客戶端發(fā)送一個 FIN 標(biāo)志位置為1的包,表示自己已經(jīng)沒有數(shù)據(jù)可以發(fā)送了,但是仍然可以接受數(shù)據(jù)。

          發(fā)送完畢后,客戶端進(jìn)入 FIN_WAIT_1 狀態(tài)。

          1. 第二次揮手(ACK=1,ACKnum=x+1)

          服務(wù)器端確認(rèn)客戶端的 FIN 包,發(fā)送一個確認(rèn)包,表明自己接受到了客戶端關(guān)閉連接的請求,但還沒有準(zhǔn)備好關(guān)閉連接。

          發(fā)送完畢后,服務(wù)器端進(jìn)入 CLOSE_WAIT 狀態(tài),客戶端接收到這個確認(rèn)包之后,進(jìn)入 FIN_WAIT_2 狀態(tài),等待服務(wù)器端關(guān)閉連接。

          1. 第三次揮手(FIN=1,seq=y)

          服務(wù)器端準(zhǔn)備好關(guān)閉連接時,向客戶端發(fā)送結(jié)束連接請求,F(xiàn)IN 置為1。

          發(fā)送完畢后,服務(wù)器端進(jìn)入 LAST_ACK 狀態(tài),等待來自客戶端的最后一個ACK。

          1. 第四次揮手(ACK=1,ACKnum=y+1)

          客戶端接收到來自服務(wù)器端的關(guān)閉請求,發(fā)送一個確認(rèn)包,并進(jìn)入 TIME_WAIT狀態(tài),等待可能出現(xiàn)的要求重傳的 ACK 包。

          服務(wù)器端接收到這個確認(rèn)包之后,關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

          客戶端等待了某個固定時間(兩個最大段生命周期,2MSL,2 Maximum Segment Lifetime)之后,沒有收到服務(wù)器端的 ACK ,認(rèn)為服務(wù)器端已經(jīng)正常關(guān)閉連接,于是自己也關(guān)閉連接,進(jìn)入 CLOSED 狀態(tài)。

          推薦閱讀


          1、力扣刷題插件

          2、你不知道的 TypeScript 泛型(萬字長文,建議收藏)

          3、TypeScript 類型系統(tǒng)

          4、immutablejs 是如何優(yōu)化我們的代碼的?

          5、typeScript 配置文件該怎么寫?

          6、前端換膚的N種方案,請收下

          7、【校招面經(jīng)分享】好未來-北京-視頻面試


          ?

          關(guān)注加加,星標(biāo)加加~

          ?

          如果覺得文章不錯,幫忙點(diǎn)個在看唄





          瀏覽 46
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  高清无码高潮 | 天天干天天操955 | 激情 小说 亚洲 图片: 伦 | 美女高潮水视频 | 岛国不卡|