说起传输层,大家不免会直接想到TCP和UDP。大家都知道TCP和UDP是有区别的,但是究竟区别有多大呢?和我一起从下面五个方面看看吧。
- TCP与UDP 传输的异同
- TCP和UDP 套接字编程流程图
- UDP和TCP 协议通讯过程
- TCP和UDP 协议段格式
- 基于TCP和UDP 的应用层协议
1.TCP与UDP传输的异同
相同:都是传输层协议,可以进行网络间全双工通信。
不同:
TCP | UDP |
---|---|
面向链接 | 无链接 |
可靠传输 | 不可靠传输 |
面向字节流 | 面向数据报 |
用于保证可靠性传输的情况,应用文件传输,重要状态更新等 | 用于对高速和实时性传输较高的通信领域,应用于早期QQ,广播等 |
TCP和UDP 之间各有优缺点,我们不能完全说TCP优于UDP,具体场景具体判断。
2. TCP和UDP套接字编程流程图
UDP
因为UDP是无连接的,所以在使用网络套接字进行编程时,客户端不用发起connect -建立连接请求,服务器也就无需listen -监听和accept -接收请求。
UDP的无连接,也就意味它必须使用sendto 和 recvfrom 指定获取数据的地方。
TCP
因为TCP是面向链接的,所以在使用网络套接字进行编程时,客户端必须主动发起connect -建立连接请求,而服务器要listen -监听和accept -接收请求。
由于TCP已经建立连接,所以可直接用send/write和recv/read获取数据即可。
3. UDP和TCP协议通讯过程
udp 通讯: 使用udp协议通讯无需连接,所以客户端只要知道服务器的IP+端口号就能直接进行发送数据,且不关心对方是否收到。使用UDP通信的过程类似寄信
tcp 通讯: 使用tcp协议通讯时,要经过三次握手建立连接,连接建立成功才能发送数据并关心结果,关闭连接时要经过四次挥手。使用TCP通信的过程类似打电话
具体过程,我在下篇博客中进行了详解,想了解的可以戳链接:面试官为啥总问TCP?
4. TCP和UDP 的协议段格式
UDP 协议段格式
- 16位UDP长度即整个数据报的最大长度=UDP首部+UDP数据
因为UDP 是面向数据报的,所以此段可以保证UDP报文的独立性
它必须一次接收应用层交付的数据,如果有需要应由应用层负责手动分包并发送 - 如果校验和出错,就会被直接丢弃
- UDP的缓冲区
它没有真正意义上的发送缓冲区,调用sendto时内核会直接交付给下层处理
它具有接收缓冲区,但由于写方是直接写入,所以读方必须以报文为单位读取数据 - UDP的分包和分用
通过定长首部进行有效载荷分离,根据目的端口号进行分用
有效载荷大小 = UDP长度 - 首部长度 面向数据报所以有明显边界
TCP 协议段格式
- 6位标志位 - - 在上图中,我们有6个标志位还没讲:
URG:表示紧急指针是否有效,与下面紧急指针配合,可以标识紧急数据
ACK:表示确认号是否有效,建立连接后传送的报文此字段必设置为1
PSH:提示接收端应用程序立即将TCP缓冲区内数据读走
RST:请求重新建立连接,称复位报文段
SYN:请求建立连接,称同步报文段
FIN:关闭连接,称结束报文段
- TCP 的缓冲区
它有由OS创建的发送缓冲区,使得写入的数据在合适的时机发送(保证效率)
它有接收缓冲区,但由于不知道写方写入方式,所以可以以字节为单位的方式读取 - TCP 的分包和分用
通过定长报头进行有效载荷的分离,根据目的端口号进行数据分用。
有效载荷的大小:不确定 面向字节流 - TCP既能保证可靠性,又尽可能的提高了性能
具体原因:我在面试官为啥总问TCP中详细讲到了,这里就不赘述了。
5. 基于TCP 和UDP 的应用程序协议
基于UDP 的应用层协议
NES:网络文件系统
TFTP:简单文件传输协议
DHCP:动态主机配置协议
BOOTP:启动协议(无盘设备启动)
DNS:域名解析协议
其他使用UDP程序自定义的应用层协议
基于TCP 的应用层协议
HTTP:超文本传输协议,端口号80
HTTPS:超文本传输安全协议,端口号443
SSH:安全外壳协议
Telnet:远程终端协议
FTP:文件传输协议
SMTP:简单邮件传输协议
其他使用TCP程序自定义的应用层协议
博主关于TCP和UDP的理解都在上面啦,我认为比较着记忆会更深刻一点,你们觉得呢?
有问题及时留言,没问题记得关注博主哈