文章目錄
- 1.TCP 是如何保證可靠性的?
- 2. 滑動窗口機制
- 3 超時重傳
- 4.TCP 報文格式
- 5. 什么是 TCP 協議
- 5.1 如何唯一確定一個 TCP 連接
- 6.TCP 三次握手過程
- 6.1 可以兩次握手嗎?
- 7.TCP 的四次揮手
- 7.1 為什么客戶端要等待2MSL?
- 8.linux 中查看 TCP 的連接
- 9.TCP 為什么要有最后一次 ACK 報文(美團面試)
- 10.TCP 和 UDP 的區別
1.TCP 是如何保證可靠性的?
1. 三次握手連接建立連接 , 2. 序列號與確認應答 ,3. 數據包重傳,4. 滑動窗口機制 ,5. 擁塞控制等方面來考慮 TCP 保證連接的可靠性的。
-
連接建立 TCP 通過三次SYN-ACK 確認機制保證了雙方都具有發送和接受的能力,結束的時候通過四次揮手保證雙方都結束發送。
-
面向字節流的,每次都是發送一段字節過去,包在網絡中是無序的,有的先抵達了,有的后抵達,通過序列號和應答,,保證了數據的有序性。
-
超時重傳機制:如果發送方長時間沒有收到確認報文,會觸發超時重傳機制,重傳丟失的報文。
-
滑動窗口機制 Tcp 有流量控制的機制,發送方會根據接收方的接受窗口來發送數據報文,避免接收方無法接收數據報文,導致報文丟失
-
擁塞控制:通過慢啟動 ,擁塞避免 ,快重傳和快恢復算法調整發送速率來避免網絡擁塞.
這幾個地方都可以繼續往下挖,能深挖到的東西還是很多的。
2. 滑動窗口機制
滑動窗口機制允許發送方和接收方之間實現流量控制和可靠性傳輸,發送方可以持續發送數據而不需要等待每一個數據段的確認,從而提高傳輸效率. 接受方可以根據自身的處理能力和緩沖區調整窗口大小,從而控制發送方窗口大小.
https://blog.csdn.net/qq_46631497/article/details/137253124
3 超時重傳
https://blog.csdn.net/u010429831/article/details/119389928
4.TCP 報文格式
需要重點掌握的是 序號和確認號, seq 和 ack****,在三次握手和四次揮手中作用:
對于控制位需要有了解,了解這些控制位的作用.
seq 和 ack 用來解決網絡包亂序問題和解決丟包問題。
5. 什么是 TCP 協議
tcp 是一種 1. 面向連接的 ,2. 基于字節流的,3. 可靠的傳輸協議。 一共三個點都需要說清楚了
5.1 如何唯一確定一個 TCP 連接
通過四元組可以唯一確定 TCP 的連接.源地址,源端口,目的地址 ,目的端口.
6.TCP 三次握手過程
6.1 可以兩次握手嗎?
如果第一次的 SYN 數據包在網絡中阻塞,發送方進行了重傳,重傳數據包到達接收方,接收方返回 SYN-ACK. 然后第一次 SYN 數據包到達了接收方,接收方任務又是一次連接,就向接收方發送一個 ACK.這個時候接收方進入等待,但是發送方不會接收這個報文,浪費接收端的資源連接
7.TCP 的四次揮手
7.1 為什么客戶端要等待2MSL?
主要原因是為了保證客戶端發送那個的第一個ACK報文能到到服務器,因為這個ACK報文可能丟失,并且2MSL(是任何報文在網絡上存在的最長時間),超過這個時間報文將被丟棄,這樣新的連接中不會出現舊連接的請求報文。
8.linux 中查看 TCP 的連接
netstat -ant
查看具體端口的連接
通過 netstat -ant 顯示 tcp, 通過 grep 過濾出來已經建立鏈接的,再通過 wc -l 來統計數量。
netstat -ant | grep ESTABLISHED | wc -l
9.TCP 為什么要有最后一次 ACK 報文(美團面試)
本質上是在問 tcp 的三次握手的過程,為什么不能是兩次握手的過程
假設 A 向 B 發送了一個連接報文請求,SYN=1,ACK=1,但是由于網絡的阻塞,A 一直沒有收到響應報文就快速重傳了第二個報文,B 收到第二個報文回復 A 一個 SYN =1 和 ACK=1 的報文。
等到原來的請求報文到達 B 的時候,B 以為是另一個報文,響應 A 一個報文,但是 A 并不會響應 B,B 就會一直等待 A,浪費系統的資源,如果大量這樣的連接被浪費,那么很快就會消耗系統的資源。發送最后一個 ack,可以保證雙方都有接收和發送的能力。
10.TCP 和 UDP 的區別
TCP 和 UDP 都是傳輸層的兩個協議,實現端到端傳輸的。、
連接方式、可靠性、數據順序、傳輸效率、應用場景。