note-网络是怎样连接的1 浏览器内部

助记提要
  1. 常见浏览器使用的协议 4种
  2. HTTP方法 8种
  3. 响应状态码类型 5种
  4. 5种IP地址的含义
  5. 域名查找的基本原理
  6. 协议栈发送消息的4个阶段

第1章 浏览器生成消息 探索浏览器内部

1 浏览器输入的URL

  • 常见协议
    http(访问Web服务器),ftp(从ftp服务器下载和上传),file(读取客户端本地文件),mailto(发送电子邮件),news(阅读新闻组的内容)。

  • URL的格式会随着协议的不同而不同。
    访问Web服务器的URL格式:协议://服务器名/数据路径。

数据路径省略文件名时,会读取文件夹下事先设置好的默认文件名。不确定是文件还是文件夹的情况下,有文件则读取文件,无文件会按目录处理。

2 HTTP协议

2.1 URI

表示访问的目标,一般是路径名,指向一个存放网页数据的文件或是一个CGI程序文件。
直接从URL中提取即可。
一条请求中只能写一个URI。获取多个文件,必须对每个文件发送一次请求。

2.2 HTTP的方法

GET,获取URI指定的信息。
POST,向服务器发送数据。
HEAD,与GET相同,但是只返回HTTP消息头,不返回数据内容。用来获取文件最后更新时间等信息。
OPTIONS,通知或查询通信选项。
PUT,替换URI指定的服务器上的文件。文件不存在则新建。
DELETE,删除URI指定的服务器上的文件。
TRACE,把服务器收到的请求行和头部直接返回给客户端。用于在代理时检查改写请求的情况。
CONNECT,使用代理传输加密消息时使用的方法。

2.3 请求和响应消息的结构

请求消息

方法 URI HTTP版本   # 请求行,版本号表示该消息是基于哪个HTTP规格写的
字段:值            # 消息头,请求的附加信息,多行键值对,
...
...
(空行)
消息体             # 消息体,向服务器发送的数据

响应消息

HTTP版本 状态码 响应短语 # 状态行
字段:值            # 消息头
...
...
(空行)
消息体             # 消息体为服务器向客户端发送的数据
2.4 HTTP的主要消息头字段
  • 通用
    Date,请求或响应生成的日期;
    Pragma,表示数据是否允许缓存的通信选项;
    Cache-Control,控制缓存的信息;
    Connection,发送响应后TCP连接是否继续保持;
    Transfer-Encoding,消息主体的编码格式;
    Via,记录途中经过的代理和网关;

  • 请求头
    Authorization,身份认证数据;
    From,请求发送者的邮件地址;
    If-Modified-Since,判断客户端缓存是否过期,过期后才获取新的数据;
    Refer,通过点击超链接进入页面时,Refer记录上一个页面的URL;
    User-Agent,客户端软件的名称和版本号;
    Accept,客户端支持的数据类型,MIME类型表示;
    Accept-Charset,客户端支持的字符集;
    Accept-Encoding,客户端可支持的编码格式,一般是数据的压缩格式;
    Accept-Language,客户端支持的语言;
    Host,接受请求的服务器的IP地址和端口号;
    If-Unmodified-Since,指定日期后数据未更新时执行请求;
    Range,指定数据范围,以仅获取部分数据;

  • 响应头
    Location,表示信息的准确位置。URI为相对路径时,这个字段返回绝对路径;
    Server,服务器程序的名称和版本号;
    WWW-Authenticate,请求的信息存爱访问控制时,返回身份认证用的数据
    Accept-Ranges,使用Range请求部分数据时,服务器告知客户端是否支持此功能;

  • 实体头
    Allow,表示指定的URI支持的方法;
    Content-Encoding,消息体经过压缩等编码时,表示其编码格式;
    Content-Length,表示消息体长度;
    Content-Type,表示消息体的数据类型,以MIME规定的数据类型表示;
    Expires,消息的有效期;
    Last-Modified,数据的最后更新日期;
    Content-Language,消息体的语言;
    Content-Location,消息体在服务器上的位置;
    Content-Range,当仅请求部分数据时,表示数据范围;
    Etag,更新操作中可能需要基于上次的响应数据来发送下次请求。Etag可以用来提供上次响应与下次请求的关联信息。响应时,服务器发给客户端一个唯一标识,下次请求时客户端通过If-Match、If-None-Match、If-Range字段把标识告诉服务器。Etag是将Cookie标准化后的规格。

2.5 响应状态码类型

1xx,告知请求的处理进度和情况;
2xx,请求成功;
3xx,表示进一步操做;
4xx,客户端错误;
5xx,服务器错误;

3 IP地址

3.1 TCP/IP的思路

集线器连接几个计算机组成子网,子网通过路由器组成网络。
网络中每个设备都会分配一个IP地址,通过IP地址可以判断访问的服务器的位置,然后才能发送消息。
发出的消息先经过集线器,转发到最近的路由器上,路由器会根据消息判断下一个路由器的位置,然后再发送到下一个路由器,不断转发直到传给目的地。

3.2 IP地址结构
# IP地址主体
10.11.12.13
# IP地址加子网掩码
10.11.12.13/255.255.255.0
# 使用网络号的比特数表示子网掩码
10.11.12.13/24
# 主机号全部为0,代表整个子网
10.11.12.0/24
# 主机号全部为1,表示对整个子网进行广播
10.11.12.255/24

子网掩码左边一半全是1,右边一半全是0。子网掩码为1的部分是网络号,为0的部分是主机号。

3.3 域名和IP并用的理由

域名比IP地址更容易记,因此由人使用。
IP地址简短且格式统一,能被设备高效处理。
通过DNS进行IP和域名的互查。

3.4 socket库查询IP地址

socket库中的程序组件可以让其他应用程序调用系统的网络功能。域名解析器是socket库中的一种程序组件。

网络应用程序调用解析器后,程序的控制流程回转移到解析器内部。
解析器先生成发送给DNS服务器的查询消息,然后委托给操作系统内部的协议栈执行发送操作。
协议栈执行发送消息的操作,通过网卡把消息发给DNS服务器。
DNS服务器根据消息中的内容进行查询,找到IP地址,返回给客户端。
消息经过网络到达客户端,然后经过协议栈传给解析器。解析器读出其中的IP地址,并将IP地址写到应用程序指定的内存地址中。
控制流程重新回到应用程序。

4 DNS

DNS查询消息的结构

域名,服务器或邮件服务器的名称。
Class,用于识别网络的信息。只会是表示互联网的IN。
记录类型,表示域名对应哪种类型的记录。

4.1 几种记录类型

A:域名对应IP地址
MX:域名对应邮件服务器
PTR:IP对应域名
CNAME:域名对应域名的别名
NS:查询DNS服务器的IP地址
SOA:查询域名属性信息

4.2 域名的层次结构

域名是用句点分隔不同层级的,每个层级都表示一个域,越靠右的域层级越高。
一个域的信息作为一个整体存放在DNS服务器中。

4.3 DNS服务器查找的基本原理

下级域的DNS服务器的IP地址都会注册到他们的上级DNS服务器中,上级DNS服务器的IP地址再注册到更上一级的DNS服务器。客户端通过上级DNS服务器查询到下级DNS服务器的IP地址,就能像下级DNS发送查询请求。
顶级域上面还有根域。根域DNS服务器在全世界仅有13个,它们的地址基本不发生变化。根域DNS的地址在所有的DNS服务器都有保存。

客户端先访问最近的一台DNS服务器,如果其中没有所查询域名对应的信息,DNS服务器会把查询请求转发给根域DNS。
根域中也找不到该域名,但是能判断出域名属于根域下的哪一个域,根域DNS把这个下一级DNS的IP地址返回给离客户端最近的DNS服务器。
最近的DNS又向根域的下一级DNS服务器发出查询请求,下一级DNS找不到域名,会再返回下下级的DNS服务器的IP,以此类推,直到找到目标DNS服务器,得到所查询域名的IP地址,返回给客户端。

DNS能缓存之前查询过的域名。如果查询的域名不在缓存中,接下来可以从缓存的位置开始向下进行,避免每次查询都从根域开始。缓存中的信息有一个有效期,响应时也会告诉客户端是来自缓存还是来自管理该域名的服务器。

5 委托协议栈发送消息

分为4步。

1. 创建套接字

服务器先创建套接字,然后等待客户端向该套接字连接管道。
客户端调用socket组件创建套接字。
之后协议栈会返回一个描述符,应用程序会把描述符存到内存中。描述符用来识别后续使用哪一个套接字。

2. 连接阶段

客户端调用socket库的connect程序组件,委托协议栈将客户端创建的套接字和服务器那边的套接字连接起来。
connect需要三个参数:描述符、IP地址、端口号,然后执行连接操作。
连接成功后,会把服务器的IP地址和端口号保存在涛姐字中。

描述符是应用程序识别使用哪一个套接字的;IP地址和端口号是客户端和服务器之间识别对方套接字的。

3. 通信阶段

应用程序在内存中准备好要发送的数据;
调用socket库的write组件,使用指定的描述符发送数据;
服务器收到数据内容后,解析并做相应的操作,向客户端返回响应信息;
客户端使用socket的read组件把服务器的响应信息存在接收缓冲区中。
接收缓冲区是应用程序内部划分出来的内存空间。

4. 断开阶段

客户端可以调用socket库的close组件。

HTTP协议规定,Web服务器发送完响应消息后,应主动执行断开操作。因此Web服务器会先调用close断开连接。
断开操作传达到客户端后,客户端的套接字也进入断开阶段。
read组件接受完数据后,浏览器得到数据收发结束的消息,就调用close组件。

每获取一个数据都要执行连接、发请求、收响应、断开的操作,效率低。HTTP1.1允许在一次请求中进行多次收发操作。

  • 25
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值