網站首頁 編程語言 正文
文章目錄
- @[TOC](文章目錄)
- 一、TCP協議
- 1.TCP協議組成
- 2.連接管理
- 三次握手
- 四次揮手
- 二、UDP協議
- 1.UDP協議組成
- 2.使用場景
- TCP協議和UDP協議的區別
文章目錄
- @[TOC](文章目錄)
- 一、TCP協議
- 1.TCP協議組成
- 2.連接管理
- 三次握手
- 四次揮手
- 二、UDP協議
- 1.UDP協議組成
- 2.使用場景
- TCP協議和UDP協議的區別
一、TCP協議
1.TCP協議組成
在了解TCP協議時,先了解TCP協議由哪幾部分組成。TCP協議由:報文首部、數據部分組成,那么在協議中我們關心的則是報文首部。首部有幾下組成:
- 固定首部
- 源端口
- 發送方的端口號
- 目的端口
- 接收方的端口號
- 序號
- 表明發送哪部分數據
- 確認號
- 確認前面的數據已收到并希望接下來接收的數據部分
- 數據偏移
- 表明報文首部的大小,從哪開始是數據部分
- 報留
- 未利用,作為備用 - 控制位
- URG:表明緊急字段有效
- ACK:用于確認數據是否收到
- PSH:需要盡快交接,不用等待緩存池滿后在交接
- RST:表明需要重新建立連接
- SYN:建立連接時,SYN=1表明請求連接
- FIN:用于斷開連接,FIN=1表明斷開連接
- 窗口
- 告知發送方,接收方可接收數據的大小
- 檢驗和
- 確保數據數量是否正確
- 緊急指針
- 表明是緊急報文,需要加急無需等待
- 源端口
- 可變首部
2.連接管理
三次握手
TCP協議的三次握手才正式建立客戶端和服務器端的連接,那么是如何實現的呢?通過報文首部的控制位,上文提到SYN和ACK兩個狀態位來建立連接。
- 首先客戶端向服務器端發起建立連接的請求,則報文首部的控制位為SYN=1,ACK=0;
- 服務器接收到請求后同意連接請求,則報文首部的控制位為SYN=1,ACK=1;
- 客戶端收到服務器發送的同意連接后,再發送報文表明已經知道可以連接,則控制位為SYN=0,ACK=1;
四次揮手
既然建立連接都有儀式感,那么斷開時依舊存在儀式感通過四次揮手表明正式斷開連接。通過報文首部的控制位的FIN和ACK來實現。
- 客戶端向服務器端發起斷開連接的請求,則報文首部的控制位為FIN=1,ACK=0;
- 服務器接收請求后確認收到,則報文首部的控制位為FIN=0,ACK=1;
- 服務器同意斷開連接,則報文首部的控制位為FIN=1,ACK=1;
- 客戶端收到服務器端的斷開連接后會再一次向服務器發送表明收到同意斷開連接的請求,則報文首部的控制位為FIN=0,ACK=1;
二、UDP協議
1.UDP協議組成
UDP協議依舊是由兩部分組成:UDP首部、數據部分。UDP的首部由:源端口、目的端口、長度、檢驗和組成。相比較TCP協議的首部,UDP協議的首部尤為顯的簡單,因此UDP協議的傳輸速度要快于TCP協議的傳輸。
2.使用場景
- 可適用于音頻,視頻通話,直播等場景
- 適用于發送的數據包較少的情況下
- 可適用于一對多的情況下(廣播機制)
TCP協議和UDP協議的區別
- 可靠性
- TCP協議具有面向連接且具有可靠性的傳輸
- UDP協議是無連接不具備可靠性的傳輸
- 資源消耗
- TCP協議占用的系統資源多于UDP協議,從上文所提及的首部組成就可以看出。TCP協議首部最小占用20字節,最多占用60字節,二UDP協議的首部只有8字節。
- 傳播形式
- TCP協議只支持單播傳輸,而UDP協議支持單播,多播,廣播機制的傳輸
- 傳輸速度
- 當然UDP協議的傳輸速度快于TCP協議的傳輸
- 傳輸形式
- TCP協議是面向字節流,UDP協議是面向數據報
- 使用場景
- TCP協議多用于文件傳輸、郵件傳輸、遠程登錄等場景
- UDP協議多用于音頻,視頻,直播等場景
- 其他特性
- TCP協議還提供擁塞控制、流量控制,全雙工通信等都是來維護TCP協議的可靠性
原文鏈接:https://blog.csdn.net/qq_55135629/article/details/126996687
- 上一篇:瀏覽網站時發生的過程
- 下一篇:CopyOnWriteArrayList的源碼分析
相關推薦
- 2021-12-13 C語言數據結構與算法之圖的遍歷(一)_C 語言
- 2022-05-13 Django-認證-權限控制-節流-分頁-過濾
- 2022-07-03 kali安裝docker及搭建漏洞環境的詳細教程_docker
- 2022-10-16 Python?Flask框架使用介紹_python
- 2022-05-21 python?判斷文件或文件夾是否存在_python
- 2022-10-13 C#?Chart控件標記問題詳解_C#教程
- 2023-10-15 element-ui里el-progress:進度條問題的解決Invalid prop: custo
- 2022-12-11 c++將vector迭代器轉換為指針的實現方式_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支