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.mzph.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 基本关系说明(重要,简单了解) 前言 …