什么是TCP/UDP/HTTP?

文章目录

TCP、UDP 和 HTTP 是计算机网络中核心的协议,但分属不同的层级,承担着不同的功能。要理解它们的区别与联系,首先需要明确 OSI 七层模型TCP/IP 四层模型 的背景------协议按"分工"被划分到不同层级,下层为上层提供基础服务。

一、先搞懂:协议的"层级"关系

我们用更易理解的 TCP/IP 四层模型 来定位三者:

层级(TCP/IP 模型) 核心功能 包含的关键协议
应用层(Application) 直接为用户应用(如浏览器、聊天软件)提供服务 HTTP、HTTPS、FTP、DNS 等
传输层(Transport) 负责"端到端"的数据传输(如从你的电脑到服务器) TCP、UDP
网络层(Internet) 负责"跨网络"的路由选择(如数据从家里的网络传到阿里云服务器) IP(IPv4/IPv6)
网络接口层(Link) 负责物理设备的数据传输(如网线、WiFi 信号) Ethernet、WiFi 等

简单说:HTTP 是应用层协议,依赖传输层的 TCP 协议来传递数据;TCP 和 UDP 是传输层协议,直接为上层应用提供传输能力。

二、逐个解析:TCP、UDP、HTTP 是什么?

1. 传输层协议:TCP(Transmission Control Protocol,传输控制协议)

TCP 是一种 面向连接、可靠、有序 的传输协议,核心目标是"保证数据准确、完整地到达目的地",类似"打电话"------先接通,再说话,确保对方听清楚。

核心特性:
  • 面向连接 :数据传输前必须通过"三次握手"建立连接,传输结束后通过"四次挥手"断开连接(类似打电话前拨号、挂电话后断线)。
    • 三次握手:确认双方"发送/接收能力正常"(A问"在吗?"→B答"在,你呢?"→A答"在,开始传")。
    • 四次挥手:确保双方"数据都传完了"再断开(避免一方还在发,另一方已断线)。
  • 可靠传输
    • 超时重传:如果发送的数据没收到对方的"确认回执(ACK)",会重新发送。
    • 差错校验:通过校验和检查数据是否在传输中损坏,损坏则丢弃重传。
    • 流量控制:根据接收方的处理能力调整发送速度(避免接收方"忙不过来")。
    • 拥塞控制:根据网络拥堵情况调整发送速度(避免网络"堵车")。
  • 有序传输:数据按发送顺序到达(比如发送"1-2-3",接收方不会收到"2-1-3")。
适用场景:

需要"可靠性"优先的场景,哪怕牺牲一点速度:

  • 网页浏览(HTTP 基于 TCP)
  • 文件传输(FTP)
  • 邮件发送(SMTP)
  • 数据库交互(MySQL)
2. 传输层协议:UDP(User Datagram Protocol,用户数据报协议)

UDP 是一种 无连接、不可靠、无序 的传输协议,核心目标是"快速传输",类似"发短信"------直接发送,不确认对方是否接收,也不保证顺序。

核心特性:
  • 无连接:不需要建立/断开连接,直接发送数据,开销极小(比 TCP 快很多)。
  • 不可靠:不保证数据到达、不校验顺序、不重传丢失的数据(发送后"不管了")。
  • 面向数据报:数据以"数据报"为单位传输(每个数据报独立,最大64KB)。
适用场景:

需要"速度"优先,能容忍少量数据丢失的场景:

  • 实时音视频(直播、视频通话,丢1帧不影响整体体验)
  • 在线游戏(延迟比丢包更致命,卡顿比偶尔"瞬移"难接受)
  • 广播/组播(如局域网设备发现)
  • DNS 查询(请求小、要求快,丢了重发即可)
3. 应用层协议:HTTP(HyperText Transfer Protocol,超文本传输协议)

HTTP 是 用于传输超文本(如HTML、图片、视频)的应用层协议 ,是浏览器与服务器通信的"通用语言"。它本身不负责数据传输,而是依赖传输层的 TCP 协议 来实现可靠传输(HTTP/3 开始支持 UDP,但目前主流仍是 HTTP/1.1 和 HTTP/2,基于 TCP)。

核心特性:
  • 基于请求-响应:由客户端(如浏览器)主动发"请求",服务器被动回"响应"(一问一答)。
  • 无状态:服务器不保存客户端的历史状态(比如第一次请求和第二次请求,服务器默认认为是两个独立的客户端),需要用 Cookie、Session 来"记住"状态。
  • 明文传输:HTTP 传输的数据是未加密的,可能被中途拦截、篡改(这也是 HTTPS 出现的原因,HTTPS 是 HTTP + SSL/TLS 加密层)。
  • 可扩展:通过"请求头""响应头"支持各种扩展(如缓存控制、压缩、认证)。
工作流程(以打开网页为例):
  1. 浏览器解析网址(如 www.baidu.com),通过 DNS 查询得到服务器的 IP 地址;
  2. 浏览器通过 TCP 与服务器建立连接(三次握手);
  3. 浏览器发送 HTTP 请求(如"GET /index.html",请求首页的 HTML);
  4. 服务器处理请求,返回 HTTP 响应(包含 HTML 内容和状态码,如 200 表示成功);
  5. 浏览器解析响应内容,渲染出网页;
  6. 连接按需断开(HTTP/1.1 支持"长连接",可复用连接减少握手开销)。

三、关键区别:TCP vs UDP vs HTTP

维度 TCP UDP HTTP
所属层级 传输层 传输层 应用层
连接性 面向连接(三次握手/四次挥手) 无连接 依赖 TCP 连接(间接面向连接)
可靠性 可靠(重传、校验、有序) 不可靠(不重传、无序) 可靠(依赖 TCP 的可靠性)
速度 慢(开销大) 快(开销小) 中等(依赖 TCP,加应用层逻辑)
核心目标 保证数据准确完整 保证传输速度 规范超文本的请求与响应
典型用途 文件传输、网页基础传输 音视频、游戏 浏览器-服务器通信(网页、接口)

四、延伸:三者的"协作关系"举例

当你用浏览器看直播时:

  1. HTTP 协议:浏览器先通过 HTTP 向直播平台服务器发送"请求直播流地址"的指令,服务器返回响应(包含直播流的 URL);
  2. TCP 协议:HTTP 的请求/响应数据,通过 TCP 协议可靠地传到服务器/浏览器;
  3. UDP 协议:直播的音视频流,通过 UDP 协议快速传输(因为实时性优先,容忍少量丢包)。

总结:TCP 和 UDP 是"运输工具"(TCP 是快递车,慢但稳;UDP 是赛车,快但糙),HTTP 是"货物运输的规则"(规定了"送什么、怎么问、怎么答"),三者协同实现了互联网的信息传递。

相关推荐
yaoxin5211231 小时前
273. Java Stream API - Stream 中的中间操作:Mapping 操作详解
java·开发语言·python
技术小甜甜1 小时前
[Python实战] 告别浏览器驱动烦恼:用 Playwright 优雅实现网页自动化
开发语言·python·自动化
vortex51 小时前
Bash 替换机制(一):命令替换与进程替换
开发语言·chrome·bash
小徐Chao努力1 小时前
【GO】Gin 框架从入门到精通完整教程
开发语言·golang·gin
她说..1 小时前
手机验证码功能实现(附带源码)
java·开发语言·spring boot·spring·java-ee·springboot
加成BUFF1 小时前
C++入门讲解3:数组与指针全面详解
开发语言·c++·算法·指针·数组
GoWjw2 小时前
C语言高级特性
c语言·开发语言·算法
自己的九又四分之三站台2 小时前
基于Python获取SonarQube的检查报告信息
开发语言·python
方也_arkling2 小时前
【JS】定时器的使用(点击开始计时,再次点击停止计时)
开发语言·前端·javascript
不染尘.2 小时前
虚拟网络环境及socket概述
linux·c语言·网络·windows·计算机网络