一圖學完!計算機網絡(TCP等)含面試題(上篇)

1.基本概念

1.1.OSI七層模型(一般瞭解即可)

1.應用層: 網絡服務與最終用戶的一個接口。
協議有:HTTP FTP TFTP SMTP SNMP DNS TELNET HTTPS POP3 DHCP

2.表示層: 數據的表示、安全、壓縮。(在五層模型裏面已經合併到了應用層)
格式有,JPEG、ASCll、EBCDIC、加密格式等

3.會話層: 建立、管理、終止會話。(在五層模型裏面已經合併到了應用層)
對應主機進程,指本地主機與遠程主機正在進行的會話

4.運輸層: 定義傳輸數據的協議端口號,以及流控和差錯校驗。
協議有:TCP UDP,數據包一旦離開網卡即進入網絡傳輸層

5.網絡層: 進行邏輯地址尋址,實現不同網絡之間的路徑選擇。
協議有:ICMP IGMP IP(IPV4 IPV6)

6.數據鏈路層: 建立邏輯連接、進行硬件地址尋址、差錯校驗 [3] 等功能。(由底層網絡定義協議)
將比特組合成字節進而組合成幀,用MAC地址訪問介質,錯誤發現但不能糾正。

7.物理層: 建立、維護、斷開物理連接。(由底層網絡定義協議)

七層和四層模型關係對應
七層和四層模型關係對應

1.2.TCP/IP四層模型以及對應協議(重要)

1.應用層: FTP,DNS,HTTP,WWW,NFS
2.運輸層: TCP,UDP,SPX
3.網絡層: IP,ICMP,RIP,(路由器)
4.數據鏈路層: PPP,VLAN,MAC,(網橋,交換機)

在這裏插入圖片描述
TCP/IP協議組成

2.問題分析

2.1.TCP和UDP的區別

TCP: 基於字節流,面向連接,可靠的傳輸協議。(有擁堵控制,首部開銷20字節。通過TCP傳送的數據,無差錯,不丟失,不重複,且按序到達。TCP連接爲點到點,是全雙工可靠信道。)

UDP: 基於數據報,無連接,不可靠的傳輸協議。(無擁堵控制,首部開銷8字節。UDP盡最大努力交付,不保證可靠。UDP支持一對一,一對多,多對一和多對多的交互通信,是不可靠信道。)

2.2.TCP是如何保證數據可靠傳輸的

1.數據包校驗和: 發送的數據包的二進制相加然後取反,目的是檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP將丟棄這個報文段和不確認收到此報文段。

2.確認應答+序列號: TCP給發送的每一個包進行編號,接收方對數據包進行排序,把有序數據傳送給應用層。

3.超時重傳: 當TCP發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。

4。流量控制: TCP連接的每一方都有固定大小的緩衝空間,TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP使用的流量控制協議是可變大小的滑動窗口協議。
接收方有即時窗口(滑動窗口),隨ACK報文發送。滑動窗口的大小意味着接收方還有多大的緩衝區可以用於接收數據。發送方可以通過滑動窗口的大小來確定應該發送多少字節的數據。

5.擁塞控制: 當網絡擁塞時,減少數據的發送。
發送方有擁塞窗口,發送數據前比對接收方發過來的即時窗口,取小的值。

2.3.TCP的流量控制(接收方)

接收端在接收到數據後,對其進行處理。如果發送端的發送速度太快,導致接收端的結束緩衝區很快的填充滿了。此時如果發送端依舊不斷髮送數據,那麼接下來發送的數據都會丟包,繼而導致丟包的一系列連鎖反應,比如超時重傳。而TCP根據接收端對數據的處理能力,決定發送端的發送速度,這個機制就是流量控制。

在TCP協議的報頭信息當中,有一個16位字段的窗口大小。這個窗口大小表示的內容實際上是接收端接收數據緩衝區的剩餘大小。這個數字越大,證明接收端接收緩衝區的剩餘空間越大,網絡的吞吐量越大。接收端會在確認應答發送ACK報文時,將自己的即時窗口大小填入,並跟隨ACK報文一起發送過去。而發送方根據ACK報文裏的窗口大小的值的改變進而改變自己的發送速度。如果接收到窗口大小的值爲0,那麼發送方將停止發送數據。並定期的向接收端發送窗口探測數據段,讓接收端把窗口大小告訴發送端。

在這裏插入圖片描述方便理解
原文詳細鏈接

2.4.TCP的擁塞控制(發送方)

總的來說分爲四個部分: 慢開始,擁塞避免,快重傳和快恢復。

TCP傳輸的過程中,發送端開始發送數據的時候,如果剛開始就發送大量的數據,那麼就可能造成一些問題。網絡可能在開始的時候就很擁堵,如果給網絡中在扔出大量數據,那麼這個擁堵就會加劇。擁堵的加劇就會產生大量的丟包,大量的超時重傳,嚴重影響傳輸。

所以TCP引入了慢啓動的機制,在開始發送數據時,先發送少量的數據探路。探清當前的網絡狀態如何,再決定多大的速度進行傳輸。這時候就引入一個叫做擁塞窗口的概念。發送剛開始定義擁塞窗口爲 1,每次收到ACK應答,擁塞窗口加 1。在發送數據之前,首先將擁塞窗口與接收端反饋的窗口大小比對,取較小的值作爲實際發送的窗口。

擁塞窗口的增長是指數級別的。慢啓動的機制只是說明在開始的時候發送的少,發送的慢,但是增長的速度是非常快的。爲了控制擁塞窗口的增長,不能使擁塞窗口單純的加倍,設置一個擁塞窗口的閾值,當擁塞窗口大小超過閾值時,不能再按照指數來增長,而是線性的增長。在慢啓動開始的時候,慢啓動的閾值等於窗口的最大值,一旦造成網絡擁塞,發生超時重傳時,慢啓動的閾值會爲原來的一半(這裏的原來指的是發生網絡擁塞時擁塞窗口的大小),同時擁塞窗口重置爲 1。

相關概念: cwnd(擁塞窗口),SMSS(發送方的最大報文段的數值),ssthresh(慢開始門限)

慢開始和擁塞避免演示:在這裏插入圖片描述

流程分析:
//慢開始
if (擁塞窗口 cwnd < 慢開始門限 ssthresh) cwnd = cwnd * 2//擁塞避免
if (擁塞窗口 cwnd > 慢開始門限 ssthresh) cwnd = cwnd + 1//如果發生了擁塞(對網絡中某一資源的請求超過了該資源能提供的可用部分,就叫擁塞)
if (擁塞窗口 cwnd == MAX 最大值) { ssthresh = MAX/2; cwnd = 1; }//重新開始執行慢開始算法

快重傳和快恢復:
1.快重傳:
1.1.快重傳算法首先要求接收方每收到一個失序的報文段後就立即發出重複確認。這樣可以讓發送方及早知道有報文段沒有到達接收方。
1.2.發送方只要一連收到三個重複確認就應當立即重傳對方尚未收到的報文段。
1.3.不難看出,快重傳並非取消重傳計時器,而是在某些情況下可更早地重傳丟失的報文段。

2.快恢復:
2.1.當發送端收到連續三個重複確認時,就執行“乘法減小”算法,把慢開始門限ssthresh減半。
2.2.此時由於發送方認爲網絡很可能沒有發生擁塞,因此不執行慢開始算法,即擁塞窗口cwnd現在不置一,而是設置爲cwnd減半後的數值,然後開始執行擁塞避免算法,使擁塞窗口緩慢的線性增大。

快重傳與快恢復演示:在這裏插入圖片描述
說明:當cwnd=16時(圖中點4)出現了一個新的情況,就是發送方連續收到3個對同一報文段的重複確認(3-ACK)。發送方執行快重傳和快恢復算法。 在圖中點4,發送方知道只是丟失了個別的報文段,於是不啓動慢開始,而是先進行快重傳然後執行快恢復算法。 發送方設置調整門限值ssthresh=cwnd/2=8, 同時擁塞窗口cwnd=ssthresh=8(點5),然後進行擁塞避免算法
快重傳:收到3個同樣的確認就立刻重傳,不等到超時。
快恢復:cwnd不是從1重新開始。

下篇的主要內容是:
TCP三次握手,四次揮手,SYN Flood攻擊 以及 TCP“粘包”問題。以及思維導圖
一圖學完!計算機網絡(TCP三次握手四次揮手)含面試題(下篇)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章