传输层——详解UDP和TCP的区别

首先我们看一下UDP和TCP的特点:
UDP:无连接 、不可靠、面向数据报、没有发送缓冲区
TCP:面向连接、可靠、面向字节流、有发送缓冲区

1 无连接和面向连接
UDP:“无连接”
在网络中使用UDP协议时,只需要提供对端的IP地址和端口号PORT就可以与对端进行通信,并不需要和对端建立连接
TCP:“面向连接”“三次握手、四次挥手”
在网络中使用TCP协议时,不仅需要对端的IP地址和端口号PORT,还需要通过“三次握手”建立连接,“四次挥手”断开连接

什么是连接?以打电话来举个例子
面向连接和无连接
2 不可靠和可靠
我们可以先看一下UDP和TCP协议的报头信息
这里写图片描述
UDP的报头中只有校验和,但是校验和只能检查报头信息是否出错不足以保证协议的可靠性。
TCP的报头中添加了很多字段来保证协议的可靠性,如:序号、确认序号、窗口大小
UDP:不可靠。UDP没有提供使数据可靠传输的机制
TCP:可靠。
(1)确认应答机制和超时重传机制;
可以通过序号和确认序号,提供确认应答机制和超时重传机制处理在传输过程中的丢包问题,同时可以保证数据的按序到达,并且能够达到去除重复数据的效果。
(2)流量控制机制:通过窗口大小显示自己接收缓冲区的大小,使对端在发送数据时控制速率,防止对端发送速率过大而自己的接收能力不足而导致的数据丢包。
(3)拥塞避免机制:避免发送效率过大而导致的网络拥塞,先发送少量数据探测网络状况。
同时TCP为提升自身性能,还提供了滑动窗口、快重传、延迟应答、捎带应答机制。

3 面向数据报和面向字节流
UDP:面向数据报
在发送和接收数据时必须一个报文一个报文的进行,不能发送/接收半个报文
TCP:面向字节流
在发送和接收数据时不必要一个报文一个报文的进行,可以发送/接收半个报文。由于TCP是面向字节流的,也因此会导致粘包问题(解决方式见:传输层——TCP协议

4 没有发送缓冲区和有发送缓冲区
UDP:没有发送缓冲区;由于UDP是不可靠的,不需要将发送的数据保存至发送缓冲区再移交给内核(这样当数据丢包时,发送缓冲区的内容会再次向内核发送),而是直接调用sendto发送给内核
TCP:有发送缓冲区

4 编写程序
编写UDP服务器程序步骤:
(1)创建套接字socket;
(2)填充本地套接字;
(3)绑定端口号bind;
(4)进行数据传输:接收数据:recvfrom,发送数据:sendto
编写TCP服务器程序步骤:
(1)创建套接字socket;
(2)填充本地套接字;
(3)绑定端口号bind;
(4)将套接字设置为监听状态listen;
(5)获得新连接accept;
(6)进行数据传输:读数据:read,写数据:write

5 适用场景
为什么UDP不可靠但是没有被TCP完全替换呢?
TCP虽然可靠,但是为了维护它的可靠性,需要花费大量的成本和资源,从而可能导致TCP的性能受损,速度降低
UDP虽然不可靠,但是它不需要花费其余资源,只是将自己的全部精力关注在数据的收发上,所以UDP的成本小且速度快
在视频/图片传输的过程中,一般丢一两帧画面是没有什么问题了,所以可以采用UDP这种传输协议。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值