網(wǎng)絡(luò)基礎(chǔ)


網(wǎng)絡(luò)設(shè)備

?交換機(jī)是一種用于連接多個(gè)網(wǎng)絡(luò)設(shè)備的設(shè)備
?路由器是一種用于連接多個(gè)網(wǎng)絡(luò)的設(shè)備,它能夠在不同的網(wǎng)絡(luò)之間轉(zhuǎn)發(fā)數(shù)據(jù)包
?光貓(Optical Network Terminal,ONT):光纖接入網(wǎng)絡(luò)中的用戶端設(shè)備,主要用于將光纖信號轉(zhuǎn)換為用戶可以使用的電信號 (光調(diào)制解調(diào)器)
?企業(yè)網(wǎng)絡(luò)設(shè)備一般多個(gè)普通交換機(jī)連接到核心交換機(jī)上,核心交換機(jī)連接到路由器上,路由連接到光貓上


千兆網(wǎng)卡

千兆網(wǎng)卡:1000M/s即1Gbps


子網(wǎng)與公網(wǎng)相關(guān)

子網(wǎng)、公網(wǎng)

?交換機(jī)下的設(shè)備:子網(wǎng);同一交換機(jī)下的設(shè)備:同一子網(wǎng)/同一網(wǎng)段設(shè)備
?直接連接交換機(jī)的路由及它直接或間接相連接的組成部分(交換機(jī)、設(shè)備等)叫局域網(wǎng)或內(nèi)網(wǎng)
?路由器外中間部分的路由器為公網(wǎng)
?不同子網(wǎng),不同網(wǎng)段不能通信,需要路由器進(jìn)行轉(zhuǎn)發(fā)


網(wǎng)絡(luò)模型

OSI七層模型

應(yīng)用層、表現(xiàn)層、會話層、傳輸層、網(wǎng)絡(luò)層、數(shù)據(jù)鏈路層、物理層

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

客戶端發(fā)送HTTP數(shù)據(jù)包給服務(wù)端:
?應(yīng)用層:負(fù)責(zé)應(yīng)用之間的協(xié)議
?傳輸層:增加TCP 頭部,包括端口號、序列號等 提供端對端的通信
?網(wǎng)絡(luò)互聯(lián)層:增加IP頭部,包含源IP地址等
?網(wǎng)絡(luò)訪問層:增加以太網(wǎng)頭部,包含mac地址等
?物理層
服務(wù)層接收后:
?應(yīng)用層:HTTP報(bào)文解析
?傳輸層:TCP報(bào)文解析
?網(wǎng)絡(luò)互聯(lián)層:IP報(bào)文解析,傳送數(shù)據(jù)包、確定路由
?網(wǎng)絡(luò)訪問層:根據(jù)mac地址判斷包是不是發(fā)給自己
?物理層:發(fā)送給其他的就執(zhí)行流程走交換機(jī)服務(wù)端再執(zhí)行流程

?好處:各層獨(dú)立;靈活性更好,例如路由器可以不需要應(yīng)用層與傳輸層;易于測試與維護(hù);促進(jìn)標(biāo)準(zhǔn)化。


TCP/IP協(xié)議

連接建立與斷開
三次握手

三次握手:
?第一次握手(SYN):客戶端向服務(wù)器發(fā)送一個(gè) SYN 數(shù)據(jù)包,表示客戶端請求建立連接;
?第二次握手(SYN-ACK):服務(wù)器接收到客戶端的 SYN 數(shù)據(jù)包后,回復(fù)一個(gè) SYN-ACK數(shù)據(jù)包;
?第三次握手(ACK):客戶端接收到服務(wù)器的 SYN-ACK 數(shù)據(jù)包后,回復(fù)一個(gè) ACK數(shù)據(jù)包。
?為什么不使用兩次握手:只是服務(wù)端單純認(rèn)為連接已經(jīng)建立,對客戶端而言沒有建立。
?為什么不使用四次握手:浪費(fèi)資源。

四次揮手

四次揮手:
?第一次揮手(FIN): 客戶端向服務(wù)器發(fā)送一個(gè)FIN(Finish)數(shù)據(jù)包,表示客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送,準(zhǔn)備斷開連接;
?第二次揮手(ACK):服務(wù)器接收到客戶端的 FIN 數(shù)據(jù)包后,回復(fù)一個(gè)ACK(Acknowledge)數(shù)據(jù)包;
?第三次揮手(FIN):服務(wù)器在沒有更多數(shù)據(jù)需要發(fā)送時(shí),向客戶端發(fā)送一個(gè)FIN數(shù)據(jù)包,表示服務(wù)器端也已經(jīng)沒有數(shù)據(jù)要發(fā)送;
?第四次揮手(ACK):客戶端接收到服務(wù)器的 FIN 數(shù)據(jù)包后,回復(fù)一個(gè) ACK 數(shù)據(jù)包
?為什么不使用三次揮手:改為三次揮手的話,第二次和第三次合為一次的話,因?yàn)镃LOSE_WAIT狀態(tài),可能資源沒釋放完之類的原因,中間有很大延遲或時(shí)差,從而導(dǎo)致多次重發(fā)。

半連接

?第一次握手:客戶端發(fā)送一個(gè)帶有SYN標(biāo)志的TCP段到服務(wù)器,請求建立連接。
?第二次握手:服務(wù)器收到客戶端的SYN段后,回復(fù)一個(gè)帶有SYN和ACK標(biāo)志的TCP段,確認(rèn)收到客戶端的連接請求。
?第三次握手:客戶端收到服務(wù)器的SYN+ACK段后,回復(fù)一個(gè)帶有ACK標(biāo)志的TCP段,確認(rèn)收到服務(wù)器的連接請求。
?在這個(gè)過程中,當(dāng)服務(wù)器收到客戶端的SYN段并發(fā)送SYN+ACK段后,連接就進(jìn)入了半連接狀態(tài)

協(xié)議特點(diǎn)

SCTP

SCTP(Stream Control Transmission Protocol,流控制傳輸協(xié)議):
?多流特性:SCTP 支持在一個(gè)連接上同時(shí)傳輸多個(gè)獨(dú)立的數(shù)據(jù)流,每個(gè)數(shù)據(jù)流都有自己的序列號和確認(rèn)機(jī)制,這樣可以提高數(shù)據(jù)傳輸?shù)男屎涂煽啃浴?br> ?多宿性:SCTP允許一個(gè)端點(diǎn)同時(shí)擁有多個(gè) IP 地址,當(dāng)一個(gè) IP 地址出現(xiàn)故障時(shí),數(shù)據(jù)可以通過其他可用的 IP 地址繼續(xù)傳輸,提高了通信的可靠性和容錯(cuò)能力。
?可靠傳輸:和TCP類似,SCTP 也提供可靠的數(shù)據(jù)傳輸服務(wù),通過序列號、確認(rèn)機(jī)制和重傳機(jī)制來保證數(shù)據(jù)的完整性和有序性。
?擁塞控制:SCTP 采用了類似TCP的擁塞控制算法,能夠根據(jù)網(wǎng)絡(luò)擁塞情況調(diào)整發(fā)送速率。

UDP

UDP(User Datagram Protocol,用戶數(shù)據(jù)報(bào)協(xié)議):
?無連接:UDP 在傳輸數(shù)據(jù)之前不需要建立連接,發(fā)送方直接將數(shù)據(jù)報(bào)發(fā)送出去,接收方也不需要發(fā)送確認(rèn)信息。就像寄信一樣,只需要把信投進(jìn)郵筒,不需要和收件人提前溝通。
?不可靠傳輸:UDP 不保證數(shù)據(jù)的可靠傳輸,它不會對數(shù)據(jù)進(jìn)行編號、確認(rèn)和重傳。如果數(shù)據(jù)在傳輸過程中丟失或損壞,UDP 不會進(jìn)行處理,需要應(yīng)用層自己來處理這些問題。
?無序性:UDP 不保證數(shù)據(jù)的有序性,數(shù)據(jù)報(bào)可能會亂序到達(dá)接收端。
?沒有流量控制和擁塞控制:UDP 不會根據(jù)接收方的處理能力和網(wǎng)絡(luò)擁塞情況來調(diào)整發(fā)送速率,發(fā)送方可以以任意速率發(fā)送數(shù)據(jù)。

TCP

TCP(Transmission Control Protocol,傳輸控制協(xié)議):
?面向連接:在進(jìn)行數(shù)據(jù)傳輸之前,需要先建立連接,傳輸完成后再斷開連接。就像打電話一樣,雙方需要先接通電話,然后開始交流,最后掛斷電話。這種方式確保了通信
雙方都做好了數(shù)據(jù)傳輸?shù)臏?zhǔn)備。
?可靠傳輸:TCP 通過一系列機(jī)制來保證數(shù)據(jù)的可靠傳輸。它會對發(fā)送的數(shù)據(jù)進(jìn)行編號,接收方收到數(shù)據(jù)后會發(fā)送確認(rèn)信息(ACK),如果發(fā)送方在一定時(shí)間內(nèi)沒有收到確認(rèn)信息,就會重新發(fā)送該數(shù)據(jù)。此外,TCP 還能檢測和糾正數(shù)據(jù)傳輸過程中可能出現(xiàn)的錯(cuò)誤。
?有序性:TCP 會按照發(fā)送數(shù)據(jù)的順序?qū)?shù)據(jù)交付給應(yīng)用層。如果數(shù)據(jù)在傳輸過程中出現(xiàn)亂序,TCP 會在接收端重新排序,確保應(yīng)用層接收到的數(shù)據(jù)是有序的。
?流量控制:TCP 采用滑動窗口機(jī)制來進(jìn)行流量控制,防止發(fā)送方發(fā)送數(shù)據(jù)的速度過快,導(dǎo)致接收方無法及時(shí)處理。接收方會告訴發(fā)送方自己的接收窗口大小,發(fā)送方根據(jù)這個(gè)窗口大小來調(diào)整發(fā)送數(shù)據(jù)的速率。
?擁塞控制:當(dāng)網(wǎng)絡(luò)出現(xiàn)擁塞時(shí),TCP 會自動調(diào)整發(fā)送數(shù)據(jù)的速率,以避免進(jìn)一步加重網(wǎng)絡(luò)擁塞。常見的擁塞控制算法有慢開始、擁塞避免、快速重傳和快速恢復(fù)等。

UDP與TCP協(xié)議使用場景

UDP協(xié)議

?用戶數(shù)據(jù)報(bào)協(xié)議(User Datagram Protocol),無連接通信協(xié)議,不保證數(shù)據(jù)完整性、有序性,無流量控制和擁塞控制。
?應(yīng)用場景:適用于視頻會議等,丟包對接收結(jié)果影響不大;UDP不能保證數(shù)據(jù)的完整性,不適用于傳輸重要數(shù)據(jù)。

TCP協(xié)議

?面向連接,提供可靠無差錯(cuò)的數(shù)據(jù)傳輸,保證數(shù)據(jù)有序性,有流量控制(滑動窗口機(jī)制)和擁塞控制(慢開始、擁塞避免、快速重傳和快速恢復(fù)等算法)。
?應(yīng)用場景:傳輸數(shù)據(jù)之前,在發(fā)送端和接收端建立邏輯連接,然后再傳輸數(shù)據(jù),適用于傳輸重要數(shù)據(jù),如文件傳輸。

序列號相關(guān)

SYN與FIN消耗序列號原因

?SYN與FIN為什么不包含數(shù)據(jù)也要消耗序列號:對端的確認(rèn)都是需要消耗序列號的,不然可能因?yàn)榫W(wǎng)絡(luò)而重發(fā)。

TCP網(wǎng)絡(luò)報(bào)文確認(rèn)號

?TCP網(wǎng)絡(luò)報(bào)文確認(rèn)號:兩個(gè)主機(jī)建立了連接,A發(fā)給B兩個(gè)TCP報(bào)文,大小分別為500,300,第一個(gè)序列號200,B主機(jī)接收后確認(rèn)號500+300+200,第二個(gè)報(bào)文的起始序列號應(yīng)該是700。

其他機(jī)制

超時(shí)重傳機(jī)制

?TCP具有超時(shí)重傳機(jī)制:間隔一段時(shí)間沒等到數(shù)據(jù)包回復(fù)重傳數(shù)據(jù)包,這個(gè)間隔叫RTO超時(shí)重傳時(shí)間。
?經(jīng)典方法(適用于RTT(往返時(shí)延遲)波動小的情況):計(jì)算平均的RTT時(shí)間,它引入了平滑往返時(shí)間SRTT,經(jīng)過平滑后的RTT值每測量一次對SRTT作一次測量。

keepalive

?keepalive:檢測長時(shí)間死連接的需求(檢測對端的連接有沒有失效),定時(shí)發(fā)送探測包來探測連接的對端是否存活,默認(rèn)需要7200s沒有數(shù)據(jù)包交互才發(fā)送keepalive檢測包,不過時(shí)間太長,因此選擇在應(yīng)用層做心跳機(jī)制。

TCP記錄標(biāo)識

?TCP記錄標(biāo)識:TCP提供了一種字節(jié)流服務(wù),收發(fā)雙方不保持記錄邊界,應(yīng)用程序提供它們自己的記錄標(biāo)識使用自己約定的規(guī)則來表示消息邊界,如Redis的通信協(xié)議(RESP protocol)使用回車加換行。

TCP流量控制

TCP發(fā)送和接收的數(shù)據(jù)放在發(fā)送緩存區(qū)與接收緩沖區(qū)。
?流量控制:控制接收緩沖區(qū)大小控制發(fā)送方發(fā)送,若接收緩沖滿了就不能繼續(xù)發(fā)送。
發(fā)送端數(shù)據(jù)包狀態(tài):
?已發(fā)送已確認(rèn);
?已發(fā)送未確認(rèn);
?未發(fā)送但接收端可以接收(接收端有空間接收);
?未發(fā)送且不可發(fā)送(接收端沒空間接收);
已發(fā)送未確認(rèn),未發(fā)送但接收端可以接收(接收端有空間接收)屬于發(fā)送端滑動窗口。

流量控制的核心思想是讓發(fā)送方根據(jù)接收方的實(shí)際接收能力來調(diào)整發(fā)送數(shù)據(jù)的速率。接收方會在自己的接收緩沖區(qū)還能容納多少數(shù)據(jù)(即剩余空間大小)這個(gè)信息告知發(fā)送方,發(fā)送方依據(jù)這個(gè)反饋來控制自己的發(fā)送速率,避免發(fā)送過多數(shù)據(jù)致使接收方緩沖區(qū)溢出。

協(xié)議確認(rèn)

確定分組應(yīng)該投遞到上層的哪一個(gè)協(xié)議

IP數(shù)據(jù)包解析后,怎么確定分組應(yīng)該投遞到上層的哪一個(gè)協(xié)議:Linux系統(tǒng)的/etc/protocols文件中定義了所有上層協(xié)議對應(yīng)的協(xié)議字段,ICMP為1,TCP為6,UDP為17

TCP報(bào)文的時(shí)間戳

?TCP報(bào)文的時(shí)間戳由類別、長度、發(fā)送方時(shí)間戳、回顯時(shí)間戳構(gòu)成。
?作用:計(jì)算往返時(shí)延遲RTT。(計(jì)算時(shí)間時(shí)計(jì)算發(fā)送和接受的時(shí)間差,如果出現(xiàn)了重傳,無法計(jì)算,通過時(shí)間戳就可以確認(rèn)時(shí)延)。
?防止序列號回繞問題:TCP序列號由32bit表示,232字節(jié)的數(shù)據(jù)傳輸后序列號就會溢出回繞,TCP窗口經(jīng)過窗口縮放可以最高到1GB即230,在高速網(wǎng)絡(luò)中,很短時(shí)間就會被重復(fù)利用。(回繞問題就是出現(xiàn)重傳時(shí),無法區(qū)分舊的傳的包與相同序列號新傳的包,會造成數(shù)據(jù)混亂)。


網(wǎng)絡(luò)攻擊與防護(hù)

SYN FLOOD

?SYN FLOOD攻擊是一種常見的拒絕服務(wù)攻擊(DoS攻擊)方式,攻擊者通過發(fā)送大量的偽造SYN請求來耗盡服務(wù)器的資源,使得服務(wù)器無法處理正常的連接請求發(fā)送偽造的SYN請求:攻擊者使用偽造的源IP地址向目標(biāo)服務(wù)器發(fā)送大量的SYN請求。
?服務(wù)器響應(yīng):服務(wù)器接收到這些SYN請求后,會為每個(gè)請求分配資源并發(fā)送SYN+ACK響應(yīng)。
?不完成第三次握手:攻擊者不發(fā)送最終的ACK響應(yīng),使得服務(wù)器保持這些半連接狀態(tài),直到超時(shí)。
?資源耗盡:由于服務(wù)器需要為每個(gè)半連接分配資源(如內(nèi)存和CPU),大量的半連接會迅速耗盡服務(wù)器的資源,導(dǎo)致服務(wù)器無法處理新的連接請求。

TCP Fast Open

TCP Fast Open優(yōu)勢:防止SYN-Flood攻擊;利用握手去除一個(gè)往返RTT(往返時(shí)延)。
首次連接(沒有TFO Cookie):
?客戶端發(fā)送 SYN 請求:客戶端向服務(wù)器發(fā)送一個(gè)普通的 SYN 包,但會在 TCP 選項(xiàng)字段中設(shè)置一個(gè) TFO 標(biāo)志,表示客戶端支持 TFO。此時(shí),客戶端不會攜帶任何數(shù)據(jù)。
?服務(wù)器生成 Fast Open Cookie:服務(wù)器接收到 SYN 包后,驗(yàn)證客戶端是否支持 TFO。如果支持,服務(wù)器會生成一個(gè) Fast Open Cookie(通常是一個(gè)加密的安全令牌),并將其放入 SYN-ACK 包中返回給客戶端。此時(shí),服務(wù)器不會處理任何數(shù)據(jù)。
?客戶端發(fā)送 ACK:客戶端收到 SYN-ACK 包后,提取 Fast Open Cookie 并存儲起來,用于后續(xù)的快速連接。此時(shí),客戶端和服務(wù)器完成三次握手,進(jìn)入正常的數(shù)據(jù)傳輸階段。

后續(xù)連接(使用TFO Cookie):
?客戶端發(fā)送 SYN 請求并攜帶數(shù)據(jù):在后續(xù)的連接中,客戶端在發(fā)送 SYN 包時(shí)會攜帶之前存儲的 Fast Open Cookie,同時(shí)也可以在 SYN 包中直接攜帶實(shí)際的數(shù)據(jù)。
?服務(wù)器驗(yàn)證 Cookie:服務(wù)器接收到 SYN 包后,首先驗(yàn)證 Fast Open Cookie 是否有效。如果 Cookie 有效,服務(wù)器可以直接開始處理客戶端發(fā)送的數(shù)據(jù),而無需等待完整的三次握手。
?服務(wù)器發(fā)送 SYN-ACK:如果 Cookie 驗(yàn)證通過,服務(wù)器會立即發(fā)送 SYN-ACK 包,表示接受客戶端的數(shù)據(jù),并進(jìn)入數(shù)據(jù)傳輸階段。
?客戶端發(fā)送 ACK:客戶端收到 SYN-ACK 包后,發(fā)送最終的 ACK 包,完成連接的建立。至此,數(shù)據(jù)已經(jīng)在連接建立的過程中被傳輸,減少了額外的往返延遲。


IP與端口相關(guān)

IP

?ip:0.0.0.0-255.255.255.255
?公網(wǎng)IP:除私網(wǎng)IP外的IP
?私網(wǎng)IP:192.168.x.x 不能直接訪問網(wǎng)絡(luò)
?路由器:公網(wǎng)IP
?計(jì)算機(jī)連接路由器,通過路由器的IP進(jìn)行訪問獲取
?ip分為內(nèi)網(wǎng)ip地址與公網(wǎng)ip地址,內(nèi)網(wǎng)ip地址又叫私網(wǎng)ip地址或者保留ip地址;只有公網(wǎng)ip才可以上網(wǎng)。

TCP端口號

?端口:尋找應(yīng)用時(shí)進(jìn)行端口映射,尋找對應(yīng)主機(jī)程序,用于標(biāo)識和區(qū)分不同的網(wǎng)絡(luò)服務(wù)和應(yīng)用。
?傳輸層端口號包括源端口(發(fā)送方的端口號)和目標(biāo)端口(接收方的端口號),端口號是兩個(gè)字節(jié)整數(shù)表示,一臺主機(jī)最大要求65536個(gè)端口號
?熟知端口號:系統(tǒng)端口號,是由 Internet 號碼分配機(jī)構(gòu)(IANA)統(tǒng)一分配和管理的,它們被預(yù)先指定給一些常見的、重要的網(wǎng)絡(luò)服務(wù)和應(yīng)用程序使用。
?10-1023
?80:HTTP 443:HTTPS 22:SSH

?已登記端口號:由 IANA 管理的,但它們不像熟知端口號那樣被固定分配給特定的服務(wù)
?1024 - 49151
?3306:mysql 5432:PostgreSQL 6379:Redis 27017:MongoDB

?臨時(shí)端口號:臨時(shí)端口號,又稱動態(tài)端口號,是在網(wǎng)絡(luò)通信過程中由操作系統(tǒng)動態(tài)分配給客戶端進(jìn)程使用的端口號。客戶端程序在發(fā)起網(wǎng)絡(luò)連接時(shí),
?操作系統(tǒng)會從臨時(shí)端口號范圍內(nèi)挑選一個(gè)未被使用的端口號分配給該客戶端進(jìn)程,用于與服務(wù)器進(jìn)行通信。
?49152-65535。


MAC地址與ARP相關(guān)

mac(物理)地址出現(xiàn)的原因

計(jì)算機(jī)間交互時(shí),利用集線器找mac地址尋找與哪個(gè)計(jì)算機(jī)交互

ARP

ARP:mac地址才能確定唯一主機(jī),ARP作用是解析ip地址為mac地址


網(wǎng)絡(luò)協(xié)議

DHCP作用:幫助終端配置分發(fā)IP
DNS作用:將域名(網(wǎng)站)解析成IP
TELNET:遠(yuǎn)程調(diào)試設(shè)備、測試TCP連通性,檢查端口是否打開,模擬發(fā)送HTTP請求
TFTP:簡單文件傳輸協(xié)議,備份下發(fā)文件
ARP:arp廣播包,發(fā)送過后每個(gè)電腦會將自己mac地址發(fā)給交換器,將IP轉(zhuǎn)為mac地址
TCP/UDP:發(fā)送數(shù)據(jù)包的方式,前者可靠,后者不可靠,可能丟包,前者發(fā)送文件,后者直播視頻等

網(wǎng)絡(luò)協(xié)議設(shè)計(jì)示例

QQ設(shè)計(jì)思考:
?登錄:采用TCP(向服務(wù)端發(fā)信息,保證在線狀態(tài))和HTTP(下載信息)。
?消息發(fā)送:采用UDP(需通過服務(wù)器轉(zhuǎn)發(fā))。
?內(nèi)網(wǎng)傳輸:采用P2P。


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

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