TCP与UDP的区别

写在前面:
在面试的时候,经常会被问到TCP和UDP的区别,关于这个问题,我们能说出诸如以下的答案:

	TCP是面向连接的,UDP是面向无连接的。
	TCP是面向字节流的,UDP是面向数据报的。
	TCP保证数据的准确性,UDP可能产生丢包。
	TCP保证数据的顺序,UDP不保证。

但是,面试官听到的时候,肯定会深究这个问题,以及它的一些外延,所以我们有必要从底层来了解下TCP和UDP协议。

一、UDP(用户数据报协议)

我们首先来了解一下报文的头部:
UDP报头
从上面的图片中,我们可以了解到UDP的报文头部主要是 源端口和目的端口,通过端口在应用之间传输数据。

1、UDP的特点:
	程序结构简单
	面向无连接的,可以一对一传输,也可以一对多传输
	不管网络的拥塞情况,也不管丢包情况,还是会在两个端口之间进行数据传输。
2、UDP的应用场景:
直播: 直播平台对网络传播的速率、时延要求较高,可以容忍丢包,但产生卡顿是观众所接受不了的,所以使用基于UDP的视频传输协议。

二、TCP (传输控制协议)

要理解TCP的特点,我们先来了解一下TCP报文头部,如下所示:
TCP 报文头部

  • 源端口 和目的端口 加上源IP 和 目的IP 便可以组成唯一的TCP连接。
  • 数字序号:主要是为了确认包的乱序问题,给每个包进行编号,以便知道它们的顺序问题。
  • 确认序号:确认包是否被接收方收到,如果没有收到,就重新发送包直至收到,这样是为了有效的控制丢包问题。
  • 状态位: 主要有 六个状态位,用来表示发送方和接收方状态的变更。
  • 窗口大小: 通信双方都声明一个窗口大小,来表示自己当前处理能力的大小。
通过以上的解析,我们可以很清楚的了解学习TCP应该关注:
  • 顺序问题(每个包都有自己的序号)
  • 丢包问题(接收方对每个包都会返回一个确认)
  • 流量控制(在接收方来声明一个滑动窗口,来表示缓存的大小)
  • 拥塞控制(在发送方来声明一个 拥塞窗口,来表示网络性能的大小)

由此可以看出来: TCP是可靠传输。

三、TCP的三次握手和四次挥手。

关于这个问题,我之前专门写过这个,链接如下:三次握手与四次挥手

四、滑动窗口和拥塞窗口

1、什么是滑动窗口?为什么会产生滑动窗口呢?
----滑动窗口协议是传输层进行流量控制的方法,发送方会根据接收方缓存区的大小来调整自己发送的数据(缓存区越大说明网络上的吞吐量越大),这种措施便被称为流量控制。
2、当缓存区的数据溢出,应该怎么处理呢?
----当缓存区的缓存数据溢出时,滑动窗口的值会被设置成一个更小的值发送给发送方,此时,发送方接受到的滑动窗口大小为0,发送方停止发送数据,这时发送方过了超时重传的时间,发送一个窗口探测包(数据端只有一个字节),来获取最新滑动窗口的信息。
3、什么是拥塞窗口?为何产生?
----在能够承受现有网络负荷 的情况下,防止过多的数据注入到网络链路中,使得网络中的路由器和链路不至于过载,这个过程被称为拥塞控制。拥塞控制是一个全局性过程,设计路由器、主机等所有可能影响网络传输的因素。
4、与拥塞窗口有关的四个算法.
发送方维持一个拥塞窗口的状态量,拥塞窗口的大小取决于网络的拥塞程度,且是动态变化的。一般来说,只要网络没有出现拥塞,拥塞窗口就会变得大一些,相反,一旦出现拥塞,拥塞窗口就会急剧减小,以确保有足够的时间处理拥塞。
  • 慢启动:在刚开始发送数据的时候,不能将所有的数据发送出去,因为我们并不知道拥塞窗口的大小,所以我们会先嗅探一下,由小到大的增加发送窗口,即:由小到大的增加拥塞窗口,每收到对一段报文的确认后,逐步增加拥塞窗口的大小,使得发送方每段数据注入到的网络速率合理化。
  • 拥塞避免:在每一个RTT(往返时延)中,使拥塞窗口的大小呈线性增长。

注: 在慢启动和拥塞避免之间,存在一个门阀值,当拥塞窗口 < 门阀值 时,执行慢启动算法;当拥塞窗口 > 门阀值时,执行拥塞避免算法; 当出现拥塞的时候,将门阀值设置为拥塞时发送窗口的一半,拥塞窗口设置为初始值,这样的话能够更加减少分组的数量,路由器也有足够的时间将链路上的分组分发出去。

  • 快重传:首先要求接受方每次收到乱序的报文段时,就立即发出重复确认,而不是等自己发送数据的时候才捎带确认。
  • 举个例子: 现在有一段报文段为a,b,c,d,e,f,发送方收到了接收方确认,接着假定接受方收到了d,却没有收到c,接收方不能对d进行确认,因为d是失序报文,依据快重传,应该发送重复确认来使发送方知道没有收到c,而不是等带超时重传。接着发送e,f,又要发送对b的重复确认,快重传规定:一旦收到三个重复确认,就立即重传缺失的报文段,使用快重传可以提高整个网络的吞吐量。

  • 快恢复
  • 5、流量控制和拥塞控制的异同:
    相同:都是为了能都提高网络的性能
    不同:流量控制---在TCP连接上实现流量控制,仅仅限于接收方和发送方,即端到端。
              拥塞控制---处理拥塞现象,在能够承受现有网络负荷的基础上,考虑所有和降低网络传输有关的因素。


    以上是最近关于网络协议的一些复习总结,如果有什么讨论的,欢迎留言,最后,祝大家工作顺利 。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值