IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP与UDP的爱恨情仇 -> 正文阅读

[网络协议]TCP与UDP的爱恨情仇

很多人都把TCP与UDP拿来比较,那我们今天就来说说他们之间的爱恨情仇!

再奔入主题之前,我们先来看一张图

?

?首先,从这张图中可以发现,tcp、udp属于传输层,那我们就聊聊吧!

首先,我们从以下这几个方面聊:

第一:是什么?

第二:解决了什么问题?

第三:应用场景是什么?

第四:TCP的生命周期?

那我们就开始解答这三个问题吧

我们从广义上来说:

? ? ? ? ?1) TCP 其实是一个有状态服务(通俗地讲就是有脑子的,里面精确地记着发送了没有,接收到没有,发送到哪个了,应该接收哪个了,错一点儿都不行),TCP头包括:目标端口、源端口、序号、确认序号;

?

????????主要有以下这几种特点:

? ? ? ? 1、TCP 是面向字节流的,发送的时候发的是一个流,没头没尾;

? ? ? ? 2、TCP 提供可靠交付。通过 TCP 连接传输的数据,无差错、不丢失、不重复、并且按序到达;

? ? ? ? 3、TCP 是可以有拥塞控制的,它意识到包丢弃了或者网络的环境不好了,就会根据情况调整自己的行为,看看是不是发快了,要不要发慢点;

? ? ? ?2) 而UDP 则是无状态服务(通俗地说是没脑子的,应用让我发多少就发多少,发出去就发出去了);它的请求头只有源端口、目标端口(为什么只有这两个,我们从他的特性来分析);

? ? ? ? 主要有以下特点:

? ? ? ? 1、继承了 IP 的特性,基于数据报的,一个一个地发,一个一个地收;

? ? ? ? ? (特性:IP 包可不是一个流,而是一个个的 IP 包)

? ? ? ? 2、UDP 继承了 IP 包的特性,不保证不丢失,不保证按顺序到达。

?????? ?? (IP特性:IP 包是没有任何可靠性保证的,一旦发出去,就像西天取经,走丢了、被妖怪吃了,都只能随它去)

? ? ? ? 3、像TCP本身是可以有拥堵控制的,而UDP则不会,它会无头脑的听从应用命令;

接下来,我们通过应用场景来聊解决了什么问题,俗话说,不在业务场景下聊技术,都是在耍流氓;

? ? ? ? 我们从他们的特性分析,像UDP他是一种无状态,无感知的协议,需要资源少,在网络情况比较好的内网,或者对于丢包不敏感的应用,所以它会适用于什么场景呢? 对,像视屏,实时游戏应用,他们需要处理速度快,时延低,可以容忍少数丢包,比如我们看个视频,突然卡住了,丢了几帧,其实看视频的人不会有感知,如果连续丢,就会有感知了;

? ? ? ? TCP在我们工作中就会有很多场景,比如:工作中的HTTP请求,HTTPS请求,包括SpringCloud的Feign,他们的底层都是TCP协议,为什么他们对包的要求性非常高,不言而喻,大家都知道,这里我就不过多解释了;

既然我们工作中经常用到TCP,接下来,那我们就细聊一下它;

除了以上我们聊过的TCP相关知识,大家还能想到什么?对,生命周期;TCP的生命周期相对复杂;他需要三次握手四次挥手,但是大家知道为什么是三次握手四次挥手吗?为什么不是一次或者两次?

????????如果一次握手,A发起建立连接,B拒绝连接,A不知道,则连接失败;

? ? ? ? 如果两次连接,如果A请求建立连接,网络包一入网络深似海,可能走丢可能迷路,A一直接收不到回应,一直重发,过了一段时间,B接收到了迷路的网络包,B就以为建立了连接,但是此时A可能已经挂了,所以两次建立也不成立;

????????三次连接,如果A请求建立连接,同样会发出请求连接包,当B接收到了A请求的网络包,会告诉A,我愿意建立连接,给他发送回复包;

?????? A接收到之后就知道B愿意跟他建立连接;所以没有必要四次五次的握手;

四次挥手也是同样的道理;

建立连接成功后,以下问题我们应该如何处理:

如果建立连接之后,长时间不发数据,如何处理?

开启 keepalive 机制,即使没有真实的数据包,也有探活包

如何保证B接收到的是A发出的网络包?

TCP头包有端口

如何保证这三个包是同一组网络包的?

通过序号(序号是随着时间的变化生成的)

如何维护连接?

双方都会建立一个状态机;

四次挥手还有很多问题:

如果A告诉B想要断开连接,B回复好的之后,B又告诉A我也要断开,直接断开,A还会重复回复B,如何处理?

如果A直接跑路了,A的端口就会空出来,被其他应用占用,则新的应用很可能接收到B的回复包,如何处理?等等一系列问题;等我们下次再一起讨论;

这是本人对UDP、TCP的见解,如有误差,欢迎指正;

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-23 17:02:36  更:2021-08-23 17:03:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 20:20:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计