TCP三次握手和四次揮手

TCP三次握手

TCP三次握手和四次揮手

有兩臺機器,A是客戶端(主動發起請求的人),B是服務器端(被動接受請求的人),客戶端A剛開始沒有人和他通訊,所以客戶端A的狀態是CLOSDE(關閉的),服務器端B剛開始的狀態也是CLOSDE,但是總有人去訪問他,所以服務器端B開啟了LISTEN(收聽)狀態。
(1)假設A機器想鏈接B機器了,他就會向B機器發送一個建立鏈接的請求,這個建立鏈接請求叫SYN=1,因為要發送一個數據包給B,這個包在A機器里的編號為X,所以seq=x,發送過去之后,A從CLOSED狀態轉換為SYN-SENT(同步已發送)狀態。
(2)A發送過去,B立馬就會回應,也會發送一個建立鏈接的請求,SYN=1(因為B和A以前也沒通訊過,要請求和A通訊),B同意了A的建立鏈接,所以ACK=1,因為B要向A發送一個數據包,這個數據包在B機器里的編號剛好是y,所以seq=y,又因為B確認收到A發送的第X個包,所以B希望收到的下一個包是第x+1個包,所以ack=x+1。發送之后B有LISTEN狀態轉換為SYN-RCED(同步已收到)狀態。
(3)B向A發送了請求,A也會立馬回應,同意了B的建立鏈接,所以ACK=1,A向B發送的是第x+1個包,所以seq=x+1,而A確認收到了B發送的第y個包,希望收到第y+1個包,所以ack=y+1。之后A,B就建立了連接,可以進行數據通訊了,AB的狀態也都轉換為ESTAB-LISHED(已建立鏈接)狀態。
即使三次握手也有安全隱患,假如A向B發送一個請求,正常來說,B立刻回應,B回應之后并不會馬上釋放資源,他要等著A回第三次回應,B在等待的過程中會在計算機的內存中記錄A發來的請求和自己的回應,假如A發來的是個惡意的請求,一直發第一次請求,而不去發第三次回應,結果造成B把資源都浪費在記錄A發送來的第一次請求和自己的回應上面,而遲遲等不來A的第三次回應,導致最終系統所有的資源耗盡,那么B機器對外就不能進行正常訪問了。

TCP四次揮手

TCP三次握手和四次揮手

客戶端和服務器端通訊完之后,雙方要結束通訊,這就要進行TCP的四次揮手。揮手請求,客戶端和服務器端都可以發出。
(1)假如客戶端A發出揮手請求(關閉連接),這個揮手請求就是FIN=1,seq=u表示A向B發送一個數據包,這個數據包在A機器里編號為u。A發送完之后就會進入FIN-WAIT1(終止等待)狀態。
(2)B接收到A發送的揮手請求之后會立刻回應,確認收到A發送來的揮手請求ACK=1,seq=v表示B向A發送一個數據包,這個數據包在B機器里的編號為v。B確認收到了A發來的第u個包,希望收到的下一個包為第u+1個包,所以ack=u+1。一旦B發送了這個回應之后就馬上進入CLOSE-WAIT(關閉等待)狀態。而A收到了B的回應之后就會進入TIN-WAIT2(終止等待)狀態。

(3)B發出回應只是說明收到了A的揮手請求并不代表同意A揮手請求,有可能B還沒傳完數據,接著B會傳送一些后續的數據包,傳送完之后,B也覺得通訊該結束了,就同意了A的揮手請求,接著B也會給A發送一個揮手請求FIN=1,并且同意了A的揮手請求ACK=1,seq=w表示B向A發送一個數據包,這個數據包在B機器里的編號為w。B確認收到了A發來的第u個包,希望收到的下一個包為第u+1個包,所以ack=u+1。B發送揮手請求之后,就會進入LAST-ACK(最后確認)狀態。

(4)A收到B發送的揮手請求之后馬上回應B,確認收到了B的揮手請求ACK=1,向B發送的數據包編號為u+1,確認收到了B發送的第w個包,希望收到下一個包為第w+1個包。A發送完之后就會進入TIME-WAIT(時間等待)狀態,要等待2MSL(最長數據的傳輸時間),之后就會進入CLOSED狀態。而B收到了A的回應之后就會進入CLOSED狀態。

有限狀態機FSM:Finite State Machine
CLOSED 沒有任何連接狀態
LISTEN 偵聽狀態,等待來自遠方TCP端口的連接請求
SYN-SENT 在發送連接請求后,等待對方確認
SYN-RECEIVED 在收到和發送一個連接請求后,等待對方確認
ESTABLISHED 代表傳輸連接建立,雙方進入數據傳送狀態
FIN-WAIT-1 主動關閉,主機已發送關閉連接請求,等待對方確認
FIN-WAIT-2 主動關閉,主機已收到對方關閉傳輸連接確認,等待對方發送關閉傳輸連接請求
TIME-WAIT 完成雙向傳輸連接關閉,等待所有分組消失
CLOSE-WAIT 被動關閉,收到對方發來的關閉連接請求,并已確認
LAST-ACK 被動關閉,等待最后一個關閉傳輸連接確認,并等待所有分組消失
CLOSING 雙方同時嘗試關閉傳輸連接,等待對方確認

原創文章,作者:fuming,如若轉載,請注明出處:http://www.www58058.com/85723

(0)
fumingfuming
上一篇 2017-08-31 15:53
下一篇 2017-08-31

相關推薦

  • 8月20日軟件包管理

    軟件包管理 本章內容 軟件運行環境 軟件包基礎 Rpm包管理 yum管理 定制yum倉庫 編譯安裝 軟件運行環境 API:Application Programming Interface     POSIX:Portable OS 程序源代碼–>預處理–>編譯–>…

    Linux干貨 2016-08-21
  • 簡述計算機網絡中的物理層

          簡要說明物理層在網絡傳輸中做了哪些工作解決的問題      物理層是計算機網絡OSI模型中最低的一層。物理層規定:為傳輸數據所需要的物理鏈路創建、維持、拆除,而提供具有機械的,電子的,功能的和規范的特性。簡單的說,物理層確保原始的數據比特流可在各種物理媒體上傳輸。使得…

    Linux干貨 2017-05-08
  • 關于shell腳本基礎第二篇

                          shell腳本編程基礎第二篇 read命令 使用read來把輸入的值非配給一個或者多個shell變量,可以提示用戶輸入一些參數等,此時我們可以使用read命令來完成此功能 re…

    系統運維 2016-08-19
  • 回溯法 -數據結構與算法

    1.回溯法算法思想: 定義:         回溯法(探索與回溯法)是一種選優搜索法,按選優條件向前搜索,以達到目標。但當探索到某一步時,發現原先選擇并不優或達不到目標,就退回一步重新選擇,這種走不通就退回再走的技術為回溯法,而滿足回溯條件的某個狀態的點稱為“回溯點”。 1、回溯法適用:有許多問題,當需要找出它的解集(…

    Linux干貨 2015-04-07
  • 管中窺豹—linux命令

    命令行選項風格: 1、原始unix風格     a、命令行選項以連字符'-'開頭,后跟單個字符表示選項,選項后面跟著取值,如:mysql -hlocalhost      b、選項不帶取值的,可以組合在一起,如:sed -n -r 可以寫成 sed -nr  …

    Linux干貨 2016-10-30
  • 腳本進階

    1、寫一腳本,用ping命令測試192.168.1.1-192.168.1.10之間的所有主機的在線狀態,在線的主機使用綠色表示,不在線的主機使用紅色表示   2、如何給網絡配置多個地址,有哪些方式   3、寫一個腳本 (1)假設某目錄(/etc/rc.d/rc3.d/)下分別有K開頭的文件和S開頭的文件若干 (2)顯示所有以K開頭的文件…

    2018-01-08
欧美性久久久久