網(wǎng)絡(luò)初窺

今天跟大家分享的是,自己對網(wǎng)絡(luò)協(xié)議的理解。主要介紹網(wǎng)絡(luò)協(xié)議中的,數(shù)據(jù)鏈路層,網(wǎng)絡(luò)層,和傳輸層。

四層協(xié)議的概述

1.購物與四層協(xié)議

2.各層協(xié)議如何相互協(xié)作--封裝,分用 (組包,拆包)

數(shù)據(jù)鏈路層

1.以太網(wǎng)幀報文頭

2.arp協(xié)議,及演示

3.兩臺電腦如何mac地址進行通訊的

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

1.ip頭部 ip地址 公網(wǎng) 私網(wǎng)

2.路由表

3.nat網(wǎng)絡(luò)轉(zhuǎn)換協(xié)議

4.ip路由觀察

5.ip分片觀察

介紹傳輸層(只介紹TCP)

1.tcp報文頭

2.三次握手與socket

3.請求序列號,確認序列號,已經(jīng)超時重傳

4.socket與三層協(xié)議的關(guān)系及幾個問題


四層協(xié)議的概述

1.購物與四層協(xié)議

購物與四層協(xié)議

先通過一個故事來簡單描述一下四層協(xié)議的各自功能。

家里要買一個40米的大佛像,到了店鋪a(邯鄲),選好了樣式,店鋪a告知要從店鋪b(廣州)運貨回來。于是就有了以下運佛的故事。

我們先看兩個店鋪(傳輸層)做了些什么?

總的來說就是穩(wěn)定的端對端(廣州 ?[源]--邯鄲 [目的地])傳輸

1.店鋪a先給店鋪b打了個電話,更準確的說應(yīng)該不是打電話,而是寫信,走快遞,來回三次信件(三次握手),溝通了一下佛像運輸問題,要分塊運輸(MSS),以及店鋪a本地的倉儲大?。╳indow);

2.店鋪b通過快遞公司,把一塊佛像寄送給店鋪a,店鋪a收到后立馬給店鋪b打了個電話,告知已經(jīng)收到(數(shù)據(jù)接收確認報文);

3.一次一輛裝載佛像的汽車自燃了,店鋪b很久(超時時間)沒有收到店鋪a的回復(fù)電話,就立馬把這塊佛像又發(fā)了一遍。(丟包重發(fā))

4.最后店鋪a收到了所有的佛像塊,組裝成了40米的大佛(數(shù)據(jù)有序組裝)。

5.一次店鋪a收到了序號為5,6,9,8序號的佛塊(無序接收),最后店鋪a直接打電話回復(fù)收到9號了(不用每次都回復(fù),可以一批回復(fù)一次)

接著我們看看快遞公司(網(wǎng)絡(luò)層)做了些什么?

總的來說是不穩(wěn)定的端對端傳輸

1.快遞公司看了看快遞(不關(guān)心發(fā)的是什么),發(fā)現(xiàn)一車可以裝下,就不需要再分塊了(ip分片);

2.廣州快遞公司看了看目的地邯鄲(ip),就發(fā)送到了最近的快遞中心,比如說是福建福州快遞中心,福州中心又發(fā)送到了杭州中心,。。。到了北京中心,北京中心又發(fā)給石家莊中心,最后石家莊發(fā)給了邯鄲中心,邯鄲中心發(fā)現(xiàn)地址就在本市(ip在本局域網(wǎng)),就收下了快遞。(路由)

最后我們看看快遞員(數(shù)據(jù)鏈路層)做了些什么?

不穩(wěn)定的點對點傳輸(石家莊-邯鄲)

1.比如說石家莊快遞員收到快遞,發(fā)現(xiàn)目的地是邯鄲,然后用百度地圖定位(arp),根據(jù)導(dǎo)航送貨到了邯鄲中心。

最后出現(xiàn)了網(wǎng)上購物(應(yīng)用層,http),我們不需要再和店鋪打交道了。


2.各層協(xié)議如何相互協(xié)作--封裝,分用 (組包,拆包)

現(xiàn)在了解了各層協(xié)議的大概功能,我再看看,各個協(xié)議之間是如何協(xié)作的?


封裝過程

數(shù)據(jù)到達物理網(wǎng)絡(luò)之前,會自上到下通過協(xié)議棧,每層協(xié)議都是通過添加自己的頭部信息來實現(xiàn)本層協(xié)議的。



分用過程圖

當幀到達主機,會沿著協(xié)議棧自底向上依次傳遞,各協(xié)議層通過處理幀中本層負責的頭部數(shù)據(jù),實現(xiàn)本層功能,并將幀上傳到上層協(xié)議,直到應(yīng)用程序。由此看出,只要我們掌握了各個頭部信息,就能掌握各層的功能。


數(shù)據(jù)鏈路層

1.以太網(wǎng)幀報文


以太網(wǎng)幀報文

可以看出以太網(wǎng)幀限制了數(shù)據(jù)的大小最大為1500字節(jié),這就是為什么ip層要分片。

2.arp協(xié)議,及演示

arp協(xié)議就是通過ip地址獲取mac地址的報文。先看演示

先查看本地arp緩存表


本地arp緩存表

沒有目的IP,接著我們用tcpdump監(jiān)聽,同時ping 10.252.68.118


arp協(xié)議監(jiān)聽

紅色部分就是arp請求,和arp應(yīng)答。

最后我們再看本地arp緩存發(fā)現(xiàn)目的地址已經(jīng)緩存到arp緩存表中。


本地arp緩存表


3.兩臺電腦如何mac地址進行通訊的

mac地址通信

1.交換機如何工作的

線路上傳輸?shù)氖且蕴W(wǎng)幀(實際還有一層),以太網(wǎng)幀頭部有源和目的地。

交換機工作原理:交換機維護了一張主機mac地址和交換機接口對應(yīng)關(guān)系表。交換機在收到數(shù)據(jù)幀以后,會先記錄數(shù)據(jù)幀中的源MAC的地址和對應(yīng)的接口到表中,然后查看MAC地址表中是否有目標MAC地址的信息,如果有則將數(shù)據(jù)幀發(fā)送到對應(yīng)的接口(單播),如果沒有則將數(shù)據(jù)從非接收口發(fā)出去(廣播)

2.兩個用戶之間信息傳輸流程

用戶1想發(fā)送消息給用戶2.并且知道了用戶2的ip地址。

? ? ?1.用戶1查看arp緩存表,如果找到則直接發(fā)送,如果沒有則發(fā)送一個arp請求(廣播)。詢問ipxxx的mac地址是多少?

? ? ?2.交換機發(fā)現(xiàn)是廣播,則將數(shù)據(jù)從非接收口發(fā)出。

? ? 3.用戶2發(fā)現(xiàn)ip地址與自己相同,則將自己的mac地址發(fā)送給用戶1

? ?4.用戶1收到后將mac地址存入arp緩存表中

3.如何獲得ip

1.用戶1的DHCP客戶端(操作系統(tǒng)中的程序)先發(fā)送一個廣播,尋找DHCP服務(wù)器。交換機收到報文,得到用戶1的mac地址,與其端口綁定。交換機發(fā)現(xiàn)是廣播,將消息分別發(fā)送到f1 f2接口(f0是報文發(fā)送方,不用再發(fā)送),特定格式的報文,只有DHCP服務(wù)器會回應(yīng)。

2.DHCP服務(wù)器收到報文,從IP池中選址一個空閑IP地址,對應(yīng)的網(wǎng)絡(luò)掩碼,缺省網(wǎng)關(guān),域名服務(wù)器IP(DNS)。因為已經(jīng)知道用戶1的mac地址,就可以直接發(fā)送給用戶1了。


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

IP頭部


ip頭部

16位總長度整個IP數(shù)據(jù)報的長度,但受MTU限制最大1480個長度,(ip頭部20個字節(jié))

16位標識唯一表示一次發(fā)送的數(shù)據(jù)報,數(shù)據(jù)包分片時,所有的分片數(shù)據(jù)中的16位唯一標識都一樣

3位分片標志,第一位保留,第二位表示禁止分片,第三位表示更多分片,指這個分片后面還有分片,除了最后一個分片,其它都是1.

13位偏移,指的是數(shù)據(jù)偏移,實際偏移量是 13左移動3位,分片報文長度必須是8的倍數(shù)

8位協(xié)議 icmp 1 tcp 6 udp 17

IP地址:Ip=網(wǎng)段號+主機號

例如:10.252.71.172netmask255.255.252.0

ip地址

ip分為公有ip,私有ip,公有ip是全球唯一的,私有ip用局域網(wǎng)。

3個預(yù)留私有地址:

10.0.0.0– 10.255.255.255

172.16.0.0– 172.31.255.255

192.168.0.0– 192.168.255.255

IP路由

路由表

我們本機和路由器上都有路由表,主要功能是告訴計算機,要去目的地,下一跳怎么走。

路由選擇過程:

1.完全匹配ip,沒有匹配到走2

2.匹配相同網(wǎng)段,沒有匹配到走3

3.默認路由網(wǎng)關(guān)

使用traceroute 查看跳轉(zhuǎn)路徑

traceroute觀察跳轉(zhuǎn)路徑

traceroute 如果有**號,一般是服務(wù)器屏蔽了icmp報文,

traceroute 原理。 前面我們介紹ip頭部時介紹過ttl也就是time to live, traceroute就是根據(jù)ttl,第一次發(fā)送時ttl為1,第二次為2,依次遞推。 因為ttl每跳一次就會減1,做減法的路由器發(fā)現(xiàn)ttl為0時,就停止了轉(zhuǎn)發(fā),并向源發(fā)送主機,發(fā)送一條icmp報文,告述源主機報文失效了,這樣我們就可以獲得每個節(jié)點的路由器了。

跨網(wǎng)段通訊

了解了鏈路層,我們就可以把互聯(lián)網(wǎng)的兩個主機通訊串起來了。下面介紹一下,用戶a是如何把一條以太網(wǎng)幀通過交換機,路由器,互聯(lián)傳送給服務(wù)器的。

1.用戶a主機的ip層查看目的ip地址,從本地路由表中得出下一跳要去網(wǎng)關(guān),于是ip地址寫src:10.1.1.2 ,dst:4.4.4.4,mac地址寫:src: aa-aa-aa-aa-aa-aa dst: bb-bb-bb-bb-bb-bb.

2.路由器發(fā)現(xiàn)目的ip不是本局域網(wǎng),查路由表,下一跳到運營商路由器。ip地址寫到 src:2.2.2.2 dst:4.4.4.4 ? ? mac地址寫: src:bb-bb-bb-bb-bb-bb dst:運營商路由器mac地址。

3.多次跳轉(zhuǎn)后到了目的主機的路由器,最后到了目的主機。


如果在同一個局域網(wǎng)中,有兩個人同時訪問了同一個遠程服務(wù),由于從路由器出去時把私有ip轉(zhuǎn)換為公有ip,那么怎么區(qū)分發(fā)出請求的是哪臺電腦?

于是就用到了nat轉(zhuǎn)換

nat轉(zhuǎn)換表

從圖中看出,路由器為每個機器分配了不同的路由器端口號,來區(qū)分。


IP切片

ip切片

如圖,如果我們要發(fā)送一個data為1473字節(jié)的icmp報文,就會被ip網(wǎng)絡(luò)層切分成2和3兩部分。演示如下:

ip切片演示

傳輸層(只介紹TCP)

tcp頭部

SYN表示建立連接,

FIN表示關(guān)閉連接,

ACK表示響應(yīng),

PSH表示有 DATA數(shù)據(jù)傳輸,

RST表示連接重置。

URG緊急數(shù)據(jù)

因為有可選字節(jié),所以需要頭部報文長度

32位序號:我已經(jīng)發(fā)送多少字節(jié)數(shù)據(jù)(不包括本次)

32位確認序號:我已經(jīng)接收了多少字節(jié)數(shù)據(jù)。

MSS

MSS:Maxitum Segment Size 最大分段大小,分段的原因,為了能丟包重發(fā)(最小代價),只發(fā)丟失的,不用全發(fā)。

MTU: Maxitum Transmission Unit 最大傳輸單元

三次握手與socket函數(shù)

三次握手與socket

1.三次握手與socket函數(shù)

connect 在第二次通訊后返回,accept在第三次返回。

2.如果第三次回復(fù)丟失,如何處理?查到的理論知識,有興趣的同學(xué)可以去查證一下

? ? ?1.超時時間內(nèi)發(fā)送數(shù)據(jù),既然已經(jīng)發(fā)送數(shù)據(jù),說明ack已經(jīng)發(fā)了,可以正常鏈接

? ? ? 2.超時時間內(nèi)沒有發(fā)送數(shù)據(jù)RST

3為什么是3次?

為什么是三次,不是兩次 為了防止已過期的syn請求被服務(wù)器接收后占用服務(wù)器資源,已過期是指客戶端先發(fā)了個syn請求,服務(wù)器沒響應(yīng),然后客戶端再發(fā)一次,成功和服務(wù)器通訊,并斷開了鏈接。這時候第一次請求到了,服務(wù)器以為是新的請求,就分配了鏈接資源。同時三次也能證明雙方的發(fā)送和接收是都沒有問題的。

四次揮手發(fā)兩次fin,是因為tcp是全雙工的,雙向發(fā)送,fin只能關(guān)閉自己的發(fā)送。


失敗重傳wireshark


socket與網(wǎng)絡(luò)協(xié)議關(guān)系


socket就是一個 網(wǎng)絡(luò)編程接口

socket幫我們封裝了傳輸層,網(wǎng)絡(luò)層,數(shù)據(jù)鏈路層的實現(xiàn)

問題

?1.服務(wù)器accept接收到的套接字會不會占用主機端口號?

?2.服務(wù)器最大長連接數(shù)是多少?

?3.服務(wù)器如何實現(xiàn)幾十萬,上百萬的長連接數(shù)?(不考慮內(nèi)存,cpu)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 個人認為,Goodboy1881先生的TCP /IP 協(xié)議詳解學(xué)習博客系列博客是一部非常精彩的學(xué)習筆記,這雖然只是...
    貳零壹柒_fc10閱讀 5,195評論 0 8
  • 1.這篇文章不是本人原創(chuàng)的,只是個人為了對這部分知識做一個整理和系統(tǒng)的輸出而編輯成的,在此鄭重地向本文所引用文章的...
    SOMCENT閱讀 13,368評論 6 174
  • 一、網(wǎng)絡(luò)層提供的兩種服務(wù) 1.虛電路VC(virtual circuit) 兩個計算機進行通信時,應(yīng)先建立連接(但...
    dmmy大印閱讀 1,981評論 0 0
  • 第二章 物理層 頻分復(fù)用:頻分復(fù)用的用戶在同樣的時間占用不同的帶寬資源(頻率帶寬) 時分復(fù)用:時分復(fù)用的用戶在不同...
    PramaWells閱讀 4,026評論 1 3
  • 周末收拾完屋子,洗完衣服,已經(jīng)11點多了。那么就做碗面犒勞一下自己吧。 先煎雞蛋。我今天想吃老一點的,就把雞蛋黃戳...
    小穎lucky閱讀 565評論 2 2

友情鏈接更多精彩內(nèi)容