网络是如何连接的——浏览器生成消息

网络是如何连接的——浏览器生成消息

1. 生成HTTP请求消息

URL的组成:协议,服务器主机地址(ip地址),端口,路径,参数

  • 协议:常用的http,https,ftp(文件传输协议),file(读取计算机本地文件),mailto(发送邮件)
  • 服务器主机的地址:可以是主机名,可以是域名,或者是ip地址。
  • 端口:默认不展示端口号,但是会有默认的端口号,比如http请求的端口号是80,mysql的端口号是3306
  • 路径:访问的资源在服务器下的相对路径,不是在服务器的绝对路径,是服务器上的一个目录或者文件地址
  • 参数:客户端向服务器端传输的需要查询的参数

浏览器如何解析URL:

  • 解析访问数据的协议

  • 解析Web服务器名

  • 根据路径访问服务器上该资源所在的位置

    存在路径为空的情况,省略了文件名的情况(eg:https://www.baidu.com/): 大多数情况默认访问的是 /index.html或者default.html

    省略掉"/"的情况(eg:https://www.baidu.com/heyuting),如果前面有该文件(heyuting),则将其作为文件名来处理,如果存在该目录名(heyuting),就将其作为文件名来处理

生成HTTP请求消息:

网络是如何连接的——浏览器生成消息
发送请求以后会收到响应

  • 一条请求消息中只能写一个URI,如果要获取多个文件,必须要对每个文件单独发一条消息

2. 向DNS服务器查询Web服务器的ip地址

生成HTTP请求以后,需要委托操作系统将消息发送给WEB服务器;在此之前,要根据域名查询IP地址

IP地址的组成:

1⃣️:10.1. 2. 3 网络号:10.1.2 主机号:3
2⃣️:IP的主机号:
全0:表示整个子网
全1: 表示向子网上所有设备发送包,即"广播"
为什么要使用IP和域名并用

域名可能需要十几个字节,而IP只有4个字节,这增加了路由器了负担
于是我们让人使用名称,让路由器来使用IP地址,解决这一并行问题的就是DNS

Socket库提供查询IP地址的功能

  • DNS解析器:可以理解为计算机上的DNS客户端

解析器实际上是一段程序,在操作系统的Socket库(用于调用网络功能的程序组件集合)中

  • 调用解析器:解析器的会向DNS服务器发送查询消息,DNS服务器会返回响应消息,包括IP地址,解析器会将IP地址写入指定的浏览器地址中

  • 浏览器向服务器发送消息的时候,从内存中取出IP地址,和HTTP消息一块交给操作系统就可以了

  • 解析器内部工作原理:

    网络是如何连接的——浏览器生成消息

  • DNS的IP地址也需要提前知道,但是DNS的IP地址已经提前设置好了

3.进入DNS的服务器中查询ip地址

DNS的基本工作就是接收来自客户端的查询消息,客户端发来的消息包含:

  • 域名

  • Class : 代表互联网IN

  • 记录类型:为A的时候,表示域名对应的IP地址;当类型为MX的时候,表示域名对应的邮件服务器
    (IP反查域名的类型:CNAME,查询DNS的IP地址类型:NS)

    1. DNS服务器会从域名与IP地址的对照表中查找相应的记录,并且返回IP地址

    2. 一个域是一个不可分割的整体,只能保存在一个DNS服务器中,不过DNS和域并不是总是一对一的。一台DNS服务器中也可以存放多个域的信息


寻找相应DNS服务器并获取IP地址

从根目录开始的找下一层级的DNS,一直到低级别的域,来寻找到DNS服务器

DNS的根域: 在*域名后面省略了一个**"."** 全球分配给根域的服务器只有13台,并且只要安装了DNS服务器程序,根域的配置就已经自动配置好了

网络是如何连接的——浏览器生成消息


DNS的缓存,加快响应

无论能否查询到域名,哪怕不存在也会被缓存,当下次查询不存在的域名的时候都可以快速响应

4. 委托协议栈发送消息

  • 向操作系统内部的协议栈发出委托的时候,需要按照指定的顺序调用Socket库中的程序组件

  • 收发数据的操作:

    1. 创建套接字:套接字可以描述为两段传输数据的入口
    2. 将管道连接到服务器端的套接字上(连接阶段)
    3. 收发数据
    4. 断开管道并删除套接字(断开阶段)

套接字创建: 调用socket之后,会执行创建套接字的操作

网络是如何连接的——浏览器生成消息应用程序是通过"描述符"来识别套接字

连接阶段

委托协议栈将客户端创建的套接字与服务器端的套接字连接起来

应用程序通过调用Socket库中名为connect的程序,调用connect时,需要指定描述符、服务器IP地址和端口
号,这3个参数

为什么已经知道了IP还要知道端口号:

因为在实际客户端和服务器端的通讯中,会创建的多个套接字,要通过指定的端口号、IP来区分。

描述符和端口号、IP地址:

描述符的作用,适用于应用程序(本机内部)去识别一个套接字的机制

端口号、IP地址:客户端和服务器端用来识别对方的套接字的机制

通信阶段:

套接字连接起来以后,只要将数据接入套接字,数据就会被发送到对方的套接字中,需要调用socket中的write这个程序组件。指定描述符和发送的数据

服务器接收数据,调用Socket中的read程序组件委托协议栈来完成。read接收的消息存放到响应消息的内存地址,这一内存地址成为接收缓存区,接收缓存区是一块位于应用程内部的内存空间,消息存放到这里,就相当已经给了应用程序

断开阶段

调用Socket库中的close程序组件进入断开阶段,连接在套接字之间的管道会被断开,套接字本身也会被删除

5. http和https的区别

  • Https协议需要到ca申请证书,也需要费用
  • http是超文本传输协议,是明文传输。https是ssl加密协议
  • https和http的连接方式完全不同,用的端口不一样,前者是80,后者是443
  • http是无状态连接,https协议是SSL+HTTP协议构建的可加密传输、身份认证的网络协议,比较安全

SSL/TLS协议基本原理

过程:

  1. 客户端向服务器索要并验证公钥(客户端给出协议的版本号,生成一个的随机数,以及客户端支持的加密方式)

  2. 双方协商生成"对话**"

  3. 双方采用"对话**"进行加密通讯

    对话**:

    • 客户端给出协议的版本号,生成一个的随机数,以及客户端支持的加密方式

    • 服务器端确定双方使用的加密方式,给出数字证书(公钥在数字证书中)、以及服务器生成的随机数

    • 客户端开始协商SSL/TLS等级,建立会话**,利用公钥将会话**加密,并传送网络

    • 服务器用自己私钥进行解密,得到对称**

    • 双方都知道了对方**,可以进行进行通讯