• 键入网址后,期间发生了什么


    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地址在以太网内进行两个设备之间的传输。
  • 相关阅读:
    mybatis中使用in查询时的注意事项
    单利模式
    jquery编写插件的方法
    python使用sendmail在linux下发送邮件
    python获取命令行输入参数列表
    互联网的实名与匿名
    Python切分字符串
    2017年3月15日留言 ——关于Java卡Applet系列csdn博文
    linux设置定时任务
    经典面试题:用户反映你开发的网站访问很慢可能会是什么原因
  • 原文地址:https://www.cnblogs.com/wsl-hitsz/p/14543661.html
Copyright © 2020-2023  润新知