33 张图详解 TCP 和 UDP :打通网络和应用的中间人

本文深入解析TCP和UDP,包括它们的基本概念、区别、连接管理、确认应答机制、窗口控制等。通过33张图,帮助读者直观理解这两种传输层协议的工作原理,以及在可靠性和效率之间的权衡。

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

先来一张全景图,3 秒快速了解整篇文章的内容。

上帝视角

初始传输层

前面说过,传输层的作用是建立应用程序间的端到端连接,为数据传输提供可靠或不可靠的通信服务。传输层有两个重要协议,分别是 TCP 和 UDP。TCP 是面向连接的可靠传输协议,UDP 是无连接的不可靠传输协议。

传输层协议

一个 IP 地址可以标识一台主机,IP 报文头部有一个字段,用来标识上层协议类型。根据这个字段的协议号,来识别 IP 传输的数据是 TCP 还是 UDP 。IP 用协议号 6 标识 TCP ,用协议号 17 标识 UDP 。但一台主机可能同时有多个程序,传输层的 TCP 和 UDP ,为了识别上一层的应用程序类型,使用端口号来识别具体的程序,从而使这些程序可以复用网络通道。

协议号和端口号

二层的帧通信和三层的包通信都是无连接的、不可靠的通信方式,四层的 TCP 却是一种可靠的通信方式。如果帧在传输中丢失,通信双方的二层功能模块发现不了;如果包在传输中丢失,通信双方的三层功能模块发现不了。燃鹅,一个 TCP 段丢失了,TCP 模块一定能够发现。一个 TCP 段的丢失,意味着一个 IP 包的丢失,因为 TCP 段是封装在 IP 包里的;同理,一个 IP 包的丢失,意味着一个帧的丢失。因此,二层和三层通信的不可靠性在 TCP 这里得到补偿。

数据封装

应用程序其实就是 TCP/IP 的应用协议,应用协议大多以客户端/服务端的形式运行。客户端( Client ,使用服务的一方。)是请求的发起端。而服务端( Server ,提供服务的程序或主机。)则是请求的处理端。作为服务端的程序有必要提前启动,随时准备接收客户端的请求。否则即使有客户端的请求发过来,也无法进行处理。

Client/Server模式

确认一个请求究竟是发给哪一个服务端,可以通过收到数据包的目的端口号轻松识别。当收到 TCP 的建立连接请求时,如果目的端口号是 22 ,则转给 SSH ,如果是 80 则转给 HTTP

TCP

TCP 是面向连接的、可靠的流协议。流就是不间断的数据,当应用程序采用 TCP 发送消息时,虽然是按顺序发送,但接收端收到是没有间隔的数据流。比如,在发送端应用程序发送了 10 次 100 字节的数据,那么在接收端,应用程序可能会收到一个 1000 字节连续不间断的数据。

可靠传输

TCP 为提供可靠性传输,实行顺序控制、重发控制机制。此外还有流量控制、拥塞控制、提高网络利用率等众多功能。

UDP

**UDP **是不具有可靠性的协议,可靠性功能交给上层的应用去完成。UDP 虽然可以确保发送数据的大小,比如:发送端应用程序发送一个 100 字节的消息,那么接收端应用程序也会以 100 字节为长度接收数据。但不能保证数据一定会到达。因此,应用有时会根据需要进行重发处理。

不可靠传输

TCP 和 UDP 的区别

TCP 是可靠的传输协议,一定会优于 UDP 吗?其实不然,TCP是面向连接的,并且具备顺序控制、重发控制等机制,可以为应用提供可靠传输。而 UDP 主要用于对高速传输和实时性有较高要求的通信。比如:通过 IP 电话进行通话。如果使用 TCP ,数据如果丢失会重发,这样就无法流畅地传输通话的声音,导致无法进行正常交流。而采用 UDP ,它不会进行重发处理。也就不会有声音大幅度延迟到达的问题。即使有部分数据丢失,也只会影响小部分的通话。因此,TCP 和 UDP 需要根据应用的目的选择使用

端口号

数据链路层和网络层的地址,分别是 MAC 地址和 IP 地址。MAC 地址用来标识同一网段中不同的设备,IP 地址标识网络中的主机或路由器。传输层的地址就是端口号,端口号用来识别同一台主机中不同的应用程序,也被称为程序地址

一台主机可以同时运行多个程序,比如 WWW 服务的 Web 浏览器、电子邮箱客户端等程序都可同时运行。传输层协议正是利用这些端口号,识别主机正在进行通信的应用程序,并准确的传输数据。

端口号

仅仅通过目的端口来识别某一个通信是不准确的。两台主机访问的目的端口号 80 相同,可以根据源端口号区分这两个通信。

目的端口号和源端口号相

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值