图文分析详解计算机网络TCP与UDP两者区别及原理

目录
  • 1、概念
  • 2、从是否面向连接来看
    • 2.1、UDP
    • 2.2、TCP
  • 3、从连接对象个数来看
    • 3.1、UDP
    • 3.2、TCP
  • 4、从对应用报文的处理来看
    • 4.1、UDP
    • 4.2、TCP
      • 发送方:
      • 接收方:
  • 5、从向其上层提供传输服务来看
    • 5.1、UDP
    • 5.2、TCP
  • 6、从首部格式来看
    • 6.1、UDP
    • 6.2、TCP
  • 7、总结

1、概念

UDP和TCP 在使用TCP/IP 体系结构的网络通信中,这两个协议的使用频率仅次于网际层的IP协议。TCP/IP 体系结构应用层中的某些协议需要使用运输层的TCP 提供的服务,而另一些协议需要使用运输层的UDP 提供的服务,UDP 是用户数据报协议的英文缩写词,TCP 是传输控制协议的英文缩写词。

2、从是否面向连接来看

如下图所示,两个小电脑图标代表英特网上的两台主机,纵坐标为时间。

2.1、UDP

两台主机如果在运输层使用UDP协议进行通信,双方可以随时发送数据,因此UDP是无连接的。

2.2、TCP

再来看使用TCP 协议的情况,使用TCP协议的通信,双方在进行数据传输之前必须使用三报文握手来建立TCP 连接。TCP 连接建立成功后才能进行数据传输,数据传输结束后必须使用四报文挥手来释放TCP连接。需要注意的是这里所谓的连接是指逻辑连接关系,而不是物理连接,综上所述UDP是无连接的,而TCP是面向连接的。

3、从连接对象个数来看

3.1、UDP

下图是某个局域网上的使用UDP协议进行通信的四台主机,其中任何一台主机都可向其他三台主机发送广播,也可以向某个多播组发送多播,还可以向某台主机发送单播。也就是说UDP支持单播多播以及广播,换句话说UDP支持一对一,一对多以及一对全的通信。

一台主机向其他三台主机发送广播:

向某个多播组发送多播:

向某台主机发送单播:

3.2、TCP

再来看使用TCP协议的情况。使用TCP协议的通信,双方在进行数据传输之前必须使用三报文握手来建立TCP连接。TCP连接建立成功后,通信双方之间就好像有一条可靠的通信信道,通信双方使用这条基于TCP连接的可靠信道进行通信。很显然,TCP仅支持单播,也就是一对一的通信。

三报文握手”建立TCP连接:

基于TCP连接的可靠信道:

4、从对应用报文的处理来看

4.1、UDP

先来看使用UDP协议的情况。发送方的应用进程将应用层报文交付给运输层的UDP,UDP直接给应用层报文添加一个UDP首部,使之成为UDP用户数据报,然后进行发送。需要说明的是,为了简单起见,我们忽略运输层下面的各层处理。

接收方的UDP收到该UDP用户数据报后,去掉UDP首部,将应用层报文交付给应用进程。也就是说,UDP对应用进程交下来的报文既不合并也不拆分,而是保留这些报文的边界。换句话说,UDP是面向应用报文的。

4.2、TCP

再来看使用TCP协议的情况。

发送方:

1、发送方的TCP把应用进程交付下来的数据块仅仅看作是一连串的无结构的字节流,TCP并不知道这些带传送的字节流的含义。

2、发送方将他们编号并存储在自己的发送缓存中。

3、TCP根据发送策略,从发送缓存中提取一定数量的字节构建TCP报文段并发送。

接收方:

1、接收方的TCP一方面从所接收到的TCP报文段中取出数据载荷部分,并存储在接收缓存中,一方面将接收缓存中的一些字节交付给应用进程。

2、TCP不保证接收方应用进程所收到的数据块与发送方应用进程所发出的数据块具有对应大小的关系(例如,发送方应用进程交给发送方的TCP共10个数据块,但接收方的TCP可能只用了4个数据块,就把收到的字节流交付给了上层的应用进程,但接收方收到的字节流必须和发送方应用进程发出的字节流完全一样。)当然,接收方的应用进程必须有能力识别收到的字节流,并把它还原成有意义的应用层数据。

因此,TCP是面向字节流的,这正是TCP 实现可靠传输、流量控制以及控制的基础。

需要说明的是,为了突出示意图的要点,我们只画出了一个方向的数据流。在实际网络中,基于TCP连接的两端,可以同时进行TCP 报文段的发送和接收,也就是全双工通信。另外,图中的数据部分只包含了几个字节,实际当中一个TCP报文段包含上千个字节是很常见的。

5、从向其上层提供传输服务来看

5.1、UDP

TCP/IP体系结构的网际层向其上层提供的是无连接不可靠的传输服务,当运输层使用UDP协议时,向其上层提供的也是无连接不可靠的传输服务。

发送方给接收方发送UDP用户数据报,若传输过程中用户数据报受到干扰而产生误码,接收方UDP可以通过该数据报首部中的校验和字段的值检查出产生物码的情况,但仅仅丢弃该数据报其他什么也不做。

发送方给接收方发送UDP用户数据报,如果该数据报被英特网中的某个路由器丢弃了,发送方UDP不做任何处理,因为UDP向上层提供的是无连接不可靠的传输服务。

因此,对于UDP用户数据报出现的物码和丢失等问题,UDP并不关心,基于UDP的这个特点,UDP适用于实时应用,例如IP电话、视频会议等。

5.2、TCP

再来看使用TCP协议的情况,尽管网际层中的IP协议向上层提供的是无连接不可靠的传输服务,也就是说,IP数据报可能在传输过程中出现丢失,误码,但只要运输层使用TCP协议,就可向其上层提供面向连接的可靠传输服务。

我们可将其想象成使用TCP协议的收发,双方基于TCP连接的可靠性到进行数据传输,不会出现误码丢失、乱序以及重复等传输差错。因此,TCP适用于要求可靠传输的应用,例如文件传输。

6、从首部格式来看

6.1、UDP

一个UDP用户数据报由首部和数据载荷两部分构成,其首部格式如下图所示:

仅有4个字段,每个字段长度为2个字节,由于UDP不提供可靠传输服务,它仅仅在网际层的基础上添加了用于区分应用进程的端口,因此他的首部非常简单,仅有8个字节。

6.2、TCP

一个TCP报文段由手部和数据载荷两部分构成,其首部格式如下图所示:

这比UDP用户数据报的首部复杂的多,其最小长度为20字节,最大长度为60字节,这是因为TCP要实现可靠传输、流量控制控制等服务,其首部自然会比较复杂,首部中的字段比较多,首部长度也比较长。

7、总结

UDP和TCP对比表格:

类型 是否面向连接 传输可靠性 传输形式 传输效率 所需资源 应用场景 首部字节
TCP 可靠 字节流 文件传输、邮件传输 20~60个字节
UDP 不可靠 数据报文段 即时通讯、域名转换 8个字节

UDP和TCP对比图:

以上就是图文分析详解TCP与UDP两者区别的详细内容,更多关于TCP与UDP区别分析的资料请关注我们其它相关文章!

(0)

相关推荐

  • 深入理解TCP协议与UDP协议的原理及区别

    网络编程有三个要素,分别是IP地址.端口号和通信协议,那本文主要讲述的是TCP与UDP这两种通信协议,以及编程的实现. 首先,我们需要了解一下IP地址.端口号.通信协议的相关知识. 一.IP地址 网络中的计算机使用IP地址来进行唯一标识,IP地址有IPv4和IPv6两种类型.IPv4采用十进制或二进制表示形式,十进制是一种比较常用的表示形式,如192.168.1.131,IPv6采用十六进制表示形式,一般不常用. 如何查看IP地址相关信息: 在Windows系统下,打开cmd,输入命令ipcon

  • tcp、udp、ip协议分析_动力节点Java学院整理

    互连网早期的时候,主机间的互连使用的是NCP协议.这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连不同的操作系统,没有纠错功能.为了改善这种缺点,大牛弄出了TCP/IP协议.现在几乎所有的操作系统都实现了TCP/IP协议栈. TCP/IP协议栈主要分为四层:应用层.传输层.网络层.数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行数据传输的一种格式.整个网络中使用的协议有很多,所幸的是每一种协议都有RFC文档.在这里只对IP.TCP.UDP协议头做一个分析. 首先来看看在网络

  • 详情解析TCP与UDP传输协议

    目录 一.什么是 socket ? 二.Socket 编程的重要概念 ① IP 地址 ② TCP/IP 端口 ③ 协议 三.socket 编程的 API 接口 ① Linux 下的 socket API 接口 ② windows 下的 socket API 接口 ③ TCP.UDP 通信的 socket 编程流程图 四.socket 的应用实例 ① 基于 TCP 的本地客户端.服务端信息交互实例 ② 基于 UDP 的本地客户端.服务端信息交互实例 一.什么是 socket ? Socket 的英

  • java中TCP/UDP详细总结

    TCP/UDP:TCP主要是面向连接的协议,它包含有建立和拆除连接,保证数据流的顺序和正确性等功能. 每次对TCP中间的数据操作相当于对一个数据流进行访问.它最典型的特征就是那三次握手的建立连接过程.Server端所要做的事情主要是建立一个通信的端点,然后等待客户端发送的请求.典型的处理步骤如下: 1. 构建一个ServerSocket实例,指定本地的端口.这个socket就是用来监听指定端口的连接请求的. 2.重复如下几个步骤: a. 调用socket的accept()方法来获得下面客户端的连

  • 图文分析详解计算机网络TCP与UDP两者区别及原理

    目录 1.概念 2.从是否面向连接来看 2.1.UDP 2.2.TCP 3.从连接对象个数来看 3.1.UDP 3.2.TCP 4.从对应用报文的处理来看 4.1.UDP 4.2.TCP 发送方: 接收方: 5.从向其上层提供传输服务来看 5.1.UDP 5.2.TCP 6.从首部格式来看 6.1.UDP 6.2.TCP 7.总结 1.概念 UDP和TCP 在使用TCP/IP 体系结构的网络通信中,这两个协议的使用频率仅次于网际层的IP协议.TCP/IP 体系结构应用层中的某些协议需要使用运输层

  • Spring整合MyBatis(Maven+MySQL)图文教程详解

    一. 使用Maven创建一个Web项目 为了完成Spring4.x与MyBatis3.X的整合更加顺利,先回顾在Maven环境下创建Web项目并使用MyBatis3.X,第一.二点内容多数是回顾过去的内容 . 1.2.点击"File"->"New"->"Other"->输入"Maven",新建一个"Maven Project",如下图所示: 1.2.请勾选"Create a si

  • SQL Server 2017 Developer的下载、安装、配置及SSMS的下载安装配置(图文教程详解)

    最近开学了(线上教学),老师建议我们安装使用 SQL Server 来学习<数据库原理>课程,于是就有了这篇博客 哈哈 (๑¯∀¯๑) 然后因为 SQL Server 2019 是需要收费的,虽然网上有各种PJ方法,但是因为初学嘛,老师建议我们下载 SQL Server 2017 Developer,也就是下图中的这个也够用了(它这里写的是2019但一下载就是2017,这是光明正大的qipian我们嘛 (ノ`Д)ノ) 下载 下载传送门:SQL Server下载 进去页面可能需要时间略久一点,如

  • Docker开启远程安全访问的图文教程详解

    一.编辑docker.service文件 vi /usr/lib/systemd/system/docker.service 找到 [Service] 节点,修改 ExecStart 属性,增加 -H tcp://0.0.0.0:2375 ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375 这样相当于对外开放的是 2375 端口,当然也可以根据

  • 详解python tcp编程

    网络连接与通信是我们学习任何编程语言都绕不过的知识点. Python 也不例外,本文就介绍因特网的核心协议 TCP ,以及如何用 Python 实现 TCP 的连接与通信. TCP 协议 TCP协议(Transmission Control Protocol, 传输控制协议)是一种面向连接的传输层通信协议,它能提供高可靠性通信,像 HTTP/HTTPS 等网络服务都采用 TCP 协议通讯.那么网络通讯方面都会涉及到 socket 编程,当然也包括 TCP 协议. Network Socket 我

  • Java Spring循环依赖原理与bean的生命周期图文案例详解

    前言 Spring是如何处理循环依赖的,又是怎么做到,互相注入对方的proxy bean而不是raw bean的?现在就分析一下 一.循环依赖是什么 Spring中放入两个Service,分别是C1和C2,然后C1和C2又互为对方的成员变量.这种情况C1和C2就可以说是相互循环依赖了 二.源码图解 1. bean的主要生命周期图解 上图是一个没有循坏依赖的bean的主要生命周期节点,下图的循坏依赖可以结合该图解一起看 2.循环依赖图解 可以看到里面有一个很重要的逻辑: 当一个bean经过所有的步

  • Seata AT模式启动过程图文示例详解

    目录 背景 SeataDataSourceAutoConfiguration SeatAutoConfiguration HttpAutoConfiguration 小结 背景 为了了解Seata AT模式的原理,我通过源码解读的方式画出了Seata AT模式启动的图示: 如果是基于Springboot项目的话,项目启动的使用,一般约定会先查看spring.factories文件,配置了哪些类是需要自动装配的.Seata也是利用了这个约定,在项目启动的时候,默认会装配指定的类,以完成Seata相

  • Seata AT模式TM处理流程图文示例详解

    目录 TM的作用 源码分解 小结 TM的作用 我们根据源码解读画出了下图,该图示展现了TM在整个Seata AT模式的分布式事务中所起的作用: 从上图中可以看出,TM主要有两个作用: 开启分布式事务,以拿到XID作为分布式事务开启的标识:一定是从TC拿到XID,不是从调用方传递过来的XID: 根据所有RM的处理结果来决定是提交分布式事务还是回滚分布式事务: 转换成伪代码如下: try{ // 开启分布式事务 String xid = TM.beginGlobalTransaction(); //

  • Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解

    选择在PhpStorm集成apache服务器,下面是我自己的亲测的步骤. 1.如何修改apache默认端口 xampp apache默认的http访问端口是80 修改完成后在xampp中重启apache. 2.配置流程 打开Settings / Preferences 找到 Build, Execution, Deployment 选项,点击 Deployment 添加如下: 因为我们修改了默认端口80,所以这里一定要指明端口号.目录是/Applications/XAMPP/xamppfiles

  • java(jdk)环境变量配置(XP、win7、win8)图文教程详解

    对于初学java的同学来说,第一件事不是写hello world,而是搭建好java开发环境,下载jdk,安装,配置环境变量.这些操作在xp.win7.win8不同的操作系统里面配置不太一样,所以我来写一下在上面不同操作系统下是如何配置的. windos系统jdk6~8版本(含32位和64位)下载地址:http://pan.baidu.com/s/1jIslu78 XP 1. 安装JDK,安装过程中可以自定义安装目录等信息,例如我们选择安装目录为:C:\Program Files\Java\jd

随机推荐