浏览器生成消息——探索浏览器内部
1. 生成HTTP请求消息
引言: 首先从浏览器(网络应用程序等)中的URL开始,浏览器能够根据操作以及URL解析出相应的HTTP请求消息,生成的请求消息包含了:对什么东西、做什么事情的信息。
1.1 网址的含义(URL)
HTTP的含义:支持各种协议(或者是方法)
服务器的域名:域名用一种人能理解的字符来表示web服务器的名字,后通过DNS来获取相应的IP地址
端口号:端口号为了找到相应的套接字,除了用IP地址找到对应的硬件地址,还需要端口号来定位套接字
文件名:定位服务器中对应文件的位置、文件可以是htmll或者是cgi程序
1.2 HTTP消息的生成
请求消息(主要包含对什么、干什么)
请求行
方法:HTTP的主要方法 get post等操作后续用到再查
URI:从URL解析出来的表示了文件或者程序存放在服务器中的地址
HTTP版本:属于哪个版本
**消息头:**通常附加了一些规则消息
消息体: 需要发送的主要内容
一条消息只能有1个URI,多个文件多次获取
响应消息(服务器返回)
状态行
状态码:404
响应短语:Not found
消息头
消息体
例子
2. 向DNS服务器查询Web服务器的IP地址
引言:在获得HTTP消息后需要知道对方的地址,这一块就需要浏览器通过DNS服务器进行查询
IP地址的基本知识
TCP/IP的基本结构
通过IP地址包含了网络号和主机号
IP地址的结构
该结构可以根据子网掩码进行改变
但是IP地址的主机号
全0: 表示整个子网
全1:表示向子网上所有设备发送包,即“广播”
利用DNS系统来讲域名和IP地址相互关联
DNS相当于是一台特殊的服务器,只不过该服务器只是用于提供IP地址查询的服务
Socket库提供查询IP地址的功能
所有的网络应用程序或web浏览器都需要经过Socket来进行与网络进行交互,Socket库中包含了很多用于发送和接受数据的程序组件,是用于调用网络功能的程序组件集合
利用解析器向DNS服务器发出查询
直接在浏览器等网络应用程序的执行代码中调用Socket库中的解析器程序就可以紧接着让操作系统向网络发出消息
解析器与操作系统中的协议栈进行交互控制网卡发送消息
注意:DNS服务器的IP地址是事先设置好的
3. 全世界DNS服务器的大接力
引言:全世界的域名有很多,对应的IP地址也有很多,如何实现多个IP地址的互联与查询?
4. 委托协议栈发送消息
引言:浏览器等应用程序是没有直接向网络发送消息的功能,真正能够实现与网络相连接的是计算机中的操作系统来进行硬件与软件的实现,这一点在利用DNS服务器进行IP地址的查询也体现出来
数据收发操作概览
网络应用程序想要向web服务器发送消息需要通过操作系统的协议栈来进行操作,但是在这之间需要委托Socket来作为桥梁进行连接,而这一章就是讲网络应用程序如何进行委托操作。
整个操作的操作分为如下几个阶段
- 创建套接字(创建套接字阶段)
- 将管道连接到服务器端的套接字上(连接阶段)
- 收发数据(通信阶段)
- 断开管道并删除套接字(断开阶段)
创建套接字阶段
调用socket就可以建立套接字并向应用程序返回相应的描述符
描述符:是网络应用程序与协议栈之间用来识别套接字的编号
应用程序是通过描述符这一类似号码牌的东西来识别套接字的
连接阶段:把管道接上去
连接阶段是可以看到有需要三个参数:描述符、服务器IP地址、端口
描述符 :用来在计算机内部来识别自己的套接字的标识,至于为什么计算机内部不直接使用端口的来表示在后续章节中进行了解
IP地址:用来识别服务器的位置
端口:用来识别对方服务器中的套接字的表示 web是80端口 电子邮件是25端口这个是web服务器事先规定好的,对于如何让web服务器知道客户端的套接字,在创建套接字阶段会同时分配一个端口号给协议栈,协议栈在连接时会通知对方服务器。
通信阶段:传递消息
发送消息
套接字连接后,套接字中就保存了与已连接对象的相关消息,利用write直接向套接字的描述符写入相应的数据,就可以进行数据的传输。
接受消息
将接受到的消息存入到接受缓冲区中