一、TCP(Transmission Control Protocol,传输控制协议):
面向连接的、可靠的、字节流服务。
1、面向连接:
在收发数据前,必须和对方建立可靠的连接,一个TCP接连需要经“三次握手”建立,而断开需要经“四次挥手”,大大提高了数据通信的可靠性,
2、可靠传输:
依靠TCP的序号和确认号。序号可保证有序传输,接收端接收成功需要返回一个确认(ACK),否则超时未返回ACK,对应数据将被重传。
3、面向字节流:
TCP不像UDP一样那样一个个报文独立地传输,而是在不保留报文边界的情况下以字节流方式进行传输。流就是指不间断的数据结构,你可以把它想象成排水管中的水流。
4、提供拥塞控制
当网络出现拥塞的时候,TCP能够减小向网络注入数据的速率和数量,缓解拥塞
5、仅支持单播传输
每条TCP传输连接只能有两个端点,只能进行点对点的数据传输,不支持多播和广播传输方式。
6、TCP提供全双工通信
TCP允许通信双方的应用程序在任何时候都能发送数据
TCP传输可靠性主要体现在:
1、确认应答机制
TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号
2、超时重传
发送方在发送完数据在一个特定时间内未收到接收方的ACK,将重传该数据
3、拥塞控制
每次发送数据包的时候, 将拥塞窗口和接收端主机反馈的窗口大小做比较, 取较小的值作为实际发送的窗口。
4、数据不失真
通过CRC算法 + 16位冗余效验码来保证TCP头部信息以及数据部分信息的完整性
源端口(16位) | 目的端口(16位) | |||||||||||||||||||||||||||||||
序号(32位) | ||||||||||||||||||||||||||||||||
确认好(32位) | ||||||||||||||||||||||||||||||||
TCP 头长度 (4位) |
保留(6位) | URG | ACK | PSH | RST | SYN | FIN | 窗口大小(16位) | ||||||||||||||||||||||||
校验和 | 紧急指针 | |||||||||||||||||||||||||||||||
可选项 | ||||||||||||||||||||||||||||||||
数据(可选) |
二、UDP(User Data Protocol,用户数据报协议):无连接的、不可靠的、数据报服务
1、无连接
传输数据之前源端和终端不需要建立连接,知道对端的IP和端口号就直接进行传输
2、不可靠
通信不需要建立连接,没有确认机制, 没有重传机制,因而传输速度很快
3、面向数据报
应用层交给UDP多长的报文, UDP原样发送(仅仅添加UDP头部), 既不会拆分, 也不会合并,保留这些报文的边界。
4、尽最大努力交付
即不保证可靠交付, 因此主机不需要维持复杂的链接状态表
5、头部开销小
只有8个字节,相对于TCP的20个字节信息包的额外开销很小。
6、有单播,多播,广播的功能
由于传输数据不建立连接,因此也就不需要维护连接状态,UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
源端口(16位) | 目的端口(16位) |
报文段长度(16位) | 校验和(16位) |
数据 |
三、TCP与UDP区别
TCP | UDP | |
1、是否连接 | 面向连接 | 无连接 |
2、是否可靠 | 可靠传输,使用流量控制和拥塞控制 | 不可靠传输,不使用流量控制和拥塞控制 |
3、连接对象个数 | 只能是一对一通信 | 支持一对一,一对多,多对一和多对多交互通信 |
4、传输方式 | 面向字节流 | 面向报文 |
5、首部开销 | 首部最小20字节,最大60字节 | 首部开销小,仅8字节 |
6、其他 | 程序结构较复杂 | 程序结构较简单 |
7、适用场景 | 适用于要求可靠传输的应用,例如文件传输 |
适用于实时应用(IP电话、视频会议、直播等) |