了解三次握手四次揮手之氣那需要先先了解幾個基本知識點
1、fin=1表示此報文段的傳送方的資料已經傳送完畢,請求釋放傳輸連線。
2、確認欄位號(ack):期望接收報文段的資料的第乙個位元組的序號,ack=n表示序號n-1為止的所有資料都正確接收到。
3、確認位:只有ack=1時確認號字段才有效,ack=0時無效
連線狀態:
1、close_wait狀態下只能傳送資料,不能接收資料
2、last_ack狀態:被動斷開連線的一端在緩衝區資料傳送完成後傳送fin=1
3、tme_wait:此狀態下連線已經斷開,斷開後保留2msl後進入close(起始狀態)狀態
注:msl:報文最大存在時間,2msl為兩倍msl,1msl為2分鐘
為什麼最後一次揮手要等是2msl:
防止最後乙個ack丟失
如果不等待直接關閉的話,服務端之前傳送的訊息可能還沒有完全到達客戶端。關閉了則會導致傳送失敗
如果不等待,最後一次傳送的syn可能網路滯後,這樣服務端的fin包可能重新傳送出現錯誤了
為啥要等兩次msl == 一次為了等待ack包到達==,一次為了等待二次重新傳送第三次的fin包到達。
三次握手是指建立tcp連線,需要在客戶端和伺服器之間傳送三個包,握手的過程傳送的包裡不包含資料,三次握手完畢後,客戶端與伺服器開始傳送資料。
第一次握手:客戶端傳送乙個包,嘗試建立連線
第二次握手:伺服器接受到這個包後傳送第二個包,告訴客戶端收到連線請求,可以連線了
第三次握手:客戶端接受到伺服器傳來的包後,向伺服器傳送第三個包,至此客戶端與伺服器確認連線,接下來開始傳送資料
為什麼要多次確認呢?
因為傳輸協議式建立在網路層之上的,而底層網路存在不確定性,可能網線會出問題,可能路由出問題,沒辦法保服務傳送的資料客戶端一定能接收到,就跟我們打**一下,先要喂一下,確定訊號好好不好,對方是否能聽到我們講話。總之,握手的最終目的就是確保雙方都準備就緒。
所謂四次揮手就是種植tcp連線,但是終止前需要客服端和伺服器發四次包來確認
第一次揮手:客戶端準備關閉連線,向tcp傳送釋放報文段,報文段的fin=1。
第二次揮手:伺服器接受到釋放報文段後,傳送乙個ack給客戶端,伺服器進入close_wait狀態。
第三次揮手:伺服器進入last_ack狀態,傳送fin=1,用來關閉伺服器到客戶端的資料傳送
第四次揮手:客戶端接受到fin後客戶端進入tme_wait狀態,並傳送乙個ack給伺服器,伺服器接收到ack後進入closed狀態,至此完成四次揮手。
TCP IP三次握手四次揮手簡單介紹
三次握手 第一次握手 客戶端給服務端傳送乙個連線請求資訊,傳送syn報文,進入syn sent狀態 第二次握手 服務端收到客戶端傳送的連線請求後,給客戶端傳送乙個ack包和乙個syn包,進入syn rece狀態 第三次握手 客戶端收到服務端發給的ack包和syn包之後,向服務端傳送乙個ack包,傳送...
Tcp的三次握手,四次揮手簡單理解
客戶端 在嗎 向伺服器端傳送同步包 syn 伺服器端 在的 向客戶端傳送確認包 ack 同步包 客戶端 好的 向伺服器傳送確認包 開始搞基 1.客戶端 我要好了。額額!2.伺服器端 好的,我也馬上了!3.伺服器端 我也好了。啊!4.客戶端 好的 索然無味 步驟1 客戶端傳送釋放連線報文,發出後進入f...
三次握手 四次揮手
1.tcp連線的建立 1 首先是伺服器初始化的過程,從 closed 關閉 狀態開始通過順序呼叫 socket bind listen 和accept 原語建立 socket 套接字,進入 listen 監聽 狀態,等待客戶端的 tcp傳輸連線請求。2 客戶端最開始也是從 closed 狀態開始呼叫...