专栏首页M不作声网络协议TCP、UDP

网络协议TCP、UDP

国际标准化组织(ISO)指定了一个计算机或通信系统间互联的标准体系,一般称为OSI参考模型或七层模型。做前端肯定少不了和网络打交道,所以前端知识栈中必有网络协议。

首先我们要知道,UDP和TCP工作在七层模型中的传输层。然后我们需要了解这两种协议的特点以及根据特点使用在合适的场景中。

TCP传输控制协议

直接列出来TCP的特点,然后再一一解释:

  • 面向连接的、可靠的传输协议
  • 全双工通信
  • 通过滑动窗口进行流量控制
  • 拥塞控制

面向连接

在TCP传输数据之前,要先建立连接,这就是所谓的面向连接。通过建立连接的方式传输数据,就是为了保证数据的完整性、一致性等,所以称之为可靠的传输协议。TCP建立连接和断开连接都需要进行握手操作。

TCP建立连接的方式叫做三次握手

  • 第一次握手。客户端向服务端发送连接请求报文段。
  • 第二次握手。服务端收到连接请求报文段后,同意后发送一个应答。
  • 第三次握手。当客户端收到同意连接的应答后,向服务端发送一个确认报文,同时进入连接成功状态,服务端收到报文后也进入连接成功状态。此时连接建立完成,开始传送数据。

TCP断开连接的方式叫做四次挥手

  • 第一次挥手。客户端向服务端发送连接释放请求。
  • 第二次挥手。服务端收到释放请求发送确认包,同时进入等待关闭状态。这时服务端不再接受数据,但是还可以发送数据。
  • 第三次挥手。服务端发送完数据后,向客户端发送连接释放请求。然后服务端就进入最后确认阶段。
  • 第四次挥手。客户端收到释放请求后,向服务端发送确认应答进入等待状态。状态持续2MSL(报文最大生存时间),如果中间没有收到的服务端的重发请求就进入关闭状态,服务端收到确认应答后也进入关闭状态。

双全工通信方式是指通信双发可以同时发送数据。

流量控制是指采用某种方法,控制收发端传输数据的速度,从而维持网络数据传输的平衡。TCP中通过使用体积可变的滑动窗口来实现流量控制。

网络拥塞是因为,在某段时间,网络中某一资源的需求量超过该资源所能提供的资源,简单来说就是需求大于供应。TCP中的拥塞控制包括四个算法:慢开始、拥塞避免、快速重传、快速恢复。

流量控制和拥塞控制虽然起到了类似的效果,但是原理不同。流量控制是为了解决输送方和接收方速度不同而导致的数据丢失问题;拥塞控制是防止过多的数据注入到网络中,导致网络崩溃。

UDP用户数据报协议

UDP传输的特点:

  • UDP是一种面向无连接的、尽最大可能交付的传输协议
  • 支持一对一、一对多、多对一、多对多的传输方式

UDP是面向无连接的,在传输数据之前也不需要先建立连接,且UDP只服务数据报文的搬运,不保证有序完整的将数据传递到目的端,同时也没有流量控制拥塞控制之类的机制。

相对于TCP来说,UDP看似缺点很多,但实际上UDP正因为没有那些复杂的东西,使得传输数据很高效,并且使用的资源很少。

协议对比

使用一张图清晰对比两种协议:

TCP和UDP两种协议就好比是一对一辅导和教室授课(/doge)。

TCP保证老师讲的东西都可以被学生记住,讲课的时候保证一定的环境,老师讲的内容要在学生的接受范围之内,不要求进度,但是要求学生把讲的都学会。

UDP像是,老师不管听懂没听懂,一节课该讲多少就要讲多少,进度可不能落下,所以进度都很快。

由于UDP时效性很高,所以可以用于视频电话,直播等场景中;而TCP对数据完整无误要求更高,所以常用于文件传输等。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 面试中的路由问题

    路由最初是出现在后端中,后端根据不同的路由返回不同的页面,后来随着单页面应用(SPA)诞生,前端也出现了路由,实现了不用刷新页面就可以更新页面的效果。

    不作声
  • 布隆过滤器

    布隆过滤器本质上是一种概率型的数据结构,用于检索一个元素是否在集合中,它将告诉你一个数据“一定不存在或可能存在。

    不作声
  • JavaScript实现继承

    使用class继承非常简单。子类使用extends关键字表明继承于哪个类,并在子类中调用super(),这相当于使用call()改变this的指向。

    不作声
  • 生命周期感知 Lifecycle

    生命周期感知组件可以感知其他组件的生命周期,例如 Activity,Fragment等,以便于在组件的生命周期状态变化时做出相应的操作。支持生命感知的组件可以帮...

    佛系编码
  • 如何使用ClamAV扫描漏洞

    Clam AntiVirus(ClamAV)是免费而且开放源代码的杀毒软件,软件与病毒码的更新皆由社群免费发布。目前ClamAV主要是使用在由Linux、Fre...

    宇cccc
  • Android 国际货币格式化的示例代码

    目前为止,货币格式化最简单的方式是调用 NumberFormat.getCurrencyInstance() 获得 NumberFormat 实例来把数字格式化...

    砸漏
  • 【Jedis配置】springSSM + Jedis连接池配置

    当一个类实现了Serializable接口(该接口仅为标记接口,不包含任何方法定义),表示该类可以序列化.序列化的目的是将一个实现了Serializable接...

    用户5640963
  • 解决 | 此数据库文件跟当前sql server实例不兼容 & sql server2008无法连接到(local)

    最近在搞ASP.NET,因实验室VS版本跟PC不一样可能,拷回来一打开就这样子:

    凌川江雪
  • Istio 中业务开发需要关注的二三事

    在应用开发过程中,虽然 Istio 号称是 0 入侵,但我们在开发过程中,还是会碰到一些问题,如在远程调用和调用链等方面还是会有一些改变,下面列举了一些 开发人...

    谢正伟
  • SaaS-初识SaaS

    IaaS(Infrastructure as a Service),即基础设施即服务。 提供给消费者的服务是对所有计算基础设施的利用,包括处理CPU、内存、存储...

    cwl_java

扫码关注云+社区

领取腾讯云代金券