当前位置: 首页 > news >正文

http、UDP协议

一 、http

如果要谈http,那我们不能脱离应用层------直接为用户提供网络服务,是用户与网络交互的接口。
应用层常用的协议---HTTP/HTTPS:网页浏览,DNS域名解析

http应用协议是基于tcp协议的:

1.1认识URL

什么是URL ---其实就是我们平常说的网址

urlencode和urldecode

像 / ? : 等这样的字符,已经被url当做特殊意义理解了.因此这些字符不能随意出现.
比如,某个参数中需要带有这些特殊字符,就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4(不足4位直接处理),每2
做一位,前面加上%,编码成%XY格式

c++就会被转码成%2B

最前面就有https,我们先来浅谈一下https 和 http 的区别

HTTP 默认使用的端口是 80,而 HTTPS 使用的是 443 端口。

HTTP 是直接基于 TCP 传输的

HTTPS 是在 HTTP 和 TCP 之间加入了 SSL/TLS 加密层,也就是HTTP + SSL/TLS + TCP,从而实现数据加密传输。

所以https 简单来说就是有了一层加密,就更加安全。我们可以发现现在浏览器网址前面都有一个小锁。

1.1.2--加密 和 解密

什么是加密 ---加密就是把 明文 给进行操作,使得 成为密文

什么是解密---解密就是把密文 给解析出来 变成明文

加密解密的就到了密码学,感兴趣可以自己查查

为什么要加密? 其实回答很简单,就是怕你传输的东西,被被人盗取利用,就比如说你的qq号和密码,让别人盗取,就会造成一些损失。

经典的就是一些运营商劫持---比如有个软件你要下载了,链接出来也是下载它,一点击下载,跨擦出来了一个浏览器的下载进度条。

这就是因为 假设我们在家里,我们路由器给我们形成一个子网,我们是在子网下进行发送数据,我们把数据传输到家庭路由器,然后再经过一系列的传输就会传到运营商的路由器里,如果没有加密的话,就有可能会被篡改。

也就是http 是明文直接传输,明文经过路由器,交换机,运营商的路由器,代理服务器,所以在这些过程中被别人截取,可能被别人把你的隐私信息直接给暴露,有的就可能被篡改。

所以就有了https进行加密,进行加密的方法就是中间一层,也就是我们所说的ssl,ssl加密也不是决定安全,毕竟厉害的人那么多。

2.http的协议格式

http 请求报文(Request Message)是客户端(如浏览器)向服务器发送请求时所使用的标准格式。它遵循特定的文本结构,由请求行、请求头部、空行和请求体四部分组成。

2.1请求行

方法 请求目标(资源路径) 协议版本

方法:

GET:获取指定资源(最常用)
POST:向服务器提交数据(如表单、文件上传)
PUT:上传或更新资源
DELETE:删除资源
HEAD:只获取响应头,不返回响应体
OPTIONS:查询服务器支持哪些方法
PATCH:对资源进行部分修改

这个方法最主要的运用呢就是GET方法和PUSH方法

举个例子来看

GET方法

GET /search?q=随便 HTTP/1.1
Host: test.com

POST 方法

POST /login HTTP/1.1
Host: test.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 29username=admin&password=123456

也就是POST会把用户名和密码直接显示到你的请求行上,就会很不安全

请求目标(资源路径)

http://www.example.com/index.html

协议版本

HTTP/1.0
HTTP/1.1(目前最广泛使用)
HTTP/2(二进制格式,不以明文显示)

2.2请求头部

Content-Type:数据类型(text/html等)

Content-Length:Body的长度

Host:客户端告知服务器,所请求的资源是在哪个主机的哪个端口上;

User-Agent:声明用户的操作系统和浏览器版本信息;

referer:当前页面是从哪个页面跳转过来的;

Location:搭配3xx状态码使用,告诉客户端接下来要去哪里访问;

Cookie:用于在客户端存储少量信息.通常用于实现会话(session)的功能;

二:UDP协议

UDP协议是传输层的协议

首先要再次谈到端口号

1.1端口号-udp

1.1.1-端口号的范围划分

0 - 1023: 知名端口号, HTTP, FTP, SSH 等这些广为使用的应用层协议, 他们的
端口号都是固定的. • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作
系统从这个范围分配的

1.1.2-认识知名端口号

有些服务器是非常常用的, 为了使用方便, 人们约定一些常用的服务器, 都是用以下这些
固定的端口号: • ssh 服务器, 使用 22 端口
• ftp 服务器, 使用 21 端口
• telnet 服务器, 使用 23 端口
• http 服务器, 使用 80 端口
• https 服务器, 使用 443

运行命令,就可以看到端口号。

cat /etc/services

1.1.4 端口号的认识

我们要理解两个问题一个进程是否可以bind 多个端口号?

第二个问题是一个端口号可以被多个进程bind?

其实这两个问题我们原来的学习的过程中就已经回答过了

一个进程是否可以bind 多个端口号?

 

一个进程可以绑定多个端口号,qq可以被多个端口号访问,可以要绑定多个端口号

一个端口号可以被多个进程bind?

 

一个端口号只能对应一个进程,这就相当于是一个进程能有多个文件描述符,但是一个文件描述符只能对应一个进程。

2.UDP报文

要学习UDP协议还是按照往常,我们要理解UDP协议是如何解包的,UDP是如何做到分用的,

2.1-UDP协议格式

大家看图片就可以可能到,端口号什么的这些组成的报头,是固定长度的,所以只要读取前八个字节,就可以把这些数据全部获取到,读到UDP长度的时候,就表示整个报文的长度,也就是UDP首部+数据的长度,然后把把前八个字节分开,就是数据,就实现了报头 和 有效载荷的分离。

2.2UDP的特点

无连接:知道对端的IP和端口号就直接进行传输,不需要建立连接;
不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方。                                      UDP协议层也不会给应用层返回任何错误信息;                                                                                面向数据报:不能够灵活的控制读写数据的次数和数量----应用层交给UDP多长的报文,UDP原样发送,既不会拆分,也不会合并;用UDP传输100个字节的数据:

UDP虽然是不可靠的,但是总不能传过来都是错的把,所以该协议也是加上了一些检验正确的。UDP头部包含一个可选的校验和字段。这个校验和用于检测数据在传输过程中是否发生了错误。接收方会计算接收到的数据报的校验和,如果与发送方的校验和不匹配,该数据报通常会被静默丢弃。这保证了应用层接收到的数据在传输过程中没有发生损坏。

2.3UDP的缓冲区

UDP 没有真正意义上的 发送缓冲区. 调用 sendto 会直接交给内核, 由内核将数据传给网络层协议进行后续的传输动作;

UDP 具有接收缓冲区. 但是这个接收缓冲区不能保证收到的 UDP 报的顺序和发送 UDP 报的顺序一致; 如果缓冲区满了, 再到达的 UDP 数据就会被丢弃。

UDP也是既可以读,也可以写,所以UDP是全双工的。

http://www.dtcms.com/a/394388.html

相关文章:

  • 微服务基础3-服务保护与分布式事务
  • C++红黑树详解
  • 【不背八股】15.kmp算法/ Dijkstra算法/二叉树遍历
  • 【ES】ElasticSearch 数据库之查询操作 从入门>实践>精通 一篇文章包含ES的所有查询语法
  • huggingface-cli修改模型下载路径
  • 计算机视觉——灰度分布
  • OpenFeature 标准在 ABP vNext 的落地
  • Agentic AI 多智能体协作:开发实战、框架选型与踩坑指南
  • [优选算法专题三二分查找——NO.17二分查找]
  • 一文学会c++哈希
  • 【06】EPGF 架构搭建教程之 本地环境管理工具的本地化
  • 【开发实践】DNS 报文分析与 CDN 架构可视化方案
  • Ubuntu 系统下 Nginx + PHP 环境搭建教程
  • AI 如何改变日常生活
  • 字典树 Trie 介绍、实现、封装与模拟 C++STL 设计
  • 第一性原理(First Principles Thinking)
  • 1.UE-准备环境(一)-账号注册和打开虚幻引擎源码页面
  • javascript `AbortController`
  • 时间复杂度与空间复杂度
  • rocketmq队列和消费者关系
  • RAG评估指南:从核心指标到开源框架,打造高效检索生成系统
  • xtuoj 0x05-A 前缀和
  • 防误删 (实时) 文件备份系统 (btrfs 快照 + rsync)
  • 【FreeRTOS】第七课(1):任务间通信(使用队列)
  • OD C卷 - 二叉树计算
  • DiffDock 环境安装和使用教程
  • NVIC中的不可屏蔽中断NMI(Non-Maskable Interrupt)是什么?
  • TypeORM 浅析
  • 2.4 死锁 (答案见原书 P165)
  • 算法与数据结构:常见笔试题总结