七層協議和TCP/IP協議簇
OSI七層協議和Tcp/ip四層協議
應用層:應用程序間通信規則
- DNS:建立ip地址和域名之間關係
- Telnet:遠程管理協議,是不安全的,與此相對SSH是安全的
- FTP:傳文件的協議
- HTTP:超文本傳輸協議
傳輸層(TCPIP中的TCP):端到端的數據傳輸服務
- TCP:面向連接的,可靠的數據傳輸服務
- UDP:無連接的數據傳輸服務,不保證傳輸可靠性
網絡層(TCPIP中的IP):點到點的數據傳輸
數據鏈路層:數據幀
- 以太網協議
物理層
TCP三次握手和四次揮手
三次握手:
- 客戶端–發送帶有 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次?
爲什麼客戶端發出第四次揮手的確認報文後要等2MSL的時間才能釋放TCP連接?
這裏同樣是要考慮丟包的問題,如果第四次揮手的報文丟失,服務端沒收到確認ack報文就會重發第三次揮手的報文,這樣報文一去一回最長時間就是2MSL,所以需要等這麼長時間來確認服務端確實已經收到了。
TCP報文結構
TCPUDP區別
UDP不需要建立連接,雖然不可靠,但是速度快佔用資源少。適用於QQ這種即時通訊
TCP如何保證可靠傳輸
- 校驗和:檢測數據在傳輸過程中的任何變化。如果收到段的檢驗和有差錯,TCP 將丟棄這個報文段和不確認收到此報文段。
- 流量控制:TCP的接收端只允許發送端發送接收端緩衝區能接納的數據。當接收方來不及處理髮送方的數據,能提示發送方降低發送的速率,防止包丟失。TCP 使用的流量控制協議是可變大小的滑動窗口協議。 (TCP 利用滑動窗口實現流量控制)
- 擁塞控制: 當網絡擁塞時,減少數據的發送
- ARQ協議: 也是爲了實現可靠傳輸的,它的基本原理就是每發完一個分組就停止發送,等待對方確認。在收到確認後再發下一個分組。
- 超時重傳: 當 TCP 發出一個段後,它啓動一個定時器,等待目的端確認收到這個報文段。如果不能及時收到一個確認,將重發這個報文段。