• 肝不完这份HTTP八股文的你,再强大也是假的


    关于网络模型

    OSI 网络模型

    • 应用层,给用户提供应用功能;
    • 表示层,负责把数据转换成兼容另一个系统能识别的格式;
    • 会话层,负责建立、维持、同步会话;
    • 传输层,负责端到端的数据传输;
    • 网络层,寻址、路由;
    • 数据链路层,负责数据的封帧和差错检测,以及 MAC 寻址;
    • 物理层,负责在物理网络中传输数据帧;

    OSI 模型实在太复杂,提出的也只是概念理论上的分层,并没有提供具体的实现方案。

    TCP/IP 网络模型

    应用层

    用层只需要专注于为用户提供应用功能,比如 HTTP、FTP。应用层是不用去关心数据是如何传输的,就类似于,我们寄快递的时候,只需要把包裹交给快递员,我们不需要关心快递是如何被运输的。应用层是工作在操作系统中的用户态,传输层及以下则工作在内核态。

    传输层

    传输层为应用层提供网络支持。传输层的报文中会携带端口号,因此接收方可以识别出该报文是发送给哪个应用。

    网络层

    网络层最常使用的是 IP 协议(Internet Protocol),IP 协议会将传输层的报文作为数据部分,再加上 IP 包头组装成 IP 报文,如果 IP 报文大小超过 MTU(以太网中一般为 1500 字节)就会再次进行分片

    IP 地址分成两种意义:

    • 一个是网络号,负责标识该 IP 地址是属于哪个「子网」的;
    • 一个是主机号,负责标识同一「子网」下的不同主机;

    除了寻址能力, IP 协议还有另一个重要的能力就是路由。两台设备通过很多网关、路由器、交换机等众多网络设备连接起来,数据包到达一个网络节点,就需要通过路由算法决定下一步走哪条路径。

    IP 的寻址作用是告诉我们去往下一个目的地该朝哪个方向走,路由则是根据「下一个目的地」选择路径。寻址更像在导航,路由更像在操作方向盘

    网络接口层

    接下来要交给网络接口层,在 IP 头部的前面加上 MAC 头部,并封装成数据帧。MAC 头部包含了接收方和发送方的 MAC 地址等信息。

    网络接口层主要为网络层提供「链路级别」传输的服务,负责在以太网、WiFi 这样的底层网络上发送原始数据包,工作在网卡这个层次,使用 MAC 地址来标识网络上的设备。

    输入URL后发生了什么?

    DNS 解析

    在域名中,越靠右的位置表示其层级越高。实际上域名最后还有一个点,比如 www.server.com. ,这个最后的一个点代表根域名。

    域名的层级关系类似一个树状结构:

    • 根 DNS 服务器(.)
    • 顶级域 DNS 服务器(.com)
    • 权威 DNS 服务器(server.com)

    任何 DNS 服务器就都可以访问根域 DNS 服务器了。只要能够找到任意一台 DNS 服务器,就可以通过它找到根域 DNS 服务器,然后再一路顺藤摸瓜找到位于下层的某台目标 DNS 服务器。

    域名解析的工作流程:

    浏览器会先看自身有没有对这个域名的缓存,如果有,就直接返回,如果没有,就去问操作系统,操作系统也会去看自己的缓存,如果有,就直接返回,如果没有,再去 hosts 文件看,也没有,才会去问「本地 DNS 服务器」。

    1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
    2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
    3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
    4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
    5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
    6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
    7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
    8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

    协议栈

    应用程序(浏览器)通过调用 Socket 库,来委托协议栈工作。协议栈的上半部分有两块,分别是负责收发数据的 TCP 和 UDP 协议,这两个传输协议会接受应用层的委托执行收发数据的操作。 IP 协议控制网络包收发操作,数据会被切分成一块块的网络包,而将网络包发送给对方的操作就是由 IP 负责的。

    IP 中还包括 ICMP 协议和 ARP 协议

  • 相关阅读:
    Kafka与Spring Boot等应用框架的集成及消息驱动模型
    C++:vector
    Matlab图像处理- 车牌图像数据特征分析
    一文学会线程池、任务调度的使用
    1116 Come on! Let‘s C
    我与java的第一次相识
    【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-Chapter1-初始 Linux Shell
    (13.1)Latex符号表示及公式撰写
    Spring Cloud Gateway 网关的搭建 gateway实现自定义全局过滤器和自定义局部过滤器
    计算机毕业设计ssm创新实践学分管理系统08a30系统+程序+源码+lw+远程部署
  • 原文地址:https://blog.csdn.net/java_beautiful/article/details/127964144