網絡相關知識(TCP部分)

七層協議和TCP/IP協議簇

OSI七層協議和Tcp/ip四層協議

 

 

 

 

應用層:應用程序間通信規則

  • DNS:建立ip地址和域名之間關係
  • Telnet:遠程管理協議,是不安全的,與此相對SSH是安全的
  • FTP:傳文件的協議
  • HTTP:超文本傳輸協議

傳輸層(TCPIP中的TCP):端到端的數據傳輸服務

  • TCP:面向連接的,可靠的數據傳輸服務
  • UDP:無連接的數據傳輸服務,不保證傳輸可靠性

網絡層(TCPIP中的IP):點到點的數據傳輸

數據鏈路層:數據幀

  • 以太網協議

物理層

 

TCP三次握手和四次揮手

 三次握手:

 

SYN:同步位
ACK:確認位
seq:序列號
ack:確認號
 
  • 客戶端–發送帶有 SYN 標誌的數據包–一次握手–服務端
  • 服務端–發送帶有 SYN/ACK 標誌的數據包–二次握手–客戶端
  • 客戶端–發送帶有帶有 ACK 標誌的數據包–三次握手–服務端

 

爲什麼需要三次握手

而三次握手最主要的目的就是雙方確認自己與對方的發送與接收是正常的。

第一次握手:Client 什麼都不能確認;Server 確認了對方發送正常,自己接收正常

第二次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:對方發送正常,自己接收正常

第三次握手:Client 確認了:自己發送、接收正常,對方發送、接收正常;Server 確認了:自己發送、接收正常,對方發送、接收正常

 

第二次握手爲什麼要傳SYN和ACK兩個

接收端傳回發送端所發送的ACK是爲了告訴客戶端,我接收到的信息確實就是你所發送的信號了,這表明從客戶端到服務端的通信是正常的。而回傳SYN則是爲了建立並確認從服務端到客戶端的通信。”

 

如果第三次握手客戶端發的確認ack報文丟失,服務端在一段時間內沒有收到確認ack報文的話就會重新進行第二次握手

 

四次揮手

 

 

 

 

 舉個例子:A 和 B 打電話,通話即將結束後,A 說“我沒啥要說的了”,B回答“我知道了”,但是 B 可能還會有要說的話,A 不能要求 B 跟着自己的節奏結束通話,於是 B 可能又巴拉巴拉說了一通,最後 B 說“我說完了”,A 回答“知道了”,這樣通話纔算結束。

  • 第一次揮手:客戶端向服務器發送一個帶FIN標誌位的報文
  • 第二次揮手:服務器向客戶端發送一個帶ACK標誌位的報文。客戶端到服務器的連接被關閉。
  • 中間可能服務器還會向客戶端傳數據
  • 第三次揮手:服務器向客戶端發一個帶FIN,ACK標誌位的報文
  • 第四次揮手:客戶端向服務器發一個帶ACK標誌位的報文
  • 客戶端發出確認報文後不是立馬釋放TCP連接,而是要經過2MSL(最長報文段壽命的2倍時長)後才釋放TCP連接。而服務端一旦收到客戶端發出的確認報文就會立馬釋放TCP連接,所以服務端結束TCP連接的時間要比客戶端早一些。

 

爲什麼TCP連接的時候是3次,關閉的時候卻是4次?

只有在客戶端和服務端都沒有數據要發送的時候才能斷開TCP。而客戶端發出FIN報文時只能保證客戶端沒有數據發了,服務端還有沒有數據發客戶端是不知道的。而服務端收到客戶端的FIN報文後只能先回復客戶端一個確認報文來告訴客戶端我服務端已經收到你的FIN報文了,但我服務端還有一些數據沒發完,等這些數據發完了服務端才能給客戶端發FIN報文(所以不能一次性將確認報文和FIN報文發給客戶端,就是這裏多出來了一次)。
 

爲什麼客戶端發出第四次揮手的確認報文後要等2MSL的時間才能釋放TCP連接?

這裏同樣是要考慮丟包的問題,如果第四次揮手的報文丟失,服務端沒收到確認ack報文就會重發第三次揮手的報文,這樣報文一去一回最長時間就是2MSL,所以需要等這麼長時間來確認服務端確實已經收到了。

 

 

TCP報文結構

 

 

 

TCPUDP區別

UDP不需要建立連接,雖然不可靠,但是速度快佔用資源少。適用於QQ這種即時通訊

 

TCP如何保證可靠傳輸

 
  • 校驗和:檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
  • 流量控制:TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。 (TCP 利用滑動窗口實現流量控制)
  • 擁塞控制: 當網絡擁塞時,減少數據的發送
  • ARQ協議: 也是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認後再發下一個分組。
  • 超時重傳: 當 TCP 發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。
 

ARQ協議

自動重傳請求。如果發送方在發送後一段時間之內沒有收到確認幀,它通常會重新發送。ARQ包括停止等待ARQ協議和連續ARQ協議。
 
停止等待ARQ:
是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認(回覆ACK)。如果過了一段時間(超時時間後),還是沒有收到 ACK 確認,說明沒有發送成功,需要重新發送,直到收到確認後再發下一個分組。
 
連續ARQ:
發送方維持一個發送窗口,凡位於發送窗口內的分組可以連續發送出去,而不需要等待對方確認。接收方一般採用累計確認,對按序到達的最後一個分組發送確認,表明到這個分組爲止的所有分組都已經正確收到了。
 
 

滑動窗口--流量控制

流量控制是爲了控制發送方發送速率,保證接收方來得及接收。 接收方發送的確認報文中的窗口字段可以用來控制發送方窗口大小,從而影響發送方的發送速率。
 
 

擁塞控制

和流量控制對比:流量控制是點到點。擁塞控制是整個網絡。
慢開始 、 擁塞避免 、快重傳 和 快恢復
 
先探測一下,由小到大增大發送窗口。
 
 
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章