zoukankan      html  css  js  c++  java
  • 键入网址后,期间发生了什么

    HTTP

    浏览器第一步工作就是对URL进行解析,从而生成发送给Web服务器的请求信息。

    如果没有路径名时,就代表访问根目录下实现设置的默认文件,也就是/index.html 或者/default.html 这些文件, 这样就不会发生混乱。

    生成HTTP请求信息
    对URL进行解析之后,浏览器确定了Web 服务器和文件名,接下来就是对这些信息来生成HTTP请求信息了。

    真实地址查询 —— DNS

    在向web 服务器发送消息的时候需要查询服务器域名对应的IP地址,所以委托操作系统发送消息的时候,必须提供通信对象的IP地址,有一种服务器专门保存了Web 服务器域名与IP 的对应关系,他就是DNS服务器。域名的层级关系类似一个树状结构,1、根DNS 服务器 2、顶级域 DNS 服务器(com) 3、权威 DNS 服务器

    协议栈

    通过 DNS 获取到IP 后,就可以把HTP的传输工作交给操作系统中的协议栈
    协议栈的内部分为几个部分,上下关系是有一定规律的,上面的部分会向下面的部分委托工作,下面的部分受到委托的工作并执行。

    应用程序(浏览器)通过Socket库,来委托协议栈工作,协议栈的上半部分有两块,分别是复制数据的TCP和UDP协议,他们俩会接受应用层的委托执行收发数据的操作。
    协议栈的下面一半是用IP协议控制网络包的收发操作,在互联网上传数据时,数据会被切分成一块一块的网络包,而降网络包发送给对方的操作就是IP负责的。
    其中IP 还包括ICMP 协议和ARP 协议。
    IP 线面的网卡驱动程序负责网卡的硬件,而最下面的网卡则负责实际收发操作,也就是对网线中的信号执行发送和接收操作。

    可靠传输————TCP

    TCP 的报文头部格式:

    • 源端口号和目标端口号是不可少的,如果没有这两个端口号,数据就不知道发给哪个应用。
    • 包的序号,为了解决包乱序问题
    • 包的确认号,目的是确认发出去对方是否有收到,如果没有收到,那么就重新发送,直到发送到达,这个是为了解决不丢包的问题
    • 还有一些状态位,例如SYN 是发起一个连接,ACK 是回复,RST 是重新连接,FIN 是结束连接,等等,TCP是面向连接的,因为双方要维护连接的状态,这些带状态位的包的发送,会引起双方的状态变更。
    • 还有一个重要的就是窗口大小,TCP要做流量控制,通信双方各声明一个窗口(缓存大小)标识自己当前能够的处理能力。
    • 除了做流量控制之外,TCP还会做拥塞控制。
      如果HTTP 的请求消息比较长,超过了MSS的长度,这时TCP就需要把HTTP的数据拆解为一块块的数据而不是一次性的发送所有数据。

      MTU:一个网络包的最大长度,以太网中一般为1500字节
      MSS:除去IP和TCP头部之后,一个网络包能容纳的TCP数据的最大长度。
      被拆分的数据包加上了TCP 头部信息,然后交给IP模块来发送数据。

    远程定位 ———— IP

    TCP模块在执行连接、收发、断开等各阶段操作时,都需要委托IP模块将数据封装成网络包发送给通信对象。
    IP 协议里面需要有 源地址IP 和 目标地址IP
    黄土坡是经过TCP 传输的,所以在IP 报头的协议号,需要填写06(十六进制),表示协议为TCP

    两点传输————MAC

    生成了IP 头部之后,接下来网络包还需要在IP头部加上MAC头部。
    MAC 头部是以太网使用的头部,他包含了接收方和发送方的MAC地址等信息。
    在MAC报头里需要发送方的MAC地址和接收方的MAC地址,用于两点之间的传输。一般MAC报文的协议类型只使用: 0800 IP协议, 0806 ARP协议。
    发送的MAC 地址往往ARP协议。

    出口————网卡

    网卡驱动从IP模块中获取包之后,会将其复制到网卡的缓存中,接着会在其开头加上报头和起始帧分解符,在末尾加上检测错误的帧校验序列。我们需要将数字信号转换为电信号,才可以在网线上传输,

    • 起始帧分解符是一个用来表示包起始位置的标记
    • 末尾的 FCS 用来检查包传输过程中是否有损坏

    交换机————送别者

    交换机的端口不具有MAC 地址,交换机将电信号转换为数字信号,然后通过包的FCS校验错误,如果没有问题则放到缓冲区,这部分操作基本与计算机的网卡差不多。交换机的MAC地址表主要包含两个信息:

    • 一个是设备的MAC地址
    • 一个是该设备连接在交换机的那个端口上。
      所以交换机根据MAC地址表查找MAC 地址,然后将信号发送到相应的端口。

    路由器

    路由器的端口具有MAC地址,因此它能够成为以太网的发送方和接收方;同时还具有IP 地址,从这个意义上来说,它和计算机的网卡是一样的。
    当转发包时,首先路由器端口会接受发给自己的以太网包,然后路由表查询转发目标,再由相应的端口作为发送方将以太网包发送出去。

    • 路由器的包接受操作
      ++ 首先电信号到达网线接口部分,路由器中的模块会将电信号转换为数字信号,然后通过包末尾的FCS进行错误校验
      ++ 如果没有问题则检查MAC头部中的接收方MAC地址,看看是不是发给自己的包,如果是就放到接受缓冲区中,否则就丢弃这个包
    • 查询路由表确定输出端口
      MAC 头部的作用就是将包送达路由器,其中的接收方的MAC地址就是路由器端口的MAC地址。因此当包到达路由器之后,MAC头部的任务就完成了,于是MAC 头部就会被丢弃, 接下来路由器会根据MAC头部后方的IP头部中的内容进行包的转发操作。
      转发操作分为几个阶段,首先是查询路由表判断转发目标:

      每个条目的子网掩码和目标IP进行与运算之后,得到的结果与对应条目的目标地址进行匹配,如果匹配就会作为候选转发目标,如果不匹配就继续与下个条目进行路由匹配。实在找不到路由时,就会选择默认路由,路由表中的子网掩码为0.0.0.0表示默认路由。
    • 如果网关是一个IP地址,则这个IP 地址就是我们要转发到的目标地址,还未抵达终点,还需要继续由路由器转发
    • 如果网关为空,说明IP欧布中的接收方IP地址就是我们要转发到的目标地址,也就是说到达了目标点。
      在整个过程中源IP和目标IP是始终不变的,一直变化的是MAC 地址,因为需要MAC地址在以太网内进行两个设备之间的传输。
  • 相关阅读:
    AtCoder Beginner Contest 205
    Codeforces Round #725 (Div. 3)
    Educational Codeforces Round 110 (Rated for Div. 2)【A
    Codeforces Round #722 (Div. 2)
    AtCoder Beginner Contest 203(Sponsored by Panasonic)
    AISing Programming Contest 2021(AtCoder Beginner Contest 202)
    PTA 520 钻石争霸赛 2021
    Educational Codeforces Round 109 (Rated for Div. 2)【ABCD】
    AtCoder Beginner Contest 200 E
    Educational Codeforces Round 108 (Rated for Div. 2)【ABCD】
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/14543661.html
Copyright © 2011-2022 走看看