在學網路的這篇區域,面試中tcp/ip 基本都是必問乙個環節,最長見的當屬三次握手四次揮手了,絕大多數學習網路的同學可能早已熟記於心了,尤其是學習過ccna、ccnp的同學,理解更甚,但是有沒有逆向的想過,為什麼要三次握手,又為什麼要四次揮手呢?我猜可能還是有相當一部分同學看到這個問題有點愣住了,因為從來沒想過。我就來說一下哈。
tcp為什麼需要3次握手,4次斷開?
「三次握手」的目的是「為了防止已失效的連線請求報文段突然又傳送到了服務端,因而產生錯誤」。 client發出的第乙個連線請求報文段並沒有丟失,而是在某個網路結點長時間的滯留了,以致延誤到連線釋放以後的某個時間才到達server。本來這是乙個早已失效的報文段。但server收到此失效的連線請求報文段後,就誤認為是client再次發出的乙個新的連線請求。於是就向client發出確認報文段,同意建立連線。假設不採用「三次握手」,那麼只要server發出確認,新的連線就建立了。由於現在client並沒有發出建立連線的請求,因此不會理睬server的確認,也不會向server傳送資料。但server卻以為新的運輸連線已經建立,並一直等待client發來資料。這樣,server的很多資源就白白浪費掉了。採用「三次握手」的辦法可以防止上述現象發生。例如剛才那種情況,client不會向server的確認發出確認。server由於收不到確認,就知道client並沒有要求建立連線。」。主要目的防止server端一直等待,浪費資源。 (
1)tcp客戶端傳送乙個
fin,用來關閉客戶到伺服器的資料傳送。
(2) 伺服器收到這個fin,它發回乙個ack,確認序號為收到的序號加1。和syn一樣,乙個fin將占用乙個序號。
(3) 伺服器關閉客戶端的連線,傳送乙個fin給客戶端。 (
4)客戶端發回
ack報文確認,並將確認序號設定為收到序號加1。
最後一次的握手,客戶端會向伺服器回發最後的ack,但是客戶端無法知道這個ack有沒有到達伺服器,所以會等待2msl=2 * 255s。如果這個ack沒有到達服務端,服務端會發現並且會為fin這個訊息超時重傳,客戶端就會再次發乙個ack,直到服務端真正收到。如果客戶端沒有收到服務端的fin,說明服務端已經收到了最後的ack,正常的關閉連線。
為什麼4次斷開?
因為tcp有個半關閉狀態,假設a.b要釋放連線,那麼a傳送乙個釋放連線報文給b,b收到後傳送確認,這個時候a不發資料,但是b如果發資料a還是要接受,這叫半關閉。然後b還要發給a連線釋放報文,然後a發確認,所以是4次。
在tcp連線握手時為何ack是和syn一起傳送,這裡ack卻沒有和fin一起傳送呢。原因是因為tcp是全雙工模式,接收到fin時意味將沒有資料再發來,但是還是可以繼續傳送資料。
其實道理也很簡單,仔細的想想,確實是那麼回事,也就那樣吧,謎團解開後是不是覺得也沒啥,第一次看的就當學習,第二次+看的同學就當複習了吧。
網際網路的基礎
0.網際網路的組成 邊緣部分 所有連線在網際網路上的主機 主機指的是所有與網路直接相連的計算機 組成,使用者可以直接使用,用來進行主機之間的通訊和資源共享。核心部分 大量的網路與連線這些網路所使用的路由器構成,為邊緣部分提供服務。邊緣部分總結 邊緣部分主要使用核心部分所提供的服務,使得許多主機之間能...
一 網際網路思維基礎
我們每個人都身處在網際網路的行業中,那麼網際網路的核心是什麼呢?那今天我們來學習一下網際網路思維到底是什麼東西?其實網際網路的核心體現在以下幾點。1 資訊的電子化,資訊的儲存和傳輸。2 改變了資訊傳輸的效率,主要包括以下幾個方面 c 資訊的安全,比如網盤,雲盤,免費的防毒軟體。d 資訊的計算,比如大...
乙個網際網路 應用的創意
在校門口經常去的 西安小吃 吃了一碗臊子面,但遠沒有平時那麼好吃。想著以後不會去了,周邊新增的同類店鋪很多,為什麼還要一說吃麵就去他家。後來想,該告訴老闆,今天吃得不爽,這是幫助他,但沒有告訴。換廚師了,還是怎麼了?總之老闆應該要知道訊息。作為乙個小店的老闆,收集資訊的溝道,有創新空間。話說也有大平...