TCP三次握手和四次揮手以及11種狀態

TCP三次握手和四次揮手以及11種狀態

1、三次握手

置位概念:根據TCP的包頭字段,存在3個重要的標識ACK、SYN、FIN?
ACK:表示驗證字段?
SYN:位數置1,表示建立TCP連接?
FIN:位數置1,表示斷開TCP連接

三次握手過程說明:?
1、由客戶端發送建立TCP連接的請求報文,其中報文中包含seq序列號,是由發送端隨機生成的,并且將報文中的SYN字段置為1,表示需要建立TCP連接。(SYN=1,seq=x,x為隨機生成數值)
2、由服務端回復客戶端發送的TCP連接請求報文,其中包含seq序列號,是由回復端隨機生成的,并且將SYN置為1,而且會產生ACK字段,ACK字段數值是在客戶端發送過來的序列號seq的基礎上加1進行回復,以便客戶端收到信息時,知曉自己的TCP建立請求已得到驗證。(SYN=1,ACK=x+1,seq=y,y為隨機生成數值)這里的ack加1可以理解為是確認和誰建立連接。
3、客戶端收到服務端發送的TCP建立驗證請求后,會使自己的序列號加1表示,并且再次回復ACK驗證請求,在服務端發過來的seq上加1進行回復。(SYN=1,ACK=y+1,seq=x+1)

2、四次揮手

四次揮手過程說明:?
1、客戶端發送斷開TCP連接請求的報文,其中報文中包含seq序列號,是由發送端隨機生成的,并且還將報文中的FIN字段置為1,表示需要斷開TCP連接。(FIN=1,seq=x,x由客戶端隨機生成)

2、服務端會回復客戶端發送的TCP斷開請求報文,其包含seq序列號,是由回復端隨機生成的,而且會產生ACK字段,ACK字段數值是在客戶端發過來的seq序列號基礎上加1進行回復,以便客戶端收到信息時,知曉自己的TCP斷開請求已經得到驗證。(FIN=1,ACK=x+1,seq=y,y由服務端隨機生成)
3、服務端在回復完客戶端的TCP斷開請求后,不會馬上進行TCP連接的斷開,服務端會先確保斷開前,所有傳輸到A的數據是否已經傳輸完畢,一旦確認傳輸數據完畢,就會將回復報文的FIN字段置1,并且產生隨機seq序列號。(FIN=1,ACK=x+1,seq=z,z由服務端隨機生成)
4、客戶端收到服務端的TCP斷開請求后,會回復服務端的斷開請求,包含隨機生成的seq字段和ACK字段,ACK字段會在服務端的TCP斷開請求的seq基礎上加1,從而完成服務端請求的驗證回復。(FIN=1,ACK=z+1,seq=h,h為客戶端隨機生成)?
至此TCP斷開的4次揮手過程完畢

3、11種狀態

1、一開始,建立連接之前服務器和客戶端的狀態都為CLOSED;?
2、服務器創建socket后開始監聽,變為LISTEN狀態;?
3、客戶端請求建立連接,向服務器發送SYN報文,客戶端的狀態變味SYN_SENT;?
4、服務器收到客戶端的報文后向客戶端發送ACK和SYN報文,此時服務器的狀態變為SYN_RCVD;?
5、然后,客戶端收到ACK、SYN,就向服務器發送ACK,客戶端狀態變為ESTABLISHED;?
6、服務器端收到客戶端的ACK后變為ESTABLISHED。此時3次握手完成,連接建立!

由于TCP連接是全雙工的,斷開連接會比建立連接麻煩一點點。?
1、客戶端先向服務器發送FIN報文,請求斷開連接,其狀態變為FIN_WAIT1;?
2、服務器收到FIN后向客戶端發送ACK,服務器的狀態圍邊CLOSE_WAIT;?
3、客戶端收到ACK后就進入FIN_WAIT2狀態,此時連接已經斷開了一半了。如果服務器還有數據要發送給客戶端,就會繼續發送;?
4、直到發完數據,就會發送FIN報文,此時服務器進入LAST_ACK狀態;?
5、客戶端收到服務器的FIN后,馬上發送ACK給服務器,此時客戶端進入TIME_WAIT狀態;?
6、再過了2MSL長的時間后進入CLOSED狀態。服務器收到客戶端的ACK就進入CLOSED狀態。?
至此,還有一個狀態沒有出來:CLOSING狀態。?
CLOSING狀態表示:?
客戶端發送了FIN,但是沒有收到服務器的ACK,卻收到了服務器的FIN,這種情況發生在服務器發送的ACK丟包的時候,因為網絡傳輸有時會有意外。

LISTEN:等待從任何遠端TCP 和端口的連接請求。SYN_SENT:發送完一個連接請求后等待一個匹配的連接請求。SYN_RECEIVED:發送連接請求并且接收到匹配的連接請求以后等待連接請求確認。ESTABLISHED:表示一個打開的連接,接收到的數據可以被投遞給用戶。連接的數據傳輸階段的正常狀態。FIN_WAIT_1:等待遠端TCP 的連接終止請求,或者等待之前發送的連接終止請求的確認。FIN_WAIT_2:等待遠端TCP 的連接終止請求。CLOSE_WAIT:等待本地用戶的連接終止請求。CLOSING:等待遠端TCP 的連接終止請求確認。LAST_ACK:等待先前發送給遠端TCP 的連接終止請求的確認(包括它字節的連接終止請求的確認)TIME_WAIT:等待足夠的時間過去以確保遠端TCP 接收到它的連接終止請求的確認。
TIME_WAIT 兩個存在的理由:1.可靠的實現tcp全雙工連接的終止;2.允許老的重復分節在網絡中消逝。CLOSED:不在連接狀態(這是為方便描述假想的狀態,實際不存在)

以上內容轉載自?http://blog.51cto.com/jinlong/2065461

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530447.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530447.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530447.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

計算機網絡體系結構——各層的功能

OSI七層架構 物理層主要功能:實現比特流的透明傳輸。基本單位:比特。 數據鏈路層主要功能 :封裝成幀 。把幀從原MAC傳到目的MAC(相鄰節點之間幀的透明傳輸) 差錯檢測 循環冗余檢測法。只檢測有沒有比特錯誤&#xf…

HTTP報文分析

一、HTTP請求報文解剖 HTTP請求報文由3部分組成(請求行請求頭請求體): 下面我們基于socket編寫一個簡單的HTTP server import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.Inp…

SSM框架整合一(springmvc+spring+mybatis+maven+tomcat)

一,環境說明 jdk1.7.0_07(cmd命令行輸入java -version查看),點擊下載 eclipse Kepler Service Release 2 apache-maven-3.3.9(cmd命令行輸入mvn -v查看),點擊下載 apache-tomcat-7.0.52,點擊下載 mysql-5.5.28-winx64&#xff0c…

如何在windows機器上安裝apache ab

為什么要使用apache ab,apache ab的是用來干嘛的,apache ab的命令? 如果您是來找上面這些問題的答案,那么請立刻關掉當前頁面,因為這篇文章是純粹的安裝教程,避免浪費時間。 一,安裝環境 win…

apache log4j入門

學習一項新東西之前,我常常問自己: 這項技術是什么? 這項技術為我們做了什么? 為什么不用其他類似的技術? 如何使用這項技術? 于是我帶著這些問題開始學習apache log4j 一,apache log4j是…

低版本Eclipse如何快速設置黑色主題

低版本的Eclipse(例如Kepler Service Release 2),沒有自帶的黑色主題,并且在線安裝黑色主題會報錯 去網上找了一圈結果都是騙人的,這個時候別著急,只需三個簡單的步驟即可完成黑色主題配置。 下面是設置完…

tomcat-maven插件熱部署(簡潔版)

最近在學ssm框架,為了提高學習效率,想使用tomcat-maven插件熱部署,網上有很多關于這方面的文章,但是有很多坑。 自己總結了一下,簡化了多余的配置,還有運行過程中發生異常的原因。 環境:apach…

eclipse中配置jad反編譯插件

1 下載Eclipse支持jad插件的jar包 將下載得到的net.sf.jadclipse_3.3.0.jar放到eclipse》plugins目錄下 2 eclipse配置jad插件 下載jad.exe 3 設置文件關聯

SpringCloud學習之路(一)-簡單Demo

首先,我們先在C:\Windows\System32\drivers\etc路徑下的hosts最后添加兩個地址用于模擬服務端以及消費端的IP 127.0.0.1 dept-8001.com #微服務端127.0.0.1 client.com #消費端 SpringCloud的一個最基礎Demo,本地真實模擬環境(服務的創建者以及消費者),這是我們Demo截圖: 分為一…

Oracle數據庫數據泵導入導出

由于開發過程中有時候無法直接連數據庫,這時候需要將數據庫導入開發環境中,故此總結一個完整的數據庫導入導出過程。 注意expdp和impdp命令末尾都不能加分號 1 導出某個用戶的所有數據庫對象 1.1 Linux導出 su - oracle 授權用戶grant exp_full_data…

eclipse工作區打不開的解決方案

今天上班的時候發現eclipse打開總是閃退,剛開始以為是eclipse的問題,后來才發現是工作區的問題。 分享出來,希望能夠幫助遇到同樣問題的人。 1 設置詢問打開的工作區 eclipse安裝目錄\configuration\.settings\org.eclipse.ui.ide.prefs&a…

日期時間總結

今天總結一下日期時間如何處理,方便以后查看。 1 Oracle 1.1 日期格式參數及其含義說明 Oracle不區分大小寫,所以下面參數大小寫都可以 D 一周中的星期幾 DAY 天的名字,使用空格填充到9個字符 DD …

Oracle對象被鎖如何處理

1 查看被鎖住的對象 select object_name,machine,s.sid,s.SERIAL# from v$locked_object l,dba_objects o ,v$session s where l.object_id  o.object_id and l.session_ids.sid; 2 解鎖 將1中查詢出的sid和serial#,作為參數 alter system kill session 2400,…

BeycondCompare3破解綠色版下載

鏈接: https://pan.baidu.com/s/1GBtkLdqU7wTAzjvn2QfHrw 提取碼: rzcw 復制這段內容后打開百度網盤手機App,操作更方便哦

Oracle rowid和rownum的區別

rowid和rownum在本質上有區別: rowid rowid是物理結構上的,每插入一行數據,都會生成一條唯一的編號。可以說默認排序是根據rownum升序的,但是本質上還是根據rowid升序排列的。 rownum rownum可以說是偽列,并不存在&a…

Oracle/mysql聯合查詢union、union all

若無特殊說明,oracle與mysql均適用 使用場景 union、union all關鍵字用戶將兩個select查詢結果集合并成一個結果集,例如:一個舊系統使用a表,同樣的信息但是新系統使用了b表,這時候可以使用union或者union all關鍵字將…

【JAVA基礎篇】反射

一、反射的概念 是指在運行過程中,對于任意一個類,都能夠知道這個類的所有屬性和方法;對于任意一個對象,都能夠調用這個對象的所有方法和屬性。這種動態獲取信息和動態調用方法的功能稱為JAVA的反射機制。 二、反射的優缺點 2.…

在線工具

分享一下很實用的在線工具 在線HTTP接口測試 草料二維碼 站長之家

【JAVA基礎篇】面對對象的特征

面對對象的3大特征是:封裝、繼承和多態 封裝 封裝就是將客觀的事物封裝成抽象的類,這個類包含這類事物共同的特性和行為,特性對應類的成員變量,行為對應類的成員方法。 封裝就是將一批具有相同特性和行為的客觀事物封裝成抽象類…

【JAVA基礎篇】final、finally和finalize

final final表示最終的、不可被更改的,用來修飾類、成員方法和變量,通常處于兩方面的考慮來使用它:特殊的設計和效率。 final類 一個類如果確信沒有子類或者這個類的方法不允許修改,那么就把這個類定義成final類。 final類的成…