1. 程式人生 > >計算機網路筆記整理

計算機網路筆記整理

網路的七層結構:

  • 應用層[Application layer](應用協議資料單元APDU): 通過應用程序間的互動來完成特定的網路應用,為作業系統或網路應用程式提供訪問網路服務的介面
    • 包含的協議: DNS協議(域名系統,對映域名和IP地址) HTTP協議 SMTP協議(支援電子郵件)
    • 應用層互動的資料單元: 報文
  • 表示層[Session layer]: 資訊的語法語義以及它們的關聯, 如加密解密、轉換翻譯、壓縮解壓縮。
  • 會話層(不同機器上的使用者之間建立以及管理會話。
  • 運輸層Transport layer: 負責兩臺主機程序之間需要的通用的資料傳輸服務
    • 包含的協議:
      • TCP協議(Transmission Control Protocol 傳輸控制協議): 面向連線的
        ,可靠的資料傳輸服務
      • UDP協議(User Datagram Protocol 使用者資料協議): 無連線的資料傳輸服務
      • TCP 和 UDP的區別:
        1. UDP是面向報文的,無連線的。TCP是面向連線的(類似打電話)。UDP在傳送資料之前不需要先建立連線,遠端主機在收到UDP報文後,不需要給出任何確認。
        2. UDP支援一對一、一對多、多對一和多對多的互動通訊。每一條TCP連線只能有兩個端點,每一條TCP連線只能是點對點的(一對一)
        3. UDP盡最大努力交付,但不保證可靠交付,也不需要維持複雜的連結狀態。 TCP提供可靠交付服務。通過TCP連結傳送的的資料可以保證無差錯,不丟失,不重複,並且按照序列送達。
        4. UDP的頭部開銷小, 只有8個位元組, TCP有20個位元組
        5. UDP沒有擁塞控制,網路出現擁堵不會使源主機發送率降低
        6. TCP面向位元組流, Stream指的是流入程序或從程序流出的位元組序列。面向位元組流表示雖然應用程式和TCP的互動是一次一個資料塊, 但TCP把應用程式交下來的資料僅看做是一連串無結構的位元組流。
        7. 應用場景不同: UDP多應用於實時應用遊戲,直播,QQ語音 TCP用於精確場景, 例如檔案傳輸、傳送和接收郵件、遠端登入等場景。
  • 網路層(Packet): 負責為分組交換網上的不同主機提供通訊服務
  • 資料鏈路層(Frame): 兩臺主機之間的資料傳輸,將位元組裝成幀和點到點的傳遞,完成實體地址定址、資料的成幀、流量控制、資料的檢錯+重發。每一幀包括資料和必要的控制資訊(同步資訊, 地址資訊, 差錯控制)。控制資訊能夠使得接收端知道一個幀從哪個位元開始到哪個位元結束。保證能夠正確提取資料,同時還能檢測到所在的幀當中是否有差錯。同時還要糾正鏈路層傳輸時出現的差錯,需要可靠性傳輸協議來糾正差錯。
  • 物理層(Bit): 通過媒介傳輸位元,確定機械及電氣規範

網路的三次握手和四次揮手

三次握手:需要確認 傳送端和接收端要分別確認 傳送端和接收端 傳送 接收正常 + 接收端 傳送 接收正常 4個確認 * 2 = 8個確認 ABCD A'B'C'D'
A: 傳送端確認本方傳送正常
B: 傳送端確認本方接收正常
C: 傳送端確認對方傳送正常
D: 傳送端確認對方接收正常

A':接收端確認本方傳送正常
B':接收端確認本方接收正常
C':接收端確認對方傳送正常
D':接收端確認對方接收正常
發包:本方傳送正常
收包 + 發回應包: 對方傳送正常 + 本方接收正常 + 本方傳送正常
誰收包誰確認
1.傳送端 -> 接收端:傳送標有SYN的資料包 -> 握手錶示: 傳送端的包接收端收到 -> 接收端確認對方傳送正常(C') + 接收端接收本方接收正常(B')
2.接收端 -> 傳送端:接收端收到了你發給我的資料包 + 傳送標有SYN/ACK的資料包 -> 握手錶示: 接送端的包傳送端收到 -> 傳送端確認本方接收正常(B) + 傳送端確認本方傳送正常(A) + 傳送端確認對方傳送正常(C) + 傳送端確認對方接收正常(D)
3.傳送端 -> 接收端:傳送標有ACK的資料包 -> 握手錶示:傳送端的包接收端收到 -> 接收端確認本方傳送正常(A') + 接收端確認對方接收正常(D')

三次握手的目的: 確認自己與對方的傳送與接收都是正常的

四次揮手: 任何一方都可以在資料傳輸結束後傳送連線釋放的通知, 待對方確認後進入半關閉狀態。當另一方也沒有資料再發送的時候,則發出連線釋放通知,對方確認後就完全關閉TCP連線。

  1. 主動關閉方 -> 被動關閉方: FIN
  2. 被動關閉方 -> 主動關閉方: ACK
  3. 主動關閉方 -> 被動關閉方: FIN
  4. 被動關閉方 -> 主動關閉方: ACK

為什麼需要三次握手?

為了防止“已失效的連線請求報文段”突然又傳送到了B。假設A向B傳送了連線請求,但這個連線請求報文沒有及時到達B,則A因為沒有收到B的確認而重新發送一個連線請求報文,B確認後連線建立,然後進行一系列資料交換後關閉的連線。但此時之前A傳送的連線請求報文突然到達了B,則B會對此傳送確認,如果採用兩次握手,那麼此時AB又建立了連線,而A並沒有資料向B傳送,白白浪費B的資源。採用三次握手則不會出現這種情況,因為B向A傳送確認時,A不會再給B傳送確認,連線不會建立。

TCP如何保證可靠傳輸

  1. 應用資料被分割為TCP所認為的何時大小的資料塊
  2. TCP給傳送的每一個包進行編號, 接收方對資料包進行排序, 把有序資料傳送給應用層
  3. 校驗和(checkSum) TCP將保持首部和資料的校驗和。 這是一個端到端的檢驗和, 檢測資料在傳輸過程中的任何變化
  4. TCP的接收端會丟棄重複的資料
  5. 流量控制: TCP連結的每一方都有固定大小的緩衝空間, 減低傳送速率可以防止包丟失
  6. 擁塞控制: 網路擁塞時,減少資料的傳送
  7. 停止等待協議: 每發完一個分組就停止傳送, 等待對方確認,在確認後再發送下一個分組。超時重傳: 當TCP發出一個段後,啟動一個定時器, 等待目的端確認收到這個報文段。如果不能及時收到確認,會重發這個報文。

IP協議

  1. 不可靠: 並不保證IP資料報文能成功到達目的地。如果發生錯誤,直接丟棄該資料報文,然後傳送ICMP訊息報給信源端,任何可靠性必須由上層提供
  2. 無連線:IP並不維護任何關於後序資料報文的狀態訊息,每個連線都是獨立的。所以IP資料報文可以不按照發送順序接收。

應用層協議與傳輸層協議


TCP對應的協議:

(1) FTP:定義了檔案傳輸協議,使用21埠。
(2) Telnet:一種用於遠端登陸的埠,使用23埠,使用者可以以自己的身份遠端連線到計算機上,可提供基於DOS模式下的通訊服務。
(3) SMTP:郵件傳送協議,用於傳送郵件。伺服器開放的是25號埠。
(4) POP3:它是和SMTP對應,POP3用於接收郵件。POP3協議所用的是110埠。
(5)HTTP:是從Web伺服器傳輸超文字到本地瀏覽器的傳送協議。

UDP對應的協議:

(1) DNS:用於域名解析服務,將域名地址轉換為IP地址。DNS用的是53號埠。
(2) SNMP:簡單網路管理協議,使用161號埠,是用來管理網路裝置的。由於網路裝置很多,無連線的服務就體現出其優勢。
(3) TFTP(Trival File Transfer Protocal),簡單檔案傳輸協議,該協議在熟知埠69上使用UDP服務。

傳輸層協議和應用層協議的區別


傳輸層協議主要用於主機的程序與程序之間的相互通訊,而網路層協議主要應用於主機與主機之間的相互通訊。

在瀏覽器輸入一個網址後執行的全部過程

  1. DNS解析IP地址。客戶端瀏覽器發起一個HTTP會話到IP地址,然後通過TCP進行封裝資料包,輸入到網路層
  2. 在客戶端的傳輸層,把HTTP會話請求分成報文段,新增源和目的埠,入伺服器使用80埠監聽客戶端請求,客戶端由系統隨機選擇一個埠(6000)與伺服器交換,伺服器把輕盈的請求返回給客戶端的6000埠,然後使用IP層的IP地址查詢目的端。
  3. 網路端的網路層不關心應用層和傳輸層的東西,主要做的是通過查詢路由表確定如何到達伺服器, 期間可能經過多個路由器。
  4. 鏈路層: 跑通過鏈路層傳送到路由器,查詢IP地址的MAC地址,然後傳送ARP請求查詢目的地址,如果得到迴應後就可以使用ARP的請求應答交換IP資料包可以傳輸,然後傳送IP資料包到達伺服器的地址

位元組號和序號

位元組號:TCP是面向位元組流的,因此TCP會對位元組資料進行編號,即每一個位元組資料都會有一個編號,這個編號就叫位元組號,編號的範圍是:0 ~ 2^32-1,需要注意的是TCP對位元組資料編號不是從0和1開始的,而是根據系統核心機制來隨機編號的。

序號:前面我們說過序號是針對資料段的,由主機發送的這6000位元組資料以資料段為單位,封裝成多個大小不同的tcp資料段報文在網路中傳輸。因為序號是基於位元組號的,所以tcp協議會給每個tcp資料段報文分配一個序號,而這個序號就是tcp資料段報文的第一個位元組的編號(位元組號)。

TCP對於資料的封裝

假如第一個位元組的編號為110
那麼第一個報文的位元組號範圍:110 ~ 1109
第二個報文的位元組號範圍:1110 ~ 2109
第三個報文的位元組號範圍:2110 ~ 3109
第四個報文的位元組號範圍:3110 ~ 4109
第五個報文的位元組號範圍:4110 - 6109

HTTP狀態碼

1XX Informational
2XX Success
3XX Redirection
4XX Client Error
5XX Server Error

擁塞控制

擁塞: 某段時間內,網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變差, 這種情況叫做擁塞。

擁塞控制是一個全域性性的過程,涉及所有的主機 + 路由器 + 降低網路傳輸效能有關的因素。而流量控制是點對點通訊量的控制,是端到端的問題。流量控制要做的就是一直髮送端傳送資料的速率。

TCP控制擁塞的方法,使用擁塞視窗(cwnd)狀態變數。
四種擁塞控制演算法:

  1. 慢開始: 以×2的速度逐漸增大cwnd取值
  2. 擁塞避免: 沒經過一個往返時間RTT就把cwnd+1
  3. 快重傳 + 快恢復(FRR fast retransmit and recovery): 快速回復丟失的資料包 沒有FRR的情況下,如果資料包丟失,TCP將會使用定時器來要求傳輸暫停。在暫停的時間段內,沒有新的資料包被髮送,有了FRR, 如果接收器接收到一個不按順序的資料段,它會立即給傳送端傳送一個重複確認,如果有收到三個重複確認,傳送端就假定確認資訊提到的包丟失了,立即重傳這些丟失的資料段。有了FRR, 就不會因為重傳時要求的暫停被耽誤。 優點: 當有單獨的資料包丟失時

網路層也可以讓路由器採用適當的分組丟棄策略(如主動佇列管理)

參考文章

搞定計算機網路