码迷,mamicode.com
首页 > 其他好文 > 详细

认识UDP和TCP

时间:2020-06-12 12:34:29      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:封装   情况下   时序   字段   好的   拥塞控制   三次   字节   三次握手   

一、TCP/IP网络模型

TCP/IP是互联网各类协议族的总称,比如:TCP、UDP、IP、FTP、HTTP等都属于TCP/IP族内的协议。

常用的网络分层模型:

  链路层:负责封装和解封装IP报文,发送和接收ARP/RARP报文等;

  网络层:负责路由以及把分组报文发送给目标网络或主机;

  传输层:负责对报文进行分组和重组,并以TCP或UDP协议格式封装报文;

  应用层:负责向用户提供应用程序,比如:HTTP、FTP、SMTP等;

技术图片

 

 

 二、UDP

UDP全称是用户数据报协议,在网络中它与TCP协议一样处理数据包,是一种无连接的协议。它有以下几个特点:

1.面向无连接的。

UDP不需要和TCP一样在发送数据前进行三次握手建立连接,想发送数据就发送数据,不关心对方是否能收到;并且它也不会对数据报文进行任何拆分和拼接操作。

具体步骤:

  • 发送端,应用层将数据传递给传输层的UDP协议,UDP也只会给数据加一个UDP头,标识下是UDP协议,然后就传递给网络层了。
  • 接收端,网络层将数据传递给传输层,UDP只是去除IP报文头就传递给应用层,不会有其他的任何拼接操作了。

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

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

3.UDP是面向报文的

UDP对应用层传输过来的报文,只是加一个头部标识,就向下交付IP层了。UDP对这些报文不做任何处理。因此,应用程序需要选择合适的报文大小;

4.不可靠性

  1. 通信不需要建立连接,想发就发,肯定不可靠;
  2. 收到什么数据就传递什么数据,并且也不会备份,发送数据方也不关心对方是否正确接收到数据;
  3. UDP没有拥塞控制,网络好或者不好,都是以一个恒定的速率发送数据,所以在网络不好的时候,会存在丢包的情况,但同时,这样的话,通信效率很高,实时性强,在一些对实时性要求较高的场景中(如:电话会议,视频,直播等)就会使用UDP,而不是TCP。

5.头部开销小,传输数据报文时效性很高

技术图片

UDP 头部包含了以下几个数据:

  • 两个十六位的端口号,分别为源端口(可选字段)和目标端口
  • 整个数据报文的长度
  • 整个数据报文的检验和(IPv4 可选 字段),该字段用于发现头部信息和数据中的错误

因此 UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。

三、TCP

TCP协议全称是传输控制协议是一种面向连接的、可靠的、基于字节流的传输层通信协议,由 IETF 的RFC 793定义。TCP 是面向连接的、可靠的流协议。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。

1. TCP连接过程(三次握手)

技术图片

  • 第一次握手,client端发送请求给server端,会发送一个自身序列标识号(SYN=1,seq=x),然后,client变成SYN-SENT状态;
  • 第二次握手,server端收到client端请求后,也会发送一个应答消息(SYN=1,ACK=1,seq=y,ack=x+1),然后,server变成SYN-RCVD状态;【可以确认client发送信号没问题,server接收信号没问题】
  • 第三次握手,client端收到server端请求后,发送确认消息ACK(ACK=1,seq=x+1,ack=y+1),然后,server、client都变成ESTAB-LISHED状态;【server发送信号没问题,client接收信号没问题】

上面的过程ACK,SYN都是标识位,真正的确认或者发送数据都是seq、ack等。

2.TCP断开连接(四次挥手)

技术图片

 

  • 第一次挥手,client认为数据发送完成,向server传递FIN包,标识结束发送请求,要求释放连接;
  • 第二次挥手,server接收到要求释放连接的请求后,给client发送ACK包,server进入CLOSE_WAIT状态,此时server就不再接收client发送的请求了,但是server还是可以发请求给client的,因为可能client之前发送的请求还没有处理完;
  • 第三次挥手,server处理完所有的client发送的请求,给client发送一个FIN包,然后server进入LAST_ACK状态;
  • 第四次挥手,client收到server最后发送的FIN包之后,给server发送一个确认应答ACK,此时client进入TIME_WAIT状态,该状态持续2MSL(最大段生存期,指报文段在网络中生存的时间,超时会被抛弃)时间,若该时间段内没有 server 的重发请求的话,就进入 CLOSED 状态。当 server收到确认应答后,也便进入 CLOSED 状态。

3.TCP协议的特点

  • 面向连接

    面向连接,是指发送数据之前必须在两端建立连接。建立连接的方法是“三次握手”,这样能建立可靠的连接。建立连接,是为数据的可靠传输打下了基础。

  • 仅支持单播传输

每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。

  • 面向字节流

TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。

  • 可靠传输

    对于可靠传输,判断丢包,误码靠的是TCP的段编号以及确认号。TCP为了保证报文传输的可靠,就给每个包一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。

  • 提供拥塞控制

当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞

  • TCP提供全双工通信

TCP允许通信双方的应用程序在任何时候都能发送数据,因为TCP连接的两端都设有缓存,用来临时存放双向通信的数据。当然,TCP可以立即发送一个数据段,也可以缓存一段时间以便一次发送更多的数据段(最大的数据段大小取决于MSS)

四、TCP和UDP的比较

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

 

 

 

 

 

 

 

 

总结:

  • TCP向上层提供面向连接的可靠服务 ,UDP向上层提供无连接不可靠服务。
  • 虽然 UDP 并没有 TCP 传输来的准确,但是也能在很多实时性要求高的地方有所作为。
  • 对数据准确性要求高,速度可以相对较慢的,可以选用TCP。

认识UDP和TCP

标签:封装   情况下   时序   字段   好的   拥塞控制   三次   字节   三次握手   

原文地址:https://www.cnblogs.com/anduodefeng/p/13098585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!