TCP和UDP协议

1、TCP协议

TCP是面向连接的可靠的基于字节流的传输协议。

  • 面向连接: 一定是“一对一”才能连接,TCP协议无法实现一个主机向多个主机发送消息,即一对多是无法实现的
  • 可靠的: 无论网络链路中出现怎样的链路变化,TCP都能保证一个保文一定能到达接收端。
  • 基于字节流:
    • 无论网络链路中出现怎样的链路变化,TCP都能保证一个保文一定能到达接收端。
    • 同时TCP的报文是有序的,当接收方先接收到了后一个报文,前一个报文没有收到时,那么也不能交给应用层去处理。
    • 当TCP接收到重复的TCP报文时,会自动丢弃重复的报文,只保留一个。

1.1 TCP协议段

在这里插入图片描述

  • 源端口号和目标端口号: 表示进程从哪里来到哪里去
  • 序列号: 在建立连接时由计算机生成的随机数作为其初始值,通过 SYN 包传给接收端主机,每发送一次数据,就「累加」一次该「数据字节数」的大小。用来解决网络包乱序问题。
  • 确认应答号: 发送端向接收端发送数据报文后,发送端期待接收到数据的序列号,发送端收到这个确认应答以后可以认为在这个序号以前的数据都已经被正常接收。用来解决丢包的问题。
  • 6位标志位:
    • URG:紧急指针是否有效
    • ACK:(确认为)确认号是否有效
    • PSH:提示接收端应用程序立刻从 TCP 缓冲区把数据读走
    • RST:对方要求重新建立连接;我们把携带 RST 标识的称为 复位报文段
    • SYN:(同步位)请求建立连接;我们把携带 SYN 标识的称为 同步报文段
    • FIN:通知对方,本端要关闭了,我们称携带 FIN 标识的为 结束报文段

1.2 TCP原理

1.2.1 确认应答机制(安全机制)

确认应答机制是发送端发送数据给接收端,接收端收到数据后给发送端发送一个应答报文,此时发送端便知道接收端已经接收哪些序号的数据,下一次便知道从哪些数据开始发。

每一个确认应答ACK都带有对应的确认序列号,意思是告诉发送端,我已经收到了哪些数据,下一次你从哪里开始发
在这里插入图片描述

1.2.2 超时重传机制(安全机制)

网络发送数据时,总是会出现各种错综复杂的情况,不一定都会出现确认应答机制那样传输数据,总会出现数据包丢失的情况,因此便有了超时重传机制。

超时重传机制使用在以下场景:

  1. 数据包丢失
  2. 确认应答ACK丢失

在这里插入图片描述

如果一次超时重传失败,仍然得不到确认应答,此时会进行第二次重传,依次类推,以指数级递增,累计到一定次数重传失败,TCP认为网络或者对端主机出现严重问题,会强制断开连接。

1.2.3 连接管理机制(安全机制)

在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。因此TCP在传输数据前必须要先进行三次握手连接,结束传输后进行四次挥手断开连接。

三次握手流程:
在这里插入图片描述

四次挥手流程:
在这里插入图片描述

1.2.4 滑动窗口机制(效率机制)

正常情况下,对每一个发送的数据段,都要给一个ACK确认应答。收到ACK后再发送 下一个数据段。这样做有一个比较大的缺点,就是性能较差,尤其是数据往返的时间较长的时候。

因此就可以使用滑动窗口机制,那么我们一次发送多条数据,就可以大大的提高性能(其实是将多个段的等待时间重叠在一起了)。

下图就是使用滑动窗口进行传输数据,同时将四个段的数据进行发送。
在这里插入图片描述

  1. 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值。上图的窗口大小就是 4000个字节(四个段)。
  2. 发送前四个段的时候,不需要等待任何 ACK ,直接发送
  3. 收到第一个 ACK 后,滑动窗口向后移动,继续发送第五个段的数据;依次类推;
  4. 操作系统内核为了维护这个滑动窗口,需要开辟 发送缓冲区 来记录当前还有哪些数据没有应
    答;只有确认应答过的数据,才能从缓冲区删掉;
  5. 窗口越大,则网络的吞吐率就越高
1.2.4 流量控制机制(效率机制)

接收端接收处理的数据是有限的,当发送端发送的数据超过接收端处理数据的极限时,就会造成丢包,继而引起丢包重传等等一系列连锁反应。

  1. 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小” 字段,通过ACK端通知发送端;
  2. 窗口大小字段越大,说明网络的吞吐量越高;
  3. 接收端一旦发现自己的缓冲区快满了,就将窗口大小设置成一个更小的值通知给发送端;
  4. 发送端接受到这个窗口之后,就会减慢自己的发送速度;
  5. 如果接收端缓冲区满了,就会将窗口置为0;这时发送方不再发送数据,但是需要定期发送一个窗口探测数据段,使接收端把窗口大小告诉发送端。
1.2.5 拥塞控制机制(安全机制)

在这里插入图片描述

  • 当TCP开始启动的时候,慢启动阈值等于窗口最大值;
  • 在每次超时重发的时候,慢启动阈值会变成原来的一半,同时拥塞窗口置回1;
  • 少量的丢包,我们仅仅是触发超时重传;大量的丢包,我们就认为网络拥塞;
  • 当TCP通信开始后,网络吞吐量会逐渐上升;随着网络发生拥堵,吞吐量会立刻下降;
  • 拥塞控制,归根结底是TCP协议想尽可能快的把数据传输给对方,但是又要避免给网络造成太大压力的折中方案。
    在这里插入图片描述

在这里插入图片描述

2、UDP协议

UDP协议是无连接的不可靠的面向数据报的传输协议

  • 无连接: 知道对端的IP和端口号就直接进行传输,不需要建立连接。
  • 不可靠的: 没有任何安全机制,即使UDP发送的数据报在网络阻塞中丢失了,也不会给应用层发送任何信息,因此应用层也无法接收到任何消息。
  • 面向数据报: 应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并。

举例:用 UDP 传输 100 个字节的数据:如果发送端发送100个字节,那接收端也必须接收100个字节,而不能循环接收10次

3、TCP与UDP的区别

TCP是面向连接的、可靠性的、基于字节流的传输控制协议。

UDP是无连接的、不可靠的、数据报传输的传输协议。

TCP协议多用于可靠性传输,要求精度高的场景,例如:文件传输、重要状态更新等场景。

UDP协议相对于来说就很简单,简单到只负责发送数据包,不保证数据包能够准确的发送到对方接收端的手中。

UDP实时性相对更好传输效率也更高。应用场景:用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播;

UDP实时性相对更好传输效率也更高。应用场景:用于对高速传输和实时性要求较高的通信领域,例如,早期的QQ,视频传输等。另外UDP可以用于广播;

  • 18
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值