• TCP和UDP的区别


    简述

    UDP和TCP是TCP/IP体系结构中的运输层中的很重要的两个协议

    image-20201223085551416

    • UDP全称是用户数据报协议

    • TCP全称是传输控制协议

    接下来,我们从几个方面来谈一下两者的区别

    区别

    是否面向连接

    • 因特网上两台主机,使用UDP协议进行通信,使用UDP协议的通信双方是可以随时进行数据传输

    • 因特网上两台主机,如果使用TCP协议进行通信

      • 通信双方在数据传输前需要三次握手进行连接
      • 通信双方在数据传输后需要四次挥手释放连接

    image-20201225145420184

    是否支持广播或多播

    • 在某个局域网上通过UDP协议进行通信的四台主机,任何一台主机都可以向其他三台主机发送广播,可以向某个多播组发送多播,也可以向某台主机发送单播

    • 在某个局域网上通过TCP协议进行通信的四台主机,任何一台主机可以和某一台主机建立“三次握手”连接,进行数据传输,即TCP仅仅支持单播

    image-20201225145559152

    报文是面向字节流或报文段

    UDP

    • 应用层将报文交付给UDP,UDP直接给应用层报文添加一个UDP首部,然后直接发送给接收方

    • UDP一次发送一个报文,而且UDP对应用层交下来的报文既不会拆分,也不会合并。换而言之,UDP是面向应用报文的

    image-20201225145747917

    TCP

    • 发送方的TCP把应用进程交付下来的报文数据块仅仅看成是无结构的字节流,发送方TCP会将数据放入“蓄水池”(缓冲区),等到可以发送的时候就发送,不能发送就等着,TCP会根据发送策略发送给接受方,换而言之,TCP是面向字节流的

    image-20201225145845570

    首部对比

    • UDP数据报首部包括了源端口、目的端口、长度、检验和,首部仅有8个字节构成,首部开销小

    • TCP的首部从图中可以看到最小长度是20字节,最大长度是60字节,这是因为TCP要实现可靠传输、拥塞控制、流量传输

    image-20201223133938786-1608824997859

    image-20201223134136608

    向上层提供的服务

    UDP向其上层提供无连接不可靠传输服务

    • 主要体现在发送方给接收方发送用户数据报,传输过程中用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部校验和的值检查出误码,但是仅仅丢弃,其他什么都不做
    • 或者发送方给接收方发送数据报,该数据报被因特网中的某个路由器丢弃了,发送方UDP不做任何处理
    • 它并不关心数据时候被另一端收到

    image-20201223135118340

    • UDP适用于实时性要求高的场景,比如视频会议、直播等等
    • 举一个视频会议的例子,因为用户一般来说可以接受图像稍微模糊一点,声音稍微不清晰一点
    • 但是如果在几秒钟以后再出现之前丢失的画面和声音,这恐怕是很难接受的
    • 这也说明了不可靠传输,意味着如果数据丢失的话,不会有重传

    TCP向其上层提供面向连接可靠传输服务

    • 使用TCP协议的收发双方不会出现上面误码,丢失的情况
    • TCP的可靠性体现在
      • TCP在传递数据前,会有三次握手来建立连接
      • 而且在数据传递的时候,有确认、窗口、重传、拥塞控制机制
      • 数据传递完之后释放连接以节约资源
    • TCP适用于要求可靠传输的应用,文件传输,查看网页
      • 当我们想查看网页,希望完整且按顺序查看网页,不丢失任何内容
      • 当你下载文件,希望得到的是完整的文件,而不仅仅是文件的一部分
      • 应用层HTTP和FTP基于TCP协议

    image-20201225150408144

    当面试官问你,你应该怎么回答?

    首先呢,UDP和TCP是TCP/IP体系结构中的运输层中的很重要的两个协议

    UDP全称是用户数据报协议,而TCP全称是传输控制协议
    两者的区别主要体现在以下五个方面
    第一点

    使用UDP协议的通信双方是可以随时进行数据传输,无需建立连接
    而TCP提供面向连接服务,在传送数据前需要三次握手建立连接,在传送数据后需要四次挥手释放连接
    第二点

    UDP提供了广播,多播,单播的服务,而TCP仅仅支持单播
    第三点

    UDP是面向应用报文,UDP对应用层交下来的报文,既不会拆分,也不会合并
    TCP是面向字节流的,发送方的TCP把应用进程交付下来的报文数据块,看成是无结构的字节流
    发送方TCP会将数据放入缓冲区,等到可以发送的时候再发送,TCP会根据发送策略,发送给接受方
    第四点

    UDP首部开销小,只有8字节,TCP的首部,最小长度是20字节,最大长度是60字节
    主要原因是TCP要实现可靠传输、拥塞控制、流量传输等等
    第五点

    UDP向其上层提供无连接不可靠传输服务,数据可能会发生丢失,误码,但是传输效率高
    所以常用于实时性要求高的场景,比如视频会议,因为我们可以接受图像稍微模糊一点,声音稍微不清晰一点
    TCP向其上层提供面向连接可靠传输服务,主要适用于要求可靠传输的应用
    比如文件传输,当我们下载文件,希望得到的是完整的文件,而不仅仅是文件的一部分
    以上,就是我对这个问题的理解

  • 相关阅读:
    Vue自定义Table
    Cesium GeometryIntstance 选中改变颜色 和 绘制带箭头的直线
    echart 饼图
    C# 读取json 文件 解析处理并另存
    滚动条到底 监听
    二分总结
    LeetCode 438. 找到字符串中所有字母异位词
    LeetCode 400. 第 N 位数字
    WPF深入浅出代码案例
    设计模式生成器模式
  • 原文地址:https://www.cnblogs.com/10134dz/p/14189072.html
Copyright © 2020-2023  润新知