TCP与UDP通信协议及Java实现

本文详细介绍了TCP和UDP两种传输层协议的工作原理,包括TCP的可靠性、面向连接服务,UDP的无连接、不可靠服务特性。并提供了Java实现的代码示例,帮助理解TCP与UDP在实际应用中的差异和选择原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述

TCP (Transmission Control Protocol):传输控制协议
UDP(User Datagram Protocol):用户数据报协议

TCP 与 UDP 都是 运输层(Transport Layer)上的因特网协议,运输层协议的功能就是为运行在不同主机上的应用进程之间提供 逻辑通信 ,使得运行不同进程的主机即使分隔于地球两侧,也能像是直接相连一样。
而具体做法是,它为来自应用层的报文添加上运输层首部来创建运输层报文段,这个首部中包含了以下信息
这里写图片描述
通过这些首部字段,不同主机之间的进程就可以通信了

UDP 为调用它的应用程序提供了一种 不可靠的 无连接 服务
TCP 为调用它的应用程序提供了一种 可靠的 面向连接 服务

UDP

UDP 可以说是一种极简的运输层协议,它的功能仅仅包括运输层必备的功能,即:多路复用/多路分解,差错检测
在后面的讲解中我们会知道 TCP 进行通信时,发送方与接收方先要进行“三次握手”来确认连接,而 UDP 则没有这一流程,所以说 UDP 是无连接
在 TCP 中,如果消息没有成功发送,发送方是会收到发送失败的反馈的,而 UDP 中,发送方发出数据后无法确认是否成功发送,只能靠接收方是否回复信息来确认上一次发送成功与否,因此在应用 UDP 时,通常会加入一个延时,如果超过额定时间未收到回复,就重新发送
DNS(Domain Name System,域名系统)就是一个应用 UDP 的例子,当我们输入网址访问网站时,DNS 就是通过 UDP 发送域名查询报文的。所以,如果长时间没有得到回复,我们就会看到“连接超时”的错误页面。
这里写图片描述
UDP 检验和,就是用来做差错检验的数据。
方法实现是,发送方的 UDP 对报文段中的所有 16 比特字的和进行反码运算,求和时遇到溢出要回卷。
例:有 3 个 16 比特字
0110 0110 0110 0000
0101 0101 0101 0101
1000 1111 0000 1100
①:前两个相加
0110 0110 0110 0000
0101 0101 0101 0101
————————————
1011 1011 1011 0101
②:和与第三个相加
1011 1011 1011 0101
1000 1111 0000 1100
————————————
(1)0100 1010 1100 0001
③:有溢出,进行回卷
0100 1010 1100 0001 + 1 = 0100 1010 1100 0010
④:转为反码,存入检验和
1011 0101 0011 1101
接收端收到数据后,会再次将数据取和,再与检验和相加,若结果为1111 1111 1111 1111则表示无差错,若出现 0 则表示有差错

UDP 虽然提供差错检测,但是不会进行错误修复,它要么直接丢弃错误段,要么将错误段上报应用程序

看到这里,不由得会产生一个疑问:UDP 这么的精简,功能不够强大,为什么还要用它呢?
原因是:

  1. 应用层能更好的控制要发送的数据和发送时间,实时性
  2. 无需建立连接,反应迅速
  3. 无连接状态,不需要维护连接状态,节省资源
  4. 分组首部开销小,节省数据段空间


TCP

应用 TCP 时,一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先进行“握手”,所以说,TCP 是面向连接的
TCP 连接提供的是 点对点,全双工服务
TCP 提供的是 可靠数据传输
TCP 通过使用 流量控制、序号、确认和定时器 等技术,确保正确地、按序地将数据从发送进程交付给接收进程
TCP 还提供了 拥塞控制 ,它允许 TCP 连接通过一条拥塞的网络链路,平等地共享网络链路带宽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值