TCP 和 UDP 的区别

从宏观层面来说,TCP 和 UDP 有以下区别:

  • TCP 面向连接,UDP 面向无连接
  • TCP 可靠,UDP 不可靠
  • TCP 传播效率慢、UDP 传输效率快
  • TCP 以流格式传输数据、UDP 以数据报格式
  • TCP 所需系统资源多、UDP 所需系统资源少
  • TCP 只支持点对点,UDP 支持一对一,一对多、多对一和多对多
  • TCP、UDP 数据段头部大小不同,TCP 占 20 ~ 60 字节,UDP 占 8 字节

所谓面向连接是说,发送数据前需要建立连接,TCP 需要三握,而 UDP 不需要

TCP 通过一系列机制(连接管理、检验和、序列号,确认号、流量控制、拥塞控制、ARQ 协议、超时重传等)机制保证可靠性,而 UDP 只尽最大可能交付,不保证可靠性

UDP 不保证可靠性的主要原因有以下几条:

  1. UDP 面向无连接,不经过三次握手直接发送数据
  2. UDP 发送方没有缓冲区,只有接收方缓冲区,只要有数据就发送,如果接收方缓冲区满就丢失
  3. UDP 没有流量控制
  4. UDP 没有重传机制

UDP 由于简单、传输效率快的原因,在越来越多如实时游戏,即时聊天等场景替代 TCP。造成这种现象的原因主要有三点:

  1. 科技越来越发达,网速越来越快。网络环境的改善间接降低了 UDP 的丢包率,如果使用应用层重传,还能保证可靠性
  2. TCP 为了保证可靠性,采用了复杂的拥塞控制算法,建立了繁琐的握手、挥手过程,而且内置在协议栈中很难改进效率
  3. TCP 一旦丢包会将后续的包先缓存起来,使用快重传回复发送方,等到丢失数据段补齐后再向下传输,这就导致延时越来越多、基于 UDP 自定义重传机制,能够把丢包产生的延时降到最低,尽可能减少网络问题对实时性的影响

TCP 头部结构如下:
TCP 头
也就是说,TCP 头部最少占用 20 字节(每行4字节,前5行必须有)

UDP 头部结构如下:
UDP 头
UDP 只占 8 字节,相对而言,UDP 的资源利用率( 数据量 / 传输数据总量 )更高


最后再简单对比两者的开发区别,其中 TCP 如下:

服务器:
1. 调用 socket() 函数创建 socket 套接字,设置 socket 属性
2. socket 调用 bind() 函数绑定 IP 地址和 端口
3. socket 调用 listen() 函数开启监听
4. socket 调用 accept() 函数和客户端建立连接
5. socket 调用 read()、write() 函数收发数据
6. 调用 closesocket() 函数关闭连接

客户端:
1. 调用 socket() 函数创建 socket 套接字,设置 socket 属性
2. socket 设置要连接的 IP 地址和端口
3. 调用 connect() 函数连接服务器
4. 调用 read()、write() 函数收发数据
5. 关闭 socket 连接

UDP 相比 TCP 简单了很多,它的过程如下:

服务端:
1. 调用 socket() 函数创建 socket 套接字,设置 socket 属性
2. socket 调用 bind() 函数绑定 IP 地址和端口信息
3. 调用 recvfrom() 函数循环接收数据
4. 关闭网络连接

客户端:
1. 调用 socket() 函数创建 socket 套接字,设置 socket 属性
2. 设置服务端 IP 地址和端口信息
3. 调用 sendto() 函数发送数据
4. 关闭网络连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值