认识UDP和TCP
Posted anduodefeng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了认识UDP和TCP相关的知识,希望对你有一定的参考价值。
一、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.不可靠性
- 通信不需要建立连接,想发就发,肯定不可靠;
- 收到什么数据就传递什么数据,并且也不会备份,发送数据方也不关心对方是否正确接收到数据;
- 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的主要内容,如果未能解决你的问题,请参考以下文章