首页 > 其他分享 >HTTP请求过程

HTTP请求过程

时间:2024-10-02 19:49:48浏览次数:11  
标签:HTTP 请求 IP 报文 TCP 路由表 过程 路由 路由器

http请求过程

从源端到终端,请求报文和响应报文要经过四层关口,才可以传输,分为:

  • 应用层 (如http)
  • 传输层 (如TCP)
  • 网络层 (如IP)
  • 链接层 (设备驱动程序以及网卡)

协议

经过约定,使通信两端以相同规则存储,接收,发送数据

分层初探

应用层

应用程序将数据以相应规则进行包装,发给传输层【HTTP,FTP,SMTP,SNMP】

传输层

将应用层传来的数据进行分组,标记,交给网络层【TCP,UDP】

分组和标记是为了保证顺序及完整性

网络层

以最快的方式将数据发送到目标终端【IP,ICMP,IGMP】

链路层

为网络层发送和接收数据单元【ARP,RARP】

[!IMPORTANT]

在这整个过程中,数据在发送及接收时,需要进行封装和分用的操作

  • 封装:报文==>向下层,添加协议标识【此后递归操作到最底层】
  • 分用:去掉报文首部(协议标识)==>向上层【递归到最上层直至接收】

HTTP应用层

报文分类

  • 用户触发交互的行为数据
  • 服务端对此做出的响应

报文作为了客户端和服务端沟通的载体

起始行

  • 请求:方法+请求URL+协议版本
  • 响应:协议版本+状态码+描述文本
方法的分类
方法含义有无主体
GET从服务端获取资源
HEAD只获取资源头部
POST向服务端发送数据

…还有其他的没有列出来

状态码的分类
范围已定义范围含义
100~199100~101信息提示
200~299200~206成功
300~399300~305重定向
400~499400~415客户端错误
500~599500~505服务端错误

首部

形式为键值对==>为了协商具体行为

首部可分类为

请求响应通用实体扩展
  • 请求为告诉服务端的信息
  • 响应为告诉客户端的信息
  • 通用为大家都可用到的,如时间相关的信息
  • 实体可有在报文实体中数据的类型,长度等等 【可有可无】
  • 扩展为了在一些对应传输中进行一些个性化的操作

实体

实体分为实体首部和实体主体,实体首部是用来描述主体的

实体部分是可选的,它被用来运送请求或者响应的数据

传输层-TCP

HTTP连接是建立在TCP连接的基础上

形式通过一条已经打开的TCP连接,按顺序进行传输

需要判断完整性,顺序,是否损坏,重复,通过检验和,序列号,确认应答,重发控制,连接管理和窗口机制

传输控制依赖首部包含的6个标志【0/1】

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • URG:紧急指针
  • ACK:确认序号是否有效
  • PSH:接收方应尽快将这个报文段交给应用层
  • RST:重建连接
  • SYN:同步序号用来发起一个连接
  • FIN:发送端完成发送任务

一个TCP通过4个值确认:源IP,源端口,目的IP,目的端口

[!IMPORTANT]

TCP还有一些超时重传,拥塞避免,慢启动的机制,都可以保证分组数据按照顺序完整的传到目标端

网络层-IP

提过了两个节点之间的连接 【保证快但不保证稳定】–IP就像是装着货物的卡车

选路,分片,重组

若两端IP协议版本不同,IP数据会丢失

[!IMPORTANT]

  • 服务类型TOS:4bit为最小时延,最大吞吐量,最高可靠性,最小费用,1bit为未用位
  • 生存时间TTL:表示可经过的路由个数,每过一个路由,值-1,解决了数据报在一个路由环路一直转发的问题
  • 上层协议:决定接收端上层为TCP还是UDP
  • 分组标识:这个标识相当于ID,每成功发送一个分片,+1
  • 片偏移:标识了当前分片距离原始数据报开始处的位置

路由选择

IP层可配置成主机,也可配置成路由器

  • 主机:若IP地址不为本机IP,数据报会丢失
  • 路由器:根据路由表进行路由选择,将数据包传到下一跳
路由器

–用来连接两个或多个网络的硬件设备–

做什么

通过查询路由表,查看是否有对应的IP地址,将数据报传到下一个路由或目标IP

有什么用

  • 实现网络互联互通 – 不同接口和协议,实现局域网和广域网的互联
  • 实现数据高性能转发
  • 实现网络管理(配置,性能,容错,流量)
路由表

存储在路由器中的数据表 – 一个条目为一个路由

若在路由表中找不到对应的IP地址,会向发送数据报的设备发送ICMP报错信息

路由条目

以来源分类

  • 直连路由:本地接口所在的网段,路由器自行写入
  • 静态路由:(网络管理员手动配置)
  • 动态路由:由动态路由协议发现并写入路由表中

以目的地分类

  • 主机路由:唯一目的地主机
  • 网段路由:一个网络段中的所有主机
  • Mask:网络掩码
  • Proto:路由协议名
  • Pre:本条目加入该路由器的优先级
  • Cost:路由开销
  • Flag:路由标记
  • Interface:输出接口,说明IP包将从该路由器哪个接口转发
路由协议

路由设备之间维护路由表的规则,用于发现路由,生成路由表,并指导报文转发

  • IGP
  • EGP
路由器分类

以使用场景分类

  • 企业路由器
  • 运营商路由器
  • 家用路由器

以实际作用分类

  • 骨干路由器
  • 城域路由器
  • 接入路由器

数据分片

根据目的端IP层的MTU来决定最大数据量(MSS)

MTU:Max Transform Unit

传输时,数据报是无序的

链路层

地址解析协议ARP

前言:

​ 光有IP地址无法直接发送数据报,需找到对应的MAC地址(结合链路层的ARP协议)

MAC地址:用于网络中唯一标识一个网卡

过程

[!IMPORTANT]

若ARP缓存表中有IP与MAC的映射,直接封装并发送到链路层传输

若无,则发送请求广播,若为目标IP地址,且请求内有源IP和源MAC地址,回应一个ARP应答

封装发送的是以太网数据帧

传输和接收

  1. 接收到,根据MTU及数据报大小对IP数据报分片
  2. 封装成一帧,传给底层组件,转为比特流,发送出去,以太网设备接收到帧,检查目标地址,若与本机地址匹配,处理,向上传递(分用过程)

标签:HTTP,请求,IP,报文,TCP,路由表,过程,路由,路由器
From: https://blog.csdn.net/wozhaonue_w/article/details/142669144

相关文章

  • 埃博拉病毒感染过程
    埃博拉病毒感染过程埃博拉病毒粒子具有约80-100纳米的直径,其中包含一个纺锤形的核心。该核心由NP蛋白质组成,紧密地包裹着单链RNA的病毒基因组,以保护其不被降解。粒子表面嵌入了约10纳米长的弹性蛋白GP,它可以与宿主细胞膜发生融合。GP的中间区域具有一个受体结合结构域,......
  • delphi 12 利用TNetHTTPClient 解决post https问题注意事项
          在以前的版本中,如果需要向https接口交互数据,需要openssl的支持,特别时openssl版本太多,往往需要调试很长时间, 现在新版的DelphiXE8以上的版本,有了TNetHttpClient,可以简单的是实现和https接口的交互。usesSystem.Net.URLClient,System.Net.HttpClient......
  • 12_分布式原理_图解横向扩容过程,如何超出扩容极限,以及如何提升容错性
    1、图解横向扩容过程,如何超出扩容极限,以及如何提升容错性(1)primary&replica自动负载均衡,6个shard,3primary,3replica(2)每个node有更少的shard,IO/CPU/Memory资源给每个shard分配更多,每个shard性能更好(3)扩容的极限,6个shard(3primary,3replica),最多扩容到6台机器,每个shard可以占用单......
  • js逆向实战之酷我音乐请求参数reqId加密逻辑
    声明:本篇文章仅用于知识分享实战网站:https://www.kuwo.cn/search/list?key=可以不是你加密逻辑分析访问界面,根据数据包的回显内容判断哪个是我们需要的。找到相应的数据包,看下请求参数。发现reqId参数是一串随机字符串,所以就需要知道该参数的生成过程。全局搜索reqI......
  • Docker实操过程
    Docker实操过程体会知乎上搜“docker入门”搜到的笔记总是起一个赚噱头的标题,然后点进去一看,里面大多是一些入门内容的简单罗列,要么对于背景内容长篇大论让读者抓不住重点,要么对于命令API简单罗列,入门者甚至连这些API如何衔接使用,这些命令大概发生了什么可能都没有概念,说是入门......
  • 【防忘笔记】测试过程与技术
    测试人员应该想些什么我自己是做后端的,对于模棱两可的需求和莫名其妙的测试case是深恶痛绝的,所以有时候我就会想测试人员应该会需要注意什么?以他们的角度,他们更在乎什么最近有机会了解相关的知识,遂整理记录一下,以便之后在工作中更好的理解发生的各种事情以客户为中心这个真的......
  • 【PostgreSQL】提高篇——如何创建和使用自定义函数和存储过程,包括 PL/pgSQL 语言的使
    数据库管理中,存储过程和自定义函数是非常重要的概念,尤其是在使用PostgreSQL这样的关系数据库管理系统时。它们允许开发者将复杂的业务逻辑封装在数据库中,从而提高应用程序的性能、可维护性和安全性。使用PL/pgSQL语言编写的存储过程和函数可以实现数据处理、事务控制和复......
  • 智源:LLM训练过程中的指令相关性
    ......
  • DRF请求的生命周期:三年程序员的实战感悟
    前言:作为工作一个3年左右的码农,在各种框架的摸爬滚打中,我也接触了不少前端后端的技术栈,其中DjangoRESTFramework(DRF)算是我后端日常工作中的用得最多的框架。今天就简单聊聊DRF请求的生命周期。从请求的发起,到数据的处理,再到最终的响应返回,每一步都有着很多的细节和挑战,由于篇幅......
  • 阿里面试:说说 jvm 锁的膨胀过程?锁内存怎么变化的?
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......