【网络】TCP和UDP的区别

1.TCP/IP协议是什么?

TCP/IP协议不是一个协议,而是由两个协议组成的,中文翻译为:传输层控制协议/互联网络协议,就是由底层的IP协议和TCP协议组成的。

1.1 IP协议:

首先我们来了解一下什么是IP协议,IP协议翻译过来就是因特网协议。

IP协议在生活中就可以理解为:我们在进行运货的时候,都是要把货物包装成一个个纸箱或者集装箱之后再进行运输,在网络的传输过程中也是一样的。IP协议规定了数据传输的基本单元和格式。比如比作货物运输,IP协议规定了货物打包时的包装箱尺寸和包装的程序,除此之外,IP协议还定义了数据包的递交办法和路由选择。同样用货物的运输作比喻,IP协议规定了货物的运输方式和运输路线。

1.2 TCP协议:

传输层的重要协议,IP协议已经规定了数据传输的主要内容,在IP协议中定义的传输是单向的,也就说发出去的货物对方有没有收到,这个我们是不知道的。所以对于一些比较重要的货物,我们想要知道对方有没有真正的收到,要对方给我们一个响应,所以,TCP协议提供了可靠的面向对象的数据流传输服务的规则和约定。也就是,在TCP模型中,对方给你发送一个数据包,你要给对方发送一个确认数据包,通过这种机制来提供可靠连接。

2.UDP

首先要明白TCP和UDP都是传输层的两个协议。
UDP的头:
在这里插入图片描述
可以看出,UDP只有端口号,其他的基本都没有了。如果没有这两个端口号,数据就不知道该发给哪个应用了。

UDP的特点:
UDP传输的过程类似于寄信(只要知道地址就可以直接进行寄信):
无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;
不可靠:没有确认机制,没有重传机制;如果因为网络故障导致该段无法发送给对方,UDP协议层也不会给应用层返回任何错误信息;
面向数据报:不能够灵活的控制读写数据的次数和数量。也就是说,应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

基于UDP的这些特点,所以可以用来处理一些没那么难的项目,并且就算失败的也能接收。

UDP的缓冲区:
UDP没有真正意义上的发送缓冲区,调用sendto会直接交给内核,由内核将数据报传给网络层协议进行后续的传输动作。
UDP具有接收缓冲区,但是这个缓冲区不能保证收到的UDP的数据报的顺序和发送的UDP的顺序一致,如果缓冲区满了,再到达的UDP数据报就会被抛弃。

UDP的应用场景:

  • 直播。直播对实时性的要求比较高,宁可丢包,也不要卡顿,所以很多直播应用都是基于UDP实现的。

  • 实时游戏。它的特点也是对实时性要求比较高,在这种情况下,采用自定义的可靠的UDP协议,自定义重传策略,能够把网络产生的延迟降到最低。

  • 物联网。对于实时性的要求也特别高。

基于UDP的应用层协议:

NFS:网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议
BOOTP:启动协议(用于无盘设备启动)
DNS:域名解析协议

3. TCP

TCP:传输控制协议,人如其名,对数据的传输进行了严格的控制。

3.1 TCP的数据格式:

在这里插入图片描述
源/目的端口号:表示数据是从哪个进程来,到哪个进程去。
32位序号/32位确认号:主要是为了解决乱序问题。
4位TCP报头长度:表示该TCP头部有多少个32位bit(有多少个4个字节)
6个标志位:URG:紧急指针是否有效
SYN是发起一个链接,ACK是回复,RST是重新连接,FIN是结束连接。
16位校验和:发送端填充,CRC检验,接收端检验不通过,则认为数据有问题,检验包括TCP首部和TCP数据部分
16位紧急指针:标识哪部分数据为紧急数据

3.2 对于TCP协议的了解,还应关注以下问题:

首先要理解为什么TCP协议这么复杂?因为TCP协议既要保证可靠连接,又要尽可能地提高性能。

保证可靠性:

  • 校验和
  • 序列号(按序到达)
  • 确认应答
  • 超时重发
  • 连接管理
  • 流量控制
  • 拥塞管理

提高性能

  • 滑动窗口
  • 快速重传
  • 延迟应答
  • 捎带应答

其他

  • 定时器(超时重传定时器、保活定时器、TIME_WAIT定时器等)

首先是TCP的连接问题,因为在传输层,客户端首先要与服务端建立连接,就是三次握手阶段。

3.3 三次握手

在这里插入图片描述

3.4 四次挥手:

在这里插入图片描述

3.5 确认应答机制

发送时:携带确认序号;
确认时:携带确认号。
序号+确认号
在这里插入图片描述

3.6 超时重传机制

没有收到确认应答的情况:
(1)数据报丢了;

在这里插入图片描述
(2)ACK确认应答数据报丢了;
在这里插入图片描述

3.7 滑动窗口

为什么要使用滑动窗口呢?
像下图中这样一条一条的发送数据时,中间会有一段时间主机是处于空闲的,比较浪费资源,所以为了解决效率问题,所以就采用滑动窗口来解决这种问题。

这种传输方式属于串行传输,效率低;
滑动窗口采用并行的方式传输数据,类似多线程的方式,同时可以发送多条数据。
在这里插入图片描述
并行传输数据方式:
窗口大小:无需等待确认应答就可以发送数据的最大值。

这里存在一个发送缓冲区,记录数据的信息,只有确认应答过的数据,才能从发送缓冲区删掉。
窗口越大,网络吞吐量越高。
在这里插入图片描述
利用滑动窗口发送数据的过程出现丢包,分两种情况讨论:
(1)数据包已经到达,ACK被丢了;
像这种确认应答丢了,没有关系,可以根据最后一个确认应答的序号,像图中的确认号,下一个是601,则代表当前的所有包都已经全部接受到了。
在这里插入图片描述

(2)数据包直接丢了;
在这里插入图片描述

3.8 流量控制

接收端接受能力有限,所以要告诉发送端我们的接受能力,类似于景区卖票,酒店订房,如果人满为患,就停止卖票,人太多,就限制卖票的数量。
流量控制会采用让接收端主动丢包的操作。
流量控制窗口:基于TCP报文中窗口大小字段来设置,影响到发送端窗口大小。

3.9 拥塞控制

发送端网络状态不明的情况下,贸然发送大量的数据包,会造成网络拥堵,所以要先发送少量数据来探探路。
在这里插入图片描述

3.10 延迟应答

也是为了解决效率的机制。

接收端接收到数据,马上响应ACK,流量控制窗口(接收端缓冲区空余空间有限)就会比较小。

猜你喜欢

转载自blog.csdn.net/m0_46551861/article/details/114755917
今日推荐