TCP/IP協議介紹——三次握手四次揮手

TCP/IP(Transmission Control Protocol/Internet Protocol,傳輸控制協議/網際協議)是指能夠在多個不同網絡間實現信息傳輸的協議簇。TCP/IP協議不僅僅指的是TCP?和IP兩個協議,而是指一個由FTPSMTP、TCP、UDP、IP等協議構成的協議簇, 只是因為在TCP/IP協議中TCP協議和IP協議最具代表性,所以被稱為TCP/IP協議。

TCP/IP傳輸協議,即傳輸控制/網絡協議,也叫作網絡通訊協議。它是在網絡的使用中的最基本的通信協議。TCP/IP傳輸協議對互聯網中各部分進行通信的標準和方法進行了規定。并且,TCP/IP傳輸協議是保證網絡數據信息及時、完整傳輸的兩個重要的協議。TCP/IP傳輸協議是嚴格來說是一個四層的體系結構,應用層、傳輸層、網絡層和數據鏈路層都包含其中。

TCP/IP協議在一定程度上參考了OSI的體系結構。OSI模型共有七層,從下到上分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。但是這顯然是有些復雜的,所以在TCP/IP協議中,它們被簡化為了四個層次。

(1)應用層、表示層、會話層三個層次提供的服務相差不是很大,所以在TCP/IP協議中,它們被合并為應用層一個層次。?應用層是TCP/IP協議的第一層,是直接為應用進程提供服務的。

(2)傳輸層作為TCP/IP協議的第二層,傳輸層在整個TCP/IP協議中起到了中流砥柱的作用。且在傳輸層中,TCP和UDP也同樣起到了中流砥柱的作用

(3)網絡層:在TCP/IP協議中的位于第三層。在TCP/IP協議中網絡層可以進行網絡連接的建立和終止以及IP地址的尋找等功能。

4)因為數據鏈路層和物理層的內容相差不多,所以在TCP/IP協議中它們被歸并在網絡接口層一個層次里。由于網絡接口層兼并了物理層數據鏈路層所以,網絡接口層既是傳輸數據的物理媒介,也可以為網絡層提供一條準確無誤的線路。

1 通信過程及相關協議

在網絡通信的過程中,將發出數據的主機稱為源主機,接收數據的主機稱為目的主機。當源主機發出數據時,數據在源主機中從上層向下層傳送。源主機中的應用進程先將數據交給應用層,應用層加上必要的控制信息就成了報文流,向下傳給傳輸層。傳輸層將收到的數據單元加上本層的控制信息,形成報文段、數據報,再交給網際層。網際層加上本層的控制信息,形成IP數據報,傳給網絡接口層。網絡接口層將網際層交下來的IP數據報組裝成幀,并以比特流的形式傳給網絡硬件(即物理層),數據就離開源主機。

在TCP/IP連接中,為了確保雙方都能準備好發送和接收數據,會進行一系列的控制信號交換,這其中包括了“三次握手”來建立連接和“四次揮手”來關閉連接。三次握手和四次揮手是TCP協議中建立連接和釋放連接的重要過程,它們確保了數據傳輸的可靠性和連接的正確管理。

TCP/IP協議中,主動發起請求的一端稱為『客戶端』,被動連接的一端稱為『服務端』。不管是客戶端還是服務端,TCP連接建立完后都能發送和接收數據。

剛開始的時候,服務器和客戶端都為CLOSED狀態。在通信開始前,雙方都得創建各自的傳輸控制塊(TCB)。

服務器創建完TCB后遍進入LISTEN狀態,此時準備接收客戶端發來的連接請求。

2 三次握手(Three-way Handshake)

三次握手用于建立TCP連接,確保發送方和接收方都準備好進行數據傳輸。以下是三次握手的步驟:

第一次握手

客戶端向服務端發送連接請求報文段。該報文段的頭部中同步SYN=1,確認ACK=0,同時選擇一個初始序號seq=x。請求發送后,客戶端便進入SYN-SENT狀態,等待服務器確認

SYN=1,ACK=0表示該報文段為連接請求報文

x為本次TCP通信的字節流的初始序號

SYN=1的報文段不能有數據部分,但要消耗掉一個序號

第二次握手

服務器收到連接請求SYN報文之后,必須確認客戶的SYN(SYN=1,ACK=1,ack=x+1,seq=y),同時自己也發送一個SYN包(SYN=1,seq=y),即SYN+ACK包,此時服務器進入SYN_RECV狀態。

SYN=1,ACK=1表示該報文段為連接同意的應答報文

seq=y表示服務端作為發送者時,發送字節流中的第一個字節序號

ack=x+1表示服務端希望客戶端發送的下一個數據報初始序號是從x+1開始

第三次握手

客戶端收到服務器連接統一應答SYN+ACK包,向服務器發送確認包(ACK=1,ack=y+1,seq=x+1,acknum=y+1),此包發送完畢,表示服務端發來的連接同意應答已經成功收到。客戶端和服務器進入ESTABLISHED(代表成功打開一個TCP/IP連接,數據可以傳送給用戶)狀態,完成三次握手。

完成三次握手,客戶端與服務器開始傳送數據。

3 四次揮手(Four-way Handshake)

TCP連接的釋放一共需要四步,這也是四次揮手的由來。

TCP連接是雙向的,在四次揮手中,前兩次揮手用于斷開一個方向的連接,后兩次揮手用于斷開另一方向的連接。確保發送方和接收方都關閉了數據傳輸的通道。以下是四次揮手的步驟:

第一次揮手

客戶端數據發送完成,則它向服務端發送連接釋放請求。該請求只有報文頭,頭中攜帶的主要參數為:FIN=1,seq=u,用來關閉客戶端到服務器的數據傳送。此時,客戶端將進入FIN-WAIT-1狀態。FIN報文段即使不攜帶數據,也要消耗一個序號。

FIN=1表示該報文段是一個連接釋放請求

seq=u,u-1是客戶端向服務端發送的最后一個字節的序號

第二次揮手

服務器收到客戶端連接釋放報文FIN后,發送一個ACK給客戶端,報文頭ACK=1ack=u+1確認序號為收到序號+1,并且帶上自己的序列號seq=v。服務器進入CLOSE_WAIT狀態。此時TCP連接處于半關閉狀態,即客戶端已經沒有要發送的數據了,但服務器若發送數據,客戶端仍要接受。這個狀態還要持續一段時間,也就是整個CLOSE_WAIT狀態持續的時間。

ACK=1:除TCP連接請求報文段以外,TCP通信過程中所有數據報的ACK都為1,表示應答

seq=v,v是服務端釋放應答報文段第一個字節序號

ack=u+1表示希望收到從第u+1個字節開始的報文段,并且已經成功接收了前u個字節

客戶端收到該應答后,進入FIN-WAIT-2狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。

第二次揮手完成后,客戶端到服務端方向的連接已經釋放,服務端不會再接收客戶端的數據,客戶端也沒有數據要發送了。但服務端到客戶端方向的連接仍然存在,服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。

第三次揮手

服務端將最后的數據發送完畢后,就向客戶端發送連接釋放報文FIN,用來關閉服務器到客戶端的數據傳送,其報文頭包含:FIN=1,ack=u+1,由于在CLOS-WAIT狀態,服務端很可能又發送了一些數據,假定此時的序列號為seq=w,此時,服務器進入LAST_ACK狀態,等待客戶端的確認

第四次揮手

客戶端收到服務器的連接釋放報文FIN后,向服務端發出確認應答,報文頭:ACK=1,ack=w+1,而自己的序列號是seq=u+1,客戶端進入TIME_WAIT狀態,接著發送一個ACK給服務器,確認后,服務器進入CLOSED狀態,客戶端等待一段時間后也進入了CLOSED狀態。

注意,客戶端最后還要等待一段時間,這就是TIME_WAIT狀態。客戶端等待一段時間是為了確保服務器收到了ACK,如果此時服務器沒有收到ACK則可以重傳。這個等待時間通常是2MSL(最長報文段壽命)的時間。當客戶端撤銷相應的TCB后,就進入了CLOSED狀態。服務器只要收到了客戶端發來的ACK報文,就撤銷TCB,進入CLOSED狀態。

4 總結

三次握手:通過三次報文段的交換,客戶端和服務器建立了可靠的連接,并相互確認了初始序列號。

四次揮手:在數據傳輸結束后,通過四次報文段的交換,客戶端和服務器正確地釋放了連接,并確保了雙方都已收到對方的確認信息。

序列號:在TCP通信中,序列號用于標識每個報文段,確保數據的順序性和完整性。

ACK和SYN標志位:ACK標志位用于確認收到的報文段,SYN標志位用于建立連接時的同步。

TIME_WAIT狀態:客戶端在關閉連接后會進入TIME_WAIT狀態,等待一段時間以確保服務器收到了ACK報文段,從而避免“已失效的連接請求”問題。

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

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

相關文章

CSS學習|css三種導入方式、基本選擇器、層次選擇器、結構偽類選擇器、屬性選擇器、字體樣式、文本樣式

第一個css程序 css程序都是在style標簽中書寫 打開該網頁,可以看到h1標簽中的我是標題被渲染成了紅色 可以在同級目錄下創建一個css目錄,專門存放css文件,可以和html分開編寫 然后在html頁面中,利用link標簽以及css文件地址&…

大模型基架:Transformer如何做優化?

大模型的基礎模式是transformer,所以很多芯片都實現先專門的transformer引擎來加速模型訓練或者推理。本文將拆解Transformer的算子組成,展開具體的數據流分析,結合不同的芯片架構實現,分析如何做性能優化。 Transformer結構 tr…

go的反射和斷言

在go中對于一個變量,主要包含兩個信息變量類型(type)和變量值(value) 可以通過reflect包在運行的時候動態獲取變量信息,并能夠進行操作 對于Type可以通過reflect.TypeOf()獲取到變量的類型信息 reflect.Ty…

13_前端工程化_ES6

1.前端工程化概念 前端工程化是使用軟件工程的方法來單獨解決前端的開發流程中模塊化、組件化、規范化、自動化的問題,其主要目的為了提高效率和降低成本。 前后端分離(前端代碼工程化獨立出來形成一個單獨的app) 1.開發分離 2.部署分離 3.服務器分離…

信號(上)

本節目標: 1. 掌握Linux信號的基本概念 2. 掌握信號產生的一般方式 3. 理解信號遞達和阻塞的概念,原理。 4. 掌握信號捕捉的一般方式。 5. 重新了解可重入函數的概念。 6. 了解競態條件的情景和處理方式 7. 了解SIGCHLD信號, 重新編寫信號處理…

ChatGPT基本原理詳細解說

ChatGPT基本原理詳細解說 引言 在人工智能領域,自然語言處理(NLP)一直是研究的熱點之一。隨著技術的發展,我們見證了從簡單的聊天機器人到復雜的語言模型的演變。其中,ChatGPT作為一項突破性技術,以其強大…

【Vue】自定義指令-v-loading指令的封裝

場景 實際開發過程中,發送請求需要時間,在請求的數據未回來時,頁面會處于空白狀態 > 用戶體驗不好 需求 封裝一個 v-loading 指令,實現加載中的效果 分析 本質 loading效果就是一個蒙層,蓋在了盒子上 數據請求…

從零開始精通Onvif之設備發現

設備發現的意義 在復雜的網絡環境中,如何快速而準確地識別網絡上的Onvif設備,對于攝像頭廠商、系統集成商、開發人員乃至最終用戶來說,都顯得至關重要。 首先,設備發現有效簡化了集成的復雜度。在沒有統一標準之前,每個…

2004NOIP普及組真題 2. 花生采摘

線上OJ: 【04NOIP普及組】花生采摘 核心思想: 1、本題為貪心即可。 2、因為本題嚴格限制了順序,所以先把每個節點的花生數量按降序排序。然后逐一判斷下一個花生是否需要去采摘即可 3、每一次采摘完,記錄耗時 t 以及采集的花…

力扣第417題測試程序

題目描述: 有一個 m n 的矩形島嶼,與 太平洋 和 大西洋 相鄰。 “太平洋” 處于大陸的左邊界和上邊界,而 “大西洋” 處于大陸的右邊界和下邊界。 這個島被分割成一個由若干方形單元格組成的網格。給定一個 m x n 的整數矩陣 heights &#…

基于web的垃圾分類回收系統的設計

管理員賬戶功能包括:系統首頁,個人中心,管理員管理,用戶管理,公告管理,運輸管理,基礎數據管理 用戶賬戶功能包括:系統首頁,個人中心,運輸管理,公告…

pyqt QlineEdit內部增加按鈕方法

pyqt QlineEdit內部增加按鈕方法 def addButton(self,lineEdit):btn QtWidgets.QPushButton("")icon1 QtGui.QIcon()icon1.addPixmap(QtGui.QPixmap(":/image/images/th.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)btn.setIcon(icon1)btn.setStyleShe…

全光譜led燈的危害有哪些?曝光低質量全光譜led燈產生的四大風險

眼睛是人類獲取信息最重要的感官器官之一,而近視則會導致視力模糊,進而影響學習效果和生活品質。因此,如何保護眼睛,尤其是在學習和使用電子設備時,成為了一個迫切需要解決的問題。然而在護眼領域上,護眼臺…

【DevOps】網絡安全進階之路:打造更安全、更可靠的網站

目錄 一、網站面臨的主要安全威脅 1、SQL注入攻擊 2、跨站腳本攻擊(XSS) 3、跨站請求偽造(CSRF) 4、文件上傳漏洞 5、不安全的直接對象引用 6、安全配置錯誤 7、使用含有已知漏洞的組件 二、網站安全防護措施 1、輸入驗證與過濾 2、使用參數化查詢 3、數據輸出編碼…

SCAU 數據結構 實驗六 排序算法

![[Pasted image 20240 8638 直接插入排序 Description 用函數實現直接插入排序,并輸出每趟排序的結果. 輸入格式 第一行:鍵盤輸入待排序關鍵的個數n 第二行:輸入n個待排序關鍵字,用空格分隔數據 輸出格式 每行輸出一趟排序…

掌握Java設計模式的23種武器(全):深入解析與實戰示例

目錄 一、創建型模式 1. 單例模式 (Singleton Pattern) 2. 工廠模式 (Factory Pattern) 3. 抽象工廠模式 (Abstract Factory Pattern) 4. 建造者模式 (Builder Pattern) 5. 原型模式 (Prototype Pattern) 二、結構型模式 6. 適配器模式 (Adapter Pattern) 7. 橋接模式…

通信的本質是什么

通信的本質是信息的傳遞和交換。在通信過程中,信息從一個主體(發送方)傳遞到另一個主體(接收方),目的是使接收方理解或使用發送方傳遞的信息。無論使用什么樣的媒介或技術,通信的核心都是在不同…

十三、resultMap解析

分為兩部分:解析和使用 解析 1.解析XML的時候單獨解析所有的resultMap標簽,封裝成ResultMap對象存入configuration中 2.解析XML中的SQL語句,封裝MappedStatement對象,這里會根據SQL的返回類型是resultMap還是resultType做處理。如…

C語言 | Leetcode C語言題解之第133題克隆圖

題目: 題解: struct Node** visited; int* state; //數組存放結點狀態 0:結點未創建 1:僅創建結點 2:結點已創建并已填入所有內容void bfs(struct Node* s) {if (visited[s->val] && state[s->val] 2…

【嵌入式系統實踐】實驗三EXTI按鈕外部中斷控制LED燈參考代碼

此內容不屬于實驗內容,因自己手頭有一STM32F103,故驗證性的進行代碼實驗,按照老師課堂ppt進行了一下復現。 通過按鈕控制LED燈的亮滅(狀態取反)。 main.c代碼: #include "STM32F10X.h" #include "stdio.h"…