1. 程式人生 > 實用技巧 >計算機網路(二)--TCP連線

計算機網路(二)--TCP連線

一.三次握手

1.三次握手

客戶端傳送一個SYN給服務端,SYN是由一個演算法計算出來的, 同時把SYN標誌位置為1 , 服務端接收之後 , 傳送ACK,ACK為客戶端傳送的SYN+1,並且傳送自己的SYN,並把SYNACK標誌位置為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 就會重傳資料,但是一重傳就會導致網路的負擔更重,於是會導致更大的延遲以及更多的丟包,這個情況就會進入惡性迴圈被不斷地放大….

擁塞控制,控制的目的就是避免「傳送方」的資料填滿整個網路。

  • 慢啟動
  • 擁塞避免
  • 擁塞發生
  • 快速恢復