TCP/UDP协议

在这里插入图片描述

TCP/UDP协议都工作在传输层

这两个协议的目标都是在程序之间传输数据(可以是文本文件、图片、视频),对于TCP协议和UDP协议来说,都是一堆二进制数。

把人与人之间的通信看成是进程间通信,“写信”是基于非连接的UDP,“打电话”是基于连接的TCP。

一、TCP

TCP保证数据传输过程有三个关键步骤:

  1. 三次握手
    建立连接的过程:
    1.1 客户端向服务端发起连接请求时先发送一包连接请求数据(SYN包)
    1.2 服务端同意连接请求发送一包(SYN+ACK包)
    1.3 客户端收到之后回复一包ACK包,此过程中客户端和服务端之间互相发送了三包数据,称为三次握手

    之所以三次握手而不是两次握手,在服务端回复完SYN+ACK之后就建立连接是为了防止因为已失效的请求报文突然又上传到服务器引起的错误,三次握手本质上是为了解决网络信道不可靠的问题,为了在不可靠的信道上建立可靠的连接。

  2. 传输确认

    一包数据可能被拆成多包发送,可能产生丢包问题;数据包到达的先后顺序不同,可能产生乱序问题。

    为了解决丢包问题和乱序问题,TCP为每个连接都建立了一个发送缓冲区,从建立连接后的第一个字节序列号为0,后面每个字节的序列号加一。

    发送数据时从发送缓冲区取一部分数据组成发送报文,在报文的TCP协议头中附带序列号和长度,接收端收到数据后需要回复确认报文,确认报文中的ACK=接收序列号+长度。(也就是下一包数据的起始序列号)

    这样一问一答的发送方式,能让发送端确认发送的数据已经被接收端收到,发送端也可以一次发送连续的多包数据,接收端只需要回复一次ACK就可以。

    这样发送端可以把待发送数据分割成一系列碎片片发送到接收端,接收端根据序列号和长度,在接收后重构出完整的数据。

    若其中丢失了某些数据,接收端可以要求发送端重传。

    如丢失了100-199这100个字节,接收端向发送端发送ACK=100的报文,发送端收到后重传这一包数据,接收端进行补齐。

    以上过程不区分客户端和服务端,TCP连接是全双工的,对于两端来说均采用以上机制。

  3. 四次挥手

    处于连接状态的客户端和服务端都可以发送关闭连接请求,需要四次挥手进行连接关闭。

    如客户端主动发起连接关闭请求,会向服务器端发送一包FIN包,客户端进入终止等待1状态,这是第一次挥手。

    服务端收到FIN包,发送一包ACK包表示自己进入关闭等待状态,客户端进入终止等待2状态,这是第二次挥手。

    服务端此时还可以发送未发送的数据,客户端还可以接收数据,等待服务端发送完数据之后,发送一包FIN包,进入最后确认状态,这是第三次挥手。

    客户端收到之后回复ACK包,进入超时等待状态,经过超时时间之后关闭连接。服务端收到ACK包之后立即关闭连接。这是第四次挥手。

客户端之所以要等待超时时间,是为了保证对方已经收到ACK包。
因为假设客户端发送完最后一包ACK包之后就释放了连接,一旦ACK包在网络中丢失,服务端将一直停留在最后确认状态

若客户端发送最后一包ACK包之后,等待一段时间,这时服务端会因为没收到ACK包而重发FIN包,客户端会响应FIN包,重发ACK包并刷新超时时间。

四次挥手机制也是为了在不可靠的网络链路中进行可靠的连接断开确认。

二、UDP

UDP协议是基于非连接的

发送数据就是把数据包简单封装一下,然后从网卡发出去就可以,数据包之间没有状态上的联系,UDP处理方式简单,所以性能损耗非常少,对于CPU、内存资源的占用远小于TCP,但是对于网络传输过程中产生的丢包,UDP协议并不能保证,UDP传输稳定性上弱于TCP。

TCP传输数据稳定可靠,适用于对网络通讯质量要求较高的场景,如传输文件、发送邮件、浏览网页。

UDP速度快,但可能产生丢包,适用于对实时性要求高、对少量丢包没有太大要求的场景,如域名查询、语音通话、视频直播。

UDP还有一个很重要的应用场景:隧道网络,比如常用的VPN就是一种隧道网络及在SDN中用到的VXLAN也是一种隧道网络。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/277768.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Leetcode刷题笔记——动态规划(背包问题)篇

Leetcode刷题笔记——动态规划(背包问题)篇 一、0-1 背包问题 0-1背包问题简介 有 n 件物品和一个最多能背重量为 w 的背包。第 i 件物品的重量是 weight[i],得到的价值是value[i] 。每件物品只能用一次,求解将哪些物品装入背包…

Unload-labs

function checkFile() {var file document.getElementsByName(upload_file)[0].value;if (file null || file "") {alert("请选择要上传的文件!");return false;}//定义允许上传的文件类型var allow_ext ".jpg|.png|.gif";//提取上传文件的类…

代码算法训练营day9 | 28. 实现 strStr() 、459.重复的子字符串

day9: 28. 实现 strStr()KMP的主要应用:什么是前缀表:前缀表是如何记录的: 如何计算前缀表:构造next数组:1、初始化2、处理前后缀不相同的情况3、处理前后缀相同的情况 代码: 459.重复的子字符串…

Mysql 索引、锁与MVCC等相关知识点

文章目录 Mysql锁的类型锁使用MVCC快照读和当前读读视图【Read View】串行化的解决 索引类型存储方式区分逻辑区分实际使用区分索引失效情况 索引建立规范SQL编写规范exlpain字段解析ACID的原理日志引擎慢SQL整合SpringBoot博客记录 Mysql锁的类型 MySQL中有哪些锁&#xff1a…

德人合科技 | 公司办公终端、电脑文件资料 \ 数据透明加密防泄密管理软件系统

天锐绿盾是一款全面的企业级数据安全解决方案,它专注于为企业办公终端、电脑文件资料提供数据透明加密防泄密管理。 首页 德人合科技——www.drhchina.com 这款软件系统的主要功能特点包括: 1. **透明加密技术**: 天锐绿盾采用了透明加密技…

HarmonyOS NEXT应用开发—Grid和List内拖拽交换子组件位置

介绍 本示例分别通过onItemDrop()和onDrop()回调,实现子组件在Grid和List中的子组件位置交换。 效果图预览 使用说明: 拖拽Grid中子组件,到目标Grid子组件位置,进行两者位置互换。拖拽List中子组件,到目标List子组件…

ChromeDriver 122 版本为例 国内下载地址及安装教程

ChromeDriver 国内下载地址 https://chromedriver.com/download 靠谱 千千万万别下载错了 先确认 Chrome 浏览器版本 以 win64 版本为例 那我们下载这一个啊,不要下载错了 下载地址贴在这哈 https://storage.googleapis.com/chrome-for-testing-public/122.0.…

HarmonyOS鸿蒙开发常用4种布局详细说明

介绍一下鸿蒙开发常用4种布局 1、线性布局 2、层叠布局 3、网格布局 4、列表布局 ​1. 线性布局(Column/Row) 线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row(行)和Column&…

SpringSecurity(SpringBoot2.X版本实现)

资料来源于 SpringSecurity框架教程-Spring SecurityJWT实现项目级前端分离认证授权 侵权删 目录 介绍 快速开始 认证 认证流程 登录校验流程 SpringSecurity完整流程 认证流程详解 代码实现 准备工作 mysql mybatis-plus redis 统一返回类 核心代码 密码加密存…

神策分析 Copilot 成功通过网信办算法备案,数据分析 AI 化全面落地

近日,神策数据严格遵循《互联网信息服务深度合成管理规定》,已完成智能数据问答算法备案。该算法基于大模型技术,专注于为客户提供数据指标查询和数据洞察方面的专业回答。 神策分析 Copilot 运用神策数据智能数据问答算法,聚焦分…

Vue-router3.0版本跳转报错

1.路由创建之后发现控制台push路由跳转报错了 2.解决方法: //在router文件中添加 const originalPush VueRouter.prototype.push VueRouter.prototype.push function push(location) {return originalPush.call(this, location).catch(err > err) }3.解决了

【深度学习模型移植】用torch普通算子组合替代torch.einsum方法

首先不得不佩服大模型的强大之处,在算法移植过程中遇到einsum算子在ONNX中不支持,因此需要使用普通算子替代。参考TensorRT - 使用torch普通算子组合替代torch.einsum爱因斯坦求和约定算子的一般性方法。可以写出简单的替换方法,但是该方法会…

有上百个文件夹需要按顺序编码重命名怎么办?这个方法值得你收藏

在日常生活和工作中,我们经常需要管理大量的文件夹,以便更好地组织和存储文件。为了更方便地查找和识别文件夹,给文件夹按号码命名是一种非常实用的方法。下面,我将详细介绍如何给文件夹按号码命名,并提供一些实用的建…

[Python初阶]2255.统计是给定字符串前缀的字符串数目

目录 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 ③.startswith()方法理解 与 说明 Ⅰ.定义和用法 Ⅱ.语法 ④.问题解决 ⑤总结 2255.统计是给定字符串前缀的字符串数目 ①.题目 ②.问题分析 需求:统计列表words中,是字符串s的前缀的字符串的数目. 解…

【pynput】监控是否打开百度贴吧网页

文章目录 简介Demo 简介 有网友提过一个要求,用 Python 实现一个 电脑打开某网站就自动关机的功能。 想到的思路有两个: 【windows 平台】, 获取活动的窗口标题,如果标题里包含了某些网站名称, 那就使用关机命令 可以定时拉取标题, 也可以使…

Python 导入Excel三维坐标数据 生成三维曲面地形图(体) 5-3、线条平滑曲面且可通过面观察柱体变化(三)

环境和包: 环境 python:python-3.12.0-amd64包: matplotlib 3.8.2 pandas 2.1.4 openpyxl 3.1.2 scipy 1.12.0 代码: import pandas as pd import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D from scipy.interpolate import griddata fro…

【计算机网络_应用层】https协议——加密和窃密的攻防

文章目录 1.https协议的介绍2. 加密和解密2.1 什么是加密2.2 常见的加密方式2.2.1 对称加密2.2.2 非对称加密 2.3 数据摘要(数据指纹)2.4 数字签名 3. https协议的加密和解密方案一:使用对称加密(❌)方案二&#xff1a…

嵌入式学习39-程序创建数据库及查找

1.sqlite3_open int sqlite3_open( const char *filename, /* Database filename (UTF-8) */ sqlite3 **ppDb /* OUT: SQLite db handle */ ); 功能: 打开 数据库文件(创建一个数据库连接) 参数: filename: …

react-面试题

一、组件基础 1. React 事件机制 <div onClick{this.handleClick.bind(this)}>点我</div> React并不是将click事件绑定到了div的真实DOM上&#xff0c;而是在document处监听了所有的事件&#xff0c;当事件发生并且冒泡到document处的时候&#xff0c;React将事…

小蓝的漆房——算法思路

题目链接&#xff1a;1.小蓝的漆房 - 蓝桥云课 (lanqiao.cn) 本题只要是通过枚举的方法&#xff0c;算出涂成每一种颜色所需的天数&#xff0c;最后在所有天数中找出最小值&#xff08;由题可知&#xff0c;最多只有60种颜色&#xff0c;所以可以尝试算出每种颜色所需的时间&am…