前言:看了计算机网络相关的知识,但是很容易忘记,这里根据自己的看的过程记一下笔记,加深记忆。
1、浏览器对网址进行解析,并根据网址的含义生成请求消息
以访问web服务器为例,解析网址之后,得到web服务器的域名和要访问文件的路径名,接着生成http请求消息。
http协议:
http协议规定了客户端和服务器之间交互消息的内容和步骤。
首先,客户端向服务器发送请求消息,包含“对什么”和“进行什么样的操作”两个部分的内容,“对什么”部分就是要访问的目标,称为“URI”,“进行什么样的操作”部分称为方法,它告诉web服务器要完成什么样的工作。
然后,服务器收到请求消息之后,对其中的内容进行解析,根据URI和方法判断“对什么”“完成什么样的工作”,并根据要求完成自己的工作,将结果放入响应消息中,返回给客户端。
一条请求消息只能包含一个URI,如果要获得多个文件,则需要每个文件各生成一条请求消息。比如一个网页中含有3张图片,则需要发送4条请求消息。一条请求消息获得网页文件,并将文字部分显示在屏幕上,浏览器在显示文字时,搜索相应的标签,当遇到图片相关的标签时会在屏幕上留出用来显示图片的空间,然后再次访问web服务器,请求获得图片文件。
方法中常用的是GET和POST方法。如果是表单,在HTML源代码中会在表单的属性中指定用POST还是GET方法,GET方法最多只能传送几百个字节的数据,如果数据超过这一长度,则要是用POST方法。如果表单的属性指定用GET方法,则可以在请求行的URI后面加上表单中填写的信息一起发送给web服务器,使用的是POST方法,则表单中填写的信息要放在消息体中发送给web服务器。
http请求消息:
请求行(方法 URI HTTP版本号)
消息头(包含附加信息的头字段)
消息体
http响应消息:
状态行(HTTP版本号 状态码 响应短语)
消息头(包含附加信息的头字段)
消息体
状态码:
第一位数字表示状态类型,第二位和第三位数字表示具体情况
1XX:表示请求的处理进度和情况
2XX:成功
3XX:需要进一步操作
4XX:客户端错误
5XX:服务器错误
2、生成http请求消息之后,要进行DNS域名解析,获得要访问的web服务器的IP地址
浏览器调用操作系统中的Socket库中的DNS解析器:gethostbyname(“web服务器域名”); 来对服务器的域名进行解析,具体流程如下:
应用程序运行过程中调用DNS解析器查询web服务器域名对应的IP地址,DNS解析器根据DNS规格生成查询消息,将查询消息委托给操作系统中的协议栈(也叫网络控制软件、TCP/IP驱动、协议驱动等)发送给DNS服务器,DNS服务器接收到查询消息之后,进行查询,并将查询的结果放入响应消息中,响应消息经过网络返回给操作系统中的协议栈,协议栈将接收到的响应消息传递给DNS解析器,DNS解析器从请求消息中读出web服务器域名对应的IP地址,并且将其存入应用程序指定的内存地址中。
委托操作系统的协议栈将DNS查询消息发送给DNS服务器时,也需要提供DNS服务器的IP地址,只不过这个IP地址作为TCP/IP的一个设置项目,已经事先设置好了,不需要再去查询了。
Socket库:用于调用网络功能的程序组件的集合,位于操作系统中。
TCP/IP结构的网络:子网通过路由器连接起来,形成网络。可以认为,几台计算机通过集线器连接在一起,就构成了一个子网,设备比较少时,可以用一台集线器,设备比较多时,可以用多台集线器,并将集线器相互连接起来。凡是通过集线器连接起来的所有设备,都属于同一个子网。
IP地址:32bit数字,由网络号和主机号两部分组成,二者各自占多少个bit没有规定。8bit为一组,分成四组,每一组用十进制表示,中间用“.”隔开。
子网掩码:由于IP地址中网络号和主机号各自占多少bit没有规定,用户可以自行决定,因此需要额外的信息来表示IP地址的内部结构,这一附加信息称为子网掩码。子网掩码和IP地址一样,由32bit组成,左边部分是1,右边部分是0,子网掩码中为1的部分表示网络号,为0的部分表示主机号。可以像IP地址那样,每8bit为一组,以十进制表示,中间用“.”隔开,写在IP地址的右边,IP地址和子网掩码中间以“/隔开”。也可以,将数字1的位数以十进制表示出来,写在IP地址的右边,中间以“/”隔开。
主机号部分如果全部为0,表示整个子网。
主机号部分如果全部为1,表示将包发送给子网中的每一个设备,称为“广播”。
为什么域名和IP地址要并用?
3、DNS解析完成之后,浏览器给操作系统中的网络控制软件提供要访问的web服务器的IP地址,委托操作系统中的网络控制软件(协议栈)将之前生成的http请求消息发送到web服务器。