計算機網路(二)--TCP連線
一.三次握手
1.三次握手
客戶端傳送一個SYN給服務端,SYN是由一個演算法計算出來的, 同時把SYN
標誌位置為1 ,
服務端接收之後 , 傳送ACK,ACK為客戶端傳送的SYN+1,並且傳送自己的SYN,並把SYN
和ACK
標誌位置為1
。
跟上面的一樣,ACK也是用SYN+1表示
2.為什麼是三次握手
這個要從初始化Socket和確定序列號和視窗大小
① 避免歷史重複連線
② 同步雙方初始化序列號
③ 避免資源浪費
如果只有兩次握手,那麼當網路阻塞的時候,服務端會發送很多個SYN,就會建立很多個連線。
3.為什麼ip層會分片,而TCP還需要MSS?
因為如果出現丟包情況,ip層是沒有重傳機制的,會交給TCP進行重傳,會重新傳整個TCP報文,所以當TCP也有分片的時候,如果出現了丟包,那麼tcp只會重傳MSS單位的資料。
4.SYN攻擊是什麼
服務端的SYN佇列被塞滿,
應對方法:使用cookie
5.如果建立了連線,但是客戶端故障了
TCP有一個“保活機制”,傳送一個探測報文,該探測報文包含的資料非常少,如果連續幾個探測報文都沒有得到相應,則認為當前的TCP連線已死。
二.四次揮手
1.TIME_WAIT
客戶端傳送了FIN之後,只是表示客戶端不傳送資料了而已,但是服務端可能還有代理處理和傳送的資料,等到服務端不再發送資料的時候,才傳送FIN給客戶端
2.2MSL
報文最大生存時間
網路中可能存在來自發送方的資料包,當這些傳送方的資料包被接收方處理後又會向對方傳送響應,所以一來一回需要等待 2 倍的時間
3.為什麼需要TIME_WAIT
①防止舊連線的資料包
如果接收到FIN之後就立馬斷開的話,如果網路延遲,還有資料報文還沒到達服務端,過了一會又傳送到了,這樣子就又得重新建立連線
②保證連線正確關閉
三.TCP和UDP的區別
1.UDP和TCP的對比
TCP | UDP |
有連線 | 無連線 |
一對一 | 一對一,一對多,多對多,多對一 |
可靠傳輸 | 盡最大努力交付,不保證可靠交付資料 |
首部開銷大 | |
有擁塞控制和流量控制 |
2.超時重傳
3.滑動視窗
視窗大小就是指無需等待確認應答,而可以繼續傳送資料的最大值。
視窗的實現實際上是作業系統開闢的一個快取空間,傳送方主機在等到確認應答返回之前,必須在緩衝區中保留已傳送的資料。如果按期收到確認應答,此時資料就可以從快取區清除。
4.流量控制
TCP 提供一種機制可以讓「傳送方」根據「接收方」的實際接收能力控制傳送的資料量,這就是所謂的流量控制。
5.擁塞控制
在網路出現擁堵時,如果繼續傳送大量資料包,可能會導致資料包時延、丟失等,這時 TCP 就會重傳資料,但是一重傳就會導致網路的負擔更重,於是會導致更大的延遲以及更多的丟包,這個情況就會進入惡性迴圈被不斷地放大….
擁塞控制,控制的目的就是避免「傳送方」的資料填滿整個網路。
- 慢啟動
- 擁塞避免
- 擁塞發生
- 快速恢復