20天 - TCP 和 UDP 有什么區別?說說 TCP 的三次握手?TCP 是用來解決什么問題?

TCP 和 UDP 有什么區別?

TCP(傳輸控制協議)和 UDP(用戶數據報協議)都是傳輸層的網絡協議,它們的主要區別如下:

連接方式

  • TCP:面向連接的協議,類似于打電話,在數據傳輸之前需要建立連接,通信結束后需要斷開連接。
  • UDP:無連接的協議,類似于寄信,發送數據時不需要建立連接,直接將數據報發送出去。

可靠性

  • TCP:提供可靠的、字節流服務。發送端確保數據的完整傳輸,接收端收到數據后需要發送確認信息,如果發送端沒有收到確認信息,會重新發送數據。
  • UDP:不保證數據傳輸的可靠性,不提供確認信息和重傳機制。發送端發送數據后不關心接收端是否收到,數據可能丟失或順序混亂。

傳輸速度

  • TCP:由于需要建立連接、確認數據和重傳機制,速度相對較慢。
  • UDP:沒有連接建立和數據確認等過程,傳輸速度更快。

數據傳輸形式

  • TCP:基于字節流,將數據視為連續的字節序列進行傳輸,接收端需要根據應用層協議來解析數據。
  • UDP:基于數據報,每個數據報都有獨立的包頭和數據部分,接收端收到的是完整獨立的數據報。

使用場景

  • TCP:適用于對數據準確性要求高、數據傳輸量大的場景,如網頁瀏覽、文件傳輸、電子郵件等。
  • UDP:適用于對實時性要求高、數據傳輸量小的場景,如視頻直播、在線游戲、語音通話等。

總結

TCP 強調數據傳輸的可靠性和完整性,適用于需要確保數據準確到達的場景;UDP 則更注重傳輸速度和實時性,適用于對數據丟失不太敏感、追求快速傳輸的場景。

說說 TCP 的三次握手?

TCP 的三次握手是建立連接的過程,確保雙方已準備好進行數據傳輸。具體步驟如下:

  1. 第一次握手:客戶端向服務器發送一個帶有 SYN(同步序列編號)標志的數據包,請求建立連接。這個數據包還包含客戶端的初始序列號(ISN),用于后續的數據同步。
  2. 第二次握手:服務器收到客戶端的 SYN 數據包后,確認客戶端的請求,并回送一個帶有 SYN 和 ACK(確認)標志的數據包。這個數據包包含服務器的初始序列號,同時將客戶端的序列號加 1 作為確認。
  3. 第三次握手:客戶端收到服務器的 SYN+ACK 數據包后,發送一個帶有 ACK 標志的數據包作為確認,將服務器的序列號加 1 作為確認。服務器收到這個 ACK 數據包后,連接建立完成,雙方可以開始數據傳輸。

三次握手的意義

  • 確保雙方都已準備好進行通信:通過三次握手,客戶端和服務器都能確認對方收到了自己的連接請求和確認信息,確保了連接的可靠性。
  • 同步序列號:雙方交換初始序列號,用于后續的數據傳輸中的數據順序控制和丟失重傳。

示例

假設客戶端的初始序列號為 X,服務器的初始序列號為 Y

  1. 客戶端發送 SYN 數據包,序列號為 X
  2. 服務器收到后,發送 SYN+ACK 數據包,序列號為 Y,確認號為 X+1
  3. 客戶端收到后,發送 ACK 數據包,序列號為 X+1,確認號為 Y+1

通過這三次握手,客戶端和服務器建立了一個可靠的 TCP 連接,可以開始正式的數據傳輸

TCP 是用來解決什么問題?

TCP(傳輸控制協議)主要用于解決網絡數據傳輸中的可靠性問題,確保數據能夠完整、準確地從發送端傳輸到接收端。以下是TCP解決的主要問題:

1. 數據丟失

  • 問題:網絡傳輸中數據包可能丟失。
  • 解決方案:TCP通過確認機制和重傳機制來解決。發送方在發送數據后會等待接收方的確認信息(ACK)。如果發送方在超時時間內沒有收到確認信息,就會認為數據包丟失,并重新發送丟失的數據包。

2. 數據重復

  • 問題:網絡傳輸中數據包可能重復到達。
  • 解決方案:TCP使用序列號來標識每個數據包。接收方通過檢查序列號來判斷數據包是否重復,如果重復則丟棄。

3. 數據順序錯亂

  • 問題:網絡傳輸中數據包可能順序錯亂。
  • 解決方案:TCP使用序列號和確認號來重組數據包,確保接收方收到的數據是按正確順序排列的。

4. 網絡擁塞

  • 問題:網絡傳輸中可能出現擁塞,導致數據傳輸變慢或丟包。
  • 解決方案:TCP通過擁塞控制算法(如慢啟動、擁塞避免等)來動態調整發送方的數據發送速率,以適應網絡的當前狀況。

5. 連接管理

  • 問題:如何確保雙方在數據傳輸前都已準備好。
  • 解決方案:TCP通過三次握手來建立可靠的連接,確保雙方都已準備好進行數據傳輸。

6. 數據完整性

  • 問題:如何確保數據在傳輸過程中未被篡改。
  • 解決方案:TCP使用校驗和來驗證數據的完整性。接收方在收到數據后會計算校驗和,如果與發送方的校驗和不一致,則認為數據被篡改或損壞,要求重傳。

總結

TCP通過上述機制確保了數據傳輸的可靠性、順序性和完整性,適用于對數據準確性要求高的場景,如網頁瀏覽、文件傳輸、電子郵件等。

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

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

相關文章

【MySQL_05】語法簡述(是語法,不詳細介紹各種語句)

文章目錄 一、基本規則二、標識符規則三、數據類型四、運算符五、關鍵字六、SQL 語句的通用語法結構 歷史文章點擊👉:SQL 🐈??github:https://github.com/mysql 💻官網: https://www.mysql.com &#…

JavaScript中的生成器函數詳解

在 JavaScript 中,生成器函數 Generator Function 是一種特殊的函數,它允許你在函數執行過程中暫停和恢復。生成器函數通過 function* 語法定義,并使用 yield 關鍵字來控制函數的執行流程。生成器函數返回一個生成器對象,該對象遵…

計算機網絡——交換機

一、什么是交換機? 交換機(Switch)是局域網(LAN)中的核心設備,負責在 數據鏈路層(OSI第二層)高效轉發數據幀。它像一位“智能交通警察”,根據設備的 MAC地址 精準引導數…

Git合并工具在開發中的使用指南

在團隊協作開發中,Git 是最常用的版本控制工具,而代碼合并(Merge)是多人協作不可避免的環節。當多個開發者同時修改同一文件的相同區域時,Git 無法自動完成合并,此時需要借助合并工具(Merge Too…

實現多語言適配

1.在res下創建多語言資源文件: 2.選擇需要的語言 然后得到多種語言適配string文件: 3.代碼設置多語言 object LanguageHelper {/*** 獲取適配的 Context*/fun getAttachBaseContext(context: Context): Context {return if (Build.VERSION.SDK_INT > …

【學習方法一】

學習方法一 一、通用高效學習法二、學科專項方法三、工具與技術輔助四、習慣與心理策略五、避免常見誤區總結六、進階學習策略七、解決學習痛點八、場景化學習法九、資源與工具推薦十、個性化學習調整十一、長期學習心態十二、常見問題QA十三、應對特殊挑戰的學習法十四、健康與…

Golang學習筆記_44——命令模式

Golang學習筆記_41——觀察者模式 Golang學習筆記_42——迭代器模式 Golang學習筆記_43——責任鏈模式 文章目錄 一、核心概念1. 定義2. 解決的問題3. 核心角色4. 類圖 二、特點分析三、適用場景1. 事務管理系統2. 多媒體遙控器3. 操作審計系統 四、Go語言實現示例五、高級應用…

應急響應--流量分析

(一)Cobalt Strike流量特征分析 1.HTTP特征 源碼特征: 在流量中,通過http協議的url路徑,在checksum8解密算法計算后,32位的后門得到的結果是92,64位的后門得到的結果是93,該特征符…

CI/CD—Jenkins配置一次完整的jar自動化發布流程

背景: 實現設想: 要創建自動化發布,需要準備一臺測試服務器提前安裝好java運行所需的環境,JDK版本最好和Windows開發機器上的版本一致,在Jenkins上配置將構建好的jar上傳到測試服務器上,測試服務器自動啟動…

創建分區表ORA-14037

1、故障現象 在跑腳本的時候創建物化試圖提示分區界限過高 2、解決方法 最終原因是:缺少了 這個 r34411分區,加上就好。 判斷是物化視圖創建的時候需要兼容所有分區的數據,所以報錯,而分區表則不存在這種情況 3、測試驗證 分區…

轉和git subtree管理方式為git submodule的管理方式

將 Git 子樹(subtree)轉換為子模塊(submodule)的步驟如下: 1. 確定子樹的路徑和對應的遠程倉庫地址 找到當前項目中子樹的路徑以及對應的遠程倉庫地址。例如,假設子樹的路徑為 subtree-folder&#xff0c…

基于51單片機多功能防盜報警系統

基于51單片機多功能防盜報警系統( proteus仿真程序設計報告原理圖講解視頻) 1. 主要功能:2. 講解視頻:3. 仿真4. 程序代碼5. 設計報告6. 原理圖7. 設計資料內容清單&&下載鏈接 仿真圖proteus8.9及以上 程序編譯器:keil 4/…

R語言和RStudio安裝

整體還是比較簡單的,主要是記錄個流程。 官方鏡像站列表R語言官網 1 安裝R(2025/3/6) R語言官網:The R Project for Statistical Computing 打開之后就Hello world一下吧 配置環境變量 2 安裝RStudio 下載地址:htt…

Ubuntu 22.04 升級到 Ubuntu 24.04 全流程指南

📌 1. 前言 Ubuntu 24.04 是最新的 LTS 版本,帶來了內核更新、性能優化以及更強的安全性。本指南詳細記錄了從 Ubuntu 22.04 升級到 24.04 的完整過程,包括 升級前的準備、遇到的問題及如何選擇最佳選項,避免升級失敗或系統損壞。…

【每日學點HarmonyOS Next知識】Web跨域資源、Web長按菜單、Web攔截請求、禁止錄屏、Base64圖片寬高

1、HarmonyOS Web組件本地資源跨域問題? 關于資源跨域問題的解決,可以參考以下官網文檔:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/web-cross-origin-V5 方法一 為了使Web組件能夠成功訪問跨域資源,開…

數據庫查問題常用OS命令匯總

1、內存使用情況查看 top //查看活躍進程占用情況 free -mh //查看操作系統當前可用內存 2、cpu使用情況 lscpu //查看os cpu情況 sar -u -f sar文件名 -s hh:mm:ss -e hh:mm:ss //查看對應日期的歷史cpu情況 top //查看當前活躍進程使用cpu情況 3、io情況 iostat …

nlp培訓重點-5

1. LoRA微調 loader: # -*- coding: utf-8 -*-import json import re import os import torch import numpy as np from torch.utils.data import Dataset, DataLoader from transformers import BertTokenizer """ 數據加載 """cl…

CI/CD—Jenkins配置Maven+GitLab自動構建jar包

一、安裝Maven插件通過Maven構建項目 1、在Jenkins上安裝Maven Integration plugin插件 2、創建一個maven項目 2.1、填寫構建的名稱和描述等 2.2、填寫連接git的url 報錯:無法連接倉庫:Error performing git command: git ls-remote -h http://192.168.…

ngx_regex_create_conf

ngx_regex_create_conf 定義在 src/core/ngx_regex.c static void * ngx_regex_create_conf(ngx_cycle_t *cycle) {ngx_regex_conf_t *rcf;ngx_pool_cleanup_t *cln;rcf ngx_pcalloc(cycle->pool, sizeof(ngx_regex_conf_t));if (rcf NULL) {return NULL;}rcf->p…

【數據結構】初識集合框架及背后的數據結構(簡單了解)

目錄 前言 如何學好數據結構 1. 什么是集合框架 2. 集合框架的重要性 3. 背后所涉及的數據結構以及算法 3.1 什么是數據結構 3.2 容器背后對應的數據結構 3.3 相關java知識 3.4 什么是算法 3.5 基本關系說明(重要,簡單了解) 前言 …