概述
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 这么的精简,功能不够强大,为什么还要用它呢?
原因是:
- 应用层能更好的控制要发送的数据和发送时间,实时性
- 无需建立连接,反应迅速
- 无连接状态,不需要维护连接状态,节省资源
- 分组首部开销小,节省数据段空间
TCP
应用 TCP 时,一个应用进程可以开始向另一个应用进程发送数据之前,这两个进程必须先进行“握手”,所以说,TCP 是面向连接的
TCP 连接提供的是 点对点,全双工服务
TCP 提供的是 可靠数据传输
TCP 通过使用 流量控制、序号、确认和定时器 等技术,确保正确地、按序地将数据从发送进程交付给接收进程
TCP 还提供了 拥塞控制 ,它允许 TCP 连接通过一条拥塞的网络链路,平等地共享网络链路带宽。