浏览器地址栏输入url回车后发生了什么

2023-11-14

        面试第一天,面试官问我,浏览器输入url后怎么进行请求的,我一想,诶,回车不就向后台发送请求就行了吗,卒.

        当按下回车后发生了以下步骤:

                1.ip地址解析寻址

                2.建立tcp连接(三次握手)

                3.发送一个http请求

                4.服务器处理并返回响应请求

                5.关闭tcp连接(四次挥手)

                6.浏览器解析HTML文件并进行渲染布局

1.ip地址的解析寻址

        我们一般在浏览器输入的是域名,首先会对浏览器缓存进行查找有没有这个域名对应的ip地址,如果有就会直接执行步骤2(如果你直接输入ip地址也是一样).

        然后将进行hosts文件里面查找有没有这个ip地址(hosts文件作用为屏蔽设定网址)

        当posts文件没有设定当前访问ip,前往路由缓存查找.

        路由缓存找不到,将前往DNS服务器查找,如果找不到将前往更高一级DNS服务器查找.(DNS服务器全称DNS域名解析器,一般我们在浏览器地址栏输入的是域名不是直接的ip地址,如查找百度,我们会输入域名www.baidu.com,而不是ip地址110.242.68.4,而域名是不能直接访问的,这时候就需要用到DNS域名解析器对其进行解析得到ip地址,再对ip地址进行访问)

2.建立TCP连接(三次握手)

        当得到ip地址后进行连接请求,客户端会向服务端发送一个SYN包,服务端得到SYN包后会返回SYN加ACK包,客户端收到SYN加ACK包后向服务端返回一个ACK包,至此,传输通道建立.

问题1:为啥是3不是2不是4

        如果tcp只进行两次握手时,当客户端发送SYN1给服务端遇到信道阻塞无法到达,客户端见到长久没有反应只能进行第二次发送SYN2请求连接,当服务端接收到SYN2返回ACK2连接建立.这时候SYN1信道阻塞恢复,服务端接收到SYN1以为客户端建立新连接,向客户端发送ACK1建立新连接,客户端认为自己只是为了一次连接,接收到ACK1也不予理会,导致两者连接状态不一致.

        三次握手能完成的事为什么要四次,嫌弃效率太高了么...

        结论:三次为了在不稳定的信道上建立稳定的传输通道

问题二:SYN包和ACK包是什么(别问,问就是我闲得慌)

        SYN:同步序列编号,TCP连接的第一个包,SYN攻击是常见的网络工具手段(又称泛洪攻击),通过发送大量的无意义SYN包,占用机器大量处理能力(因为处理一个包需要几秒钟才放弃),导致服务奔溃.

        ACK:确认字符,没有找到有意思的东西.

3.发送HTTP请求

        这里主要讲数据传输,主要解决数据包丢失和排序问题.

        在传输通道连接后,TCP会创建一个发送缓冲区(序号以0开头逐1递增),发送者发送报文由初始序列号和长度和数据内容组成,接收者回复报文ACK,发送者根据ACK进行新数据发送或者丢失数据补发.这种问答模式有利于在一次性多数据包传输上解决丢失和排序问题.

        TCP协议是双向的,发送者即可以是客户端也可以是服务端,接收者亦然.

4.服务器处理并返回响应请求

        服务器处理是后端的事了,响应请求的数据传输如步骤3.

5.关闭TCP

        当一方请求断开连接时(假设由客户端发出),客户端将发送一份FIN文件给服务端,表示自己将要进行断开连接并进入断开等待状态1,服务端接收到FIN文件后将发送一份ACK文件给客户端表示收到并进入最后的数据传输,当数据传输完成服务端将FIN文件返回给客户端表示最后数据传输完成,客户端收到后将ACK文件返回给服务端表示收到,至此,客户端进入超时等待,服务端关闭连接,时间超过,客户端关闭连接.

问题一:为什么是4不是3不是5

        ......为了在不稳定的信道上稳定的关闭连接

问题二:为什么有超时等待机制

        为了防止在客户端最后返回ACK文件时,信道阻塞导致服务端无法收到,服务端有机会重新向客户端发送FIN文件让客户端返回ACK文件. 

问题三:FIN文件是什么

        我也不知道,估且当作一个通知文件吧......

6.浏览器解析HTML文件并进行渲染布局

        这是前端的内容......就是把获取到的内容展示出来...吧?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

浏览器地址栏输入url回车后发生了什么 的相关文章

随机推荐

  • 初探BlockChain——哈希和电子签名

    昨天在B站学习到北京大学肖臻老师的 区块链技术与应用 的公开课 感到豁然开朗 BlockChain涉及到密码学的两个方面 哈希和电子签名 1 哈希 有计算机基础的童鞋都比较清楚其机制 这里再简单说一下其基本原理 哈希的意思就是引入随机数量的
  • 一对一和一对多的关联查询(该实体类中存在实体类属性和实体类集合属性,将关联的实体类详细信息查询出来,但没有查询所有该实体类信息)

    一 高级查询 高级查询主要是一对一查询 一对多查询 多对多查询 1 一对一查询 有用户和订单两个表 用户对订单是1对1查询 也就是订单中有一个外键是指向用户的 先创建实体类 User java public class User priva
  • c语言文件的方式写通讯录,用c语言多文件编写1000人的通讯录

    实现一个通讯录 通讯录可以用来存储1000个人的信息 每个人的信息包括 姓名 性别 年龄 电话 住址 提供方法 1 添加联系人信息 2 删除指定联系人信息 3 查找指定联系人信息 4 修改指定联系人信息 5 显示所有联系人信息 6 清空所有
  • Redis —— 设置密码

    文章目录 Redis 设置密码 简介 需要修改两处 1 命令行进入Redis进行密码修改 2 修改Redis配置 redis conf 修改后重启redis Redis 设置密码 简介 没有密码 设置密码 需要修改两处 1 命令行进入Red
  • linux添加硬盘扫描

    查看host个数 ls sys class scsi host 重新扫描 echo gt sys class scsi host host编号 scan 可以形成脚本 也可以设置别名 简化操作
  • cmake获取当前编译器的类型与版本

    在使用cmake编译程序的时候 如何获取当前使用的编译器的类型 例如是clang 还是gcc cmake提供了很多相关的编译参数 可以查看当前使用的编译器的类型 当前使用的c 编译器 message CMAKE CXX COMPILER C
  • LLVM源码调试

    一 编译LLVM debug版本 调试LLVM代码需要基于debug版本 编译LLVM时 将build type设为Debug即可 cmake DCMAKE BUILD TYPE Debug 二 GDB调试 调试OPT reference
  • Linux下磁盘分区与扩容

    虚拟机增加磁盘进行磁盘分区 查看磁盘情况 root localhost df 查看设备 root localhost ls dev sd 增加磁盘 root localhost ls dev sd 找到对应增加的设备 假设增加的sdb ro
  • 【2】Qt的MainWindow的能看不能吃的框架 以及 添加图片资源

    就是加上菜单栏 窗口 这些东西 而且没做回调函数 没有做button 所以h文件没有改动 mainwindow cpp include mainwindow h include
  • selenium爬取药监总局

    url http 125 35 6 84 81 xk from selenium import webdriver from lxml import etree from time import sleep page text list d
  • python 复杂表达式

    复杂表达式 使用for循环的迭代不仅可以迭代普通的list 还可以迭代dict 假设有如下的dict d Adam 95 Lisa 85 Bart 59 完全可以通过一个复杂的列表生成式把它变成一个 HTML 表格 tds tr td s
  • LeetCode·每日一题·1177. 构建回文串检测·前缀和

    作者 小迅 链接 https leetcode cn problems can make palindrome from substring solutions 2309940 qian zhui he zhu shi chao ji xi
  • Jina Hub:一站式神经搜索系统组件分享平台

    Hub 是 Jina 全家桶中非常重要的一个成员 本期推文我们将详细介绍 Hub 的相关内容 在过往推文中 我们介绍过 高度适配深度学习任务的可扩展数据结构 DocArray 开源神经搜索框架 Jina 神经搜索系统结果调优工具 Finet
  • 嵌入式Web项目(二)——CGI的引入

    文章目录 静态网页工作原理 动态网页工作原理 CGI的概念 CGI工作原理 boa配置静态文件与CGI文件访问路径 静态文件 CGIPath 动态网页 以shell语言 实现动态网页案例 第一次访问测试 第二次测试 C语言测试 静态网页工作
  • C++ 原始指针、shared_ptr、unique_ptr分别在什么场景下使用

    开发中一直萦绕我的一个困惑是 智能指针和原始指针什么场景怎么用 现在终于有了答案 2020 03 22 增加了unique ptr指针的使用 1 智能指针天生负责对象生命期管理 所以生命期对象全都由unique ptr和shared ptr
  • Redis详解

    1 键值数据库的基本架构 不同键值数据库支持的key类型一般差异不大 而value类型则有较大差别 我们在对键值数据库进行选型时 一个重要的考虑因素是它支持的value类型 例如 Memcached支持的value类型仅为String类型
  • C语言小游戏——贪吃蛇

    贪吃蛇 1 游戏界面 2 游戏说明 3 程序源代码 1 游戏界面 2 游戏说明 贪吃蛇游戏按键说明 按方向键上下左右 可以实现蛇移动方向的改变 3 程序源代码 代码如下 示例 include
  • unity 3D RPG高级教程(十四)

    目录 声明 1 QuestGiver 控制任务对话显示 2 GiveRewards 拿到任务奖励 3 SaveQuestManager 保存任务数据 声明 本教程学习均来自U3D中文课堂麦扣老师 1 QuestGiver 控制任务对话显示
  • 层数最深的叶子节点之和

    题目描述 给你一棵二叉树的根节点 root 请你返回 层数最深的叶子节点的和 解题思路 使用深度优先搜索 全局维护两个变量sum 总和 以及maxdeep 最大深度 对于遍历到的节点有三种情况 1 此节点深度不够 不进行操作 遍历它的子节点
  • 浏览器地址栏输入url回车后发生了什么

    面试第一天 面试官问我 浏览器输入url后怎么进行请求的 我一想 诶 回车不就向后台发送请求就行了吗 卒 当按下回车后发生了以下步骤 1 ip地址解析寻址 2 建立tcp连接 三次握手 3 发送一个http请求 4 服务器处理并返回响应请求