TCP与UDP

作者: fanren | 来源:发表于2021-06-17 09:44 被阅读0次

一、TCP与IP网络模型

计算机与网络设备之间要互相通信,双方就必须基于相同的方法。比如,如何探测到通信目标,由哪一方发起通信,使用哪种语言等,这些通信规则,必须提前规定好;
不同的硬件、操作系统之间的通信,都遵循了一种规则,我们把这种规则成为协议(protocol)。
而TCP/IP模型是互联网的基础,它是一系列网络协议总称。这些协议可以划分为四层:

  • 链路层:负责封装和解封装IP报文,发送和接收ARP、RARP报文等;
  • 网络层:负责路由,把分组报文发送给目标网络或主机;
  • 传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文;
  • 应用层:负责向用户提供应用程序,比如HTTP、FTP等;

在网络体系结构中,网络通信的建立必须在通信双方的对等层进行,不能交错进行;
在整个数据传输过程中,数据在发送端时,经过各层时都要附加上相应层的协议头和协议尾(仅数据链路层需要封住协议尾),也就是对数据进行协议封装,以标识对应层所用的通信协议;

二、UDP

UDP全称用户数据报协议,在网络层,它与TCP协议一样用于处理数据包,是一种无连接的协议;
UDP处在OSI模型中的传输层;
UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点。也就是说,当报文发送之后,是无法得知其是否完整到达
特点:

1. 面向无连接

UDP发送数据前,不会通过握手建立连接(TCP需要),想发数据就发数据,只是当做一个数据的搬用工,不会对数据进行任何的拆分和拼接操作;

  • 在发送端,应用层将数据传递给传输层的UDP协议,UDP只会给数据增加一个协议头(标识是UDP),然后就传递给网络层
  • 在接收端,网络层将数据传递给传输层,UDP只去掉了IP报文头,就传递给应用层了,不会做任何拼接操作;

2. 有单播、多播、广播功能

UDP不止支持一对一的传输方式,同样支持一对多,多对一的方式;

3. UDP是面向报文的

发送方的UDP对应用程序传下来的报文,在添加协议头后,就交给IP层(网络层);
UDP对应用层的报文,既不合并,也不拆分,而是保留这些报文的辩解
因此,应用程序必须选择合适大小的报文;

4. 不可靠性

  • 首先体现在无连接上,通信都不需要建立连接,想发就发;
  • 并且受到什么数据就传递什么数据,不会备份数据,发送数据也不关心对方有没有受到;
  • 网络环境时好时坏,但是UDP没有拥塞控制,一直会以恒定的数据发送数据,即使网络条件不好,也不会对发送速率进行调整,这样在网络不好的情况下,可能会导致丢包;

5. 头部开销小,传输报文是很高效的;

UDP头部包含以下数据:

  • 两个十六位的端口号,分别为源端口和目标端口
  • 整个数据报文的长度
  • 整个数据报文的校验和(IPv4可选字段),该字段用于发现头部信息和数据中的错误;
    因此UDP的头部开销小,只有八个字节,相比TCP至少有二十个字节,在传输数据报文是高效的;

三、TCP
当一台计算结想要与另一台计算机通讯时,两台计算机之间的通信需要畅通而且可靠,这样才能保证收发数据的准确;
例如:当你想查看电子邮件时,希望完整且按顺序查看网页,而不丢失任何内容;当你下载文件时,希望获得完整的文件,而不是文件的一部分。这是就用到了TCP;
TCP协议全称传输控制协议,是一种面向连接的、可靠地、基于字节流的传输层通信协议,由IETF的RFC793定义。
TCP是面向连接的、可靠的流协议;

1. TCP连接过程

三次握手

  • 第一次:客户端向服务端发送连接请求报文段,该报文段中包含自身的数据通讯初始序号,请求发送后,客户端便进入SYN-SENT状态;
  • 第二次:服务端收到连接请求报文段后,如果同意连接,则会发送一个应答,该应答中也会包含自身的数据通讯初始序号,发送完成后便进入SYN-RECEIVE状态。
  • 第三次:当客户端收到连接同意的应答后,还需要向服务端发送一个确认报文,客户端发完这个报文后便进入ESTABLISHED状态,服务端收到这个应答后,也进入ESTABLISHED状态,此时连接建立成功。

2. TCP断开连接过程

四次握手

  • 第一次:当客户端认为数据发送完成, 则需要向服务端发送释放请求
  • 第二次:服务端收到释放请求时,会告诉应用层要释放TCP连接,然后会发送ACK包,并进入CLOSE_WAIT;此时表明客户端到服务端的连接已经释放,服务端不会再接受客户端的数据了。
  • 第三次:服务端如果此时还有没发完的数据,则会继续发送;发送完毕后,会向客户端发送连接释放请求,然后服务端进入LAST-ACK状态;
  • 第四次:客户端收到释放请求后,向服务端发送确认应答, 此时客户端进入了TIME-WAIT,这个状态会持续2MSL(最大段生存期,指报文段在网络中生存时间,超时会被抛弃)时间,若该时间段内没有服务端的重发请求的话,就进入CLOSED状态;当服务端收到确认应答后,也进入CLOSED状态;

3. TCP协议的特点

  • 面向连接
    指发送数据之前必须在两端建立连接,建立连接的方法是“三次握手”,这样能建立可靠的连接
  • 仅支持单播传输
    每条TCP连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式;
  • 面向字节流
    TCP不像UDP那样一个个报文独立地传输,而是在不保留报文边界的情况下,以字节流方式进行传输;
  • 可靠传输
    TCP为了报站报文传输的可靠性,就给每一个包一个序号,同时序号也保证了传送到接收到实体的包的按序接受。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK),如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传;
  • 提供拥塞控制
    当网络出现拥塞的时候,TCP能投减小往网络注入数据的速率和数量,缓解拥塞
  • TCP提供双工通信
    TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。

四、TCP和UDP比较

UDP TCP
是否连接 无连接 面向连接
是否可靠 不可靠传输,不使用流量控制和拥塞控制 可靠传输,使用流量控制和拥塞控制
连接对象个数 支持一对一,一对多,多对一和多对多交互通信 只能是一对一通信
传输方式 面向报文 面向字节流
首部开销 首部开销小,仅8字节 首部最小20字节,最大60字节
适用场景 适用于实时应用(IP电话、视频会议、直播等) 适用于要求可靠传输的应用,例如文件传输

相关文章

  • iOS 网络相关面试题

    问题:TCP、UDP TCP/UDP 传输层协议 ||—— UDP:用户数据报协议 TCP与UDP的区别: 问题...

  • 2018-09-19

    网络面试集 一、TCP/UDP 1、UDP与TCP的区别 TCP(TransmissionControl ...

  • TCP 与 UDP

    TCP 与 UDP(主要说TCP)TCP/UDP端口号TCP/UDP端口号TCP连接的建立TCP连接的建立发送se...

  • TCP和UDP的最完整的区别

    TCP UDP TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3.UDP...

  • 网络

    一、TCP 二、UDP 三、TCP与UDP的区别 四、Socket

  • TCP与UDP详解

    1、TCP与UDP概述 TCP (Transmission Control Protocol)和UDP(User ...

  • TCP和UDP的最完整的区别

    TCP UDP TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3....

  • TCP和UDP的最完整的区别

    TCP UDP TCP与UDP基本区别 1.基于连接与无连接 2.TCP要求系统资源较多,UDP较少; 3....

  • TCP/IP

    引用 一文搞懂TCP与UDP的区别 TCP/UDP协议详解... TCP基础特性* TCP 1、 TCP特性: T...

  • Netty知识汇总

    1、TCP、UDP的区别? TCP与UDP区别总结: 1)、TCP面向连接(如打电话要先拨号建立连接);UDP是无...

网友评论

      本文标题:TCP与UDP

      本文链接:https://www.haomeiwen.com/subject/ohtaihtx.html