TCP,UDP,HTTP的区别和关系

news/2024/5/17 16:46:05 标签: http, 网络协议, TCP, UDP
http://www.w3.org/2000/svg" style="display: none;">

Internet 的传输层有两个主要协议,互为补充。

  1. 无连接的是 UDP,它除了给应用程序发送数据包功能并允许它们在所需的层次上架构自己的协议之 外,几乎没有做什么特别的事情。
  2. 面向连接的是 TCP,该协议几乎做了所有的事情。

主要对比看下它们各自的特点:
UDPTCP协议的主要区别是两者在如何实现信息的可靠传递方面不同
TCP协议中包含了专门的传递保证机制,当数据接收方收到发送方传来的信息时,会自动向发送方发出确认消息;发送方只有在接收到该确认消息之后才继续传送其它信息,否则将一直等待直到收到确认信息为止。
TCP不同,UDP协议并不提供数据传送的保证机制。如果在从发送方到接收方的传递过程中出现数据包的丢失,协议本身并不能做出任何检测或提示。因此,通常把UDP协议称为不可靠的传输协议。

TCP 是面向连接的传输控制协议,准确,安全,但耗资源
UDP 提供了无连接的数据报服务,快速,便捷,资源消耗小

  • TCP 具有高可靠性,确保传输数据的正确性,不出现丢失或乱序
  • UDP在传输数据前不建立连接,不对数据报进行检查与修改,无须等待对方的应答,所以会出现分组丢失、重复、乱序,应用程序需要负责传输可靠性方面的所有工作
  • TCP 协议可以保证接收端毫无差错地接收到发送端发出的字节流,为应用程序提供可靠的通信服务对可靠性要求高的通信系统往往使用 TCP传输数据 UDP 具有较好的实时性,工作效率较 TCP 协议高
  • UDP 协议结构比 TCP 的协议结构简单,因此网络开销也小

举个例子,看下应用场景就很清楚:

  • 传输文件或者发送邮件使用的就是TCP协议
  • 比如音视频通话(视频中丢失几帧,没有任何影响)就使用的UDP协议

通常我们说的HTTP是指HTTP协议:
HTTP协议是(超文本传输协议)的缩写,是用于从网络(万维网)服务器传输超文本到本地浏览器的传送协议。从上面的分析就可以知道,很明显,HTTP协议是基于TCP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)
HTTP协议是基于C/S架构进行通信的,而HTTP协议的服务器端实现程序有httpd、nginx等,其客户端的实现程序主要是Web浏览器,例如Firefox、InternetExplorer、Google chrome、Safari、Opera等。Web服务是基于TCP的,因此为了能够随时响应客户端的请求,Web服务器需要监听在80/TCP端口。这客户端浏览器和Web服务器之间就可以通过HTTP协议进行通信了。

总结起来就是:
UDPTCP类似两条公路,UDP是高速公路,但路上有打劫的,说不定没到目的地就半路失踪了。
TCP就是省道小路,虽然路窄,车多,但安全直接,直达目的地。
HTTP协议就是为省道小路专门定制的车辆,不让走高速(UDP),就专门在低速(TCP)上运行


http://www.niftyadmin.cn/n/1032415.html

相关文章

5.4节面试例题1:int float类型转换 (int)a、(int)a、(int)a

笔记&#xff1a; float a 1.0f;//将float a强制转换成int a cout << (int)a << endl; //1//将a的地址强制转换为整型 cout << (int)&a << endl; //将a的引用强制转换成整型&#xff0c;意思是a所在的内存&#xff0c;本…

通过XShell远程连接VMware中的ubuntu

1.ubuntu安装SSH服务器&#xff1a;sudo apt install openssh-server 刚开始时出现错误&#xff0c;类似下图&#xff1a; 是由于网络配置问题&#xff0c;可参考&#xff1a;VMware中ubuntu16.04 NAT模式设置 网络配置好后&#xff0c;重新执行命令&#xff1a; 查看是否安装…

java数据结构之从稀疏矩阵到稀疏数组

先看一下定义 稀疏矩阵&#xff1a;在矩阵中&#xff0c;若数值为0的元素数目远远多于非0元素的数目&#xff0c;并且非0元素分布没有规律时&#xff0c;则称该矩阵为稀疏矩阵&#xff1b;与之相反&#xff0c;若非0元素数目占大多数时&#xff0c;则称该矩阵为稠密矩阵。定义非…

VMware中ubuntu16.04 NAT模式设置

目录 前提&#xff1a;网络适配器设置成NAT模式&#xff0c;如下图 1.检查实体机的VMnet8网卡设置和虚拟机网卡设置是否保持一致&#xff1a; 1.1 VMware中“编辑”-“虚拟网络编辑器”-“更改设置”&#xff1a; 1.2查询子网是什么 1.3查询网关是什么 2设置实体机VMnet8…

操作list时报java.util.ConcurrentModificationException

这是一个大坑&#xff0c;隐藏的比较隐蔽&#xff0c;有时候还不容易发现&#xff0c;先看我遇到的具体问题&#xff1a; 我修改一位新手同事的一段代码&#xff0c;写的是对一个list做均匀切割&#xff0c;处理&#xff0c;每次搞到中间就报错&#xff0c;提示&#xff1a; ja…

winform做的单机登录界面和账号注册界面

代码&#xff1a; public partial class LoginForm : DevExpress.XtraEditors.XtraForm{public LoginForm(){Logger.RecordInfo("初始化登录页面");InitializeComponent();}//用户登录&#xff0c;验证账号密码private void simpleButton1_Click(object sender, Eve…

VSCode远程连接ubuntu服务器

1.打开VSCode&#xff0c;安装插件 安装插件&#xff0c;汉化&#xff0c;方法如下。重启之后界面就都是中文了。因为我之前弄过了&#xff0c;如果你的已经是中文了&#xff0c;可以省去这一步。 安装remote development插件&#xff0c;如下图。用于远程连接服务器。 安装好…

C#项目中直接使用cmd调用jar包和Python脚本

调用jar包&#xff0c;首先你得先开发一个jar包&#xff0c;可以自己通过命令&#xff1a; java -jar xxxxx.jar param1 正常调用。调用代码&#xff1a; private void button3_Click(object sender, EventArgs e){Process p new Process();//设置要启动的应用程序…