大三了,这两年多试着去接触了各种东西,也摸索过一些学习方法,最后还是想回归到书本,想多看看书。
以上。
Begin
其实在看《网络是怎样连接的》这本书之前,也把编程珠玑过了一遍,才发现,耐心一点兴趣或许就被培养出来了呢,所以出于对网络的兴趣,再加上想把网络方面的知识理一理,就开看了这本书,讲的通俗易懂,条理清晰。
好吧,开始讲讲看完Chapter one之后学到了什么吧。
Chapter one的title是浏览器生成消息——探索浏览器内部,但其实最主要讲的就是浏览器如何向服务器发出请求,同时服务器对浏览器的回应。当然,在这里,浏览器只是一个栗子,其实就是各种应用程序对服务器的请求及服务器的回应。在这里,主要是讲应用层之间的数据传输(可以理解为虚传输,自己创的词,也不知道有没有,表面上看是两个对等层之间的传输,其实不是这样),主要涉及到的协议就是http协议和DNS了。
首先试着了解几个网络方面的词:
URL:Uniform Resource Locator,统一资源定位符;
ftp:File Transfer Protocal,文件传送协议;
mailto:电子邮件协议;
URI:Uniform Resource Identifer,统一资源标识符;
CGI:对Web服务器程序调用其他程序的规则所做的定义;
先来解释一下url的组成:
用http协议访问Web服务器时,有http://user:password@www.glasscom.com:80/dir/file1.htm
这里的http表示使用的是http协议,user和password是密码,都可以省略,www.glasscom.com是Web服务器域名,80是http的端口号,dir/file1.htm是文件的路径名。
浏览器如何解析url呢?其实就是根据上面url的组成部分一点一点的进行分析,但是我们要注意一些省略文件名的情况,比如以/结尾,代表省略了后面的某个文件名,通常情况下是index.html或者default.html等
解析了url,我们就知道我们想要访问的东西在哪儿了,这时候我们希望服务器能把我们想要的东西送过来。那么首先客户端和服务器得达成一个协议,以http协议为例。
先看看http协议基本思路:其实就是客户端(浏览器)向服务器发送请求消息,这个请求消息包括方法(接下来“进行怎样的操作”)和URI(通过方法和URI来判断“对什么”“进行怎样的操作”),然后服务器响应客户端。(响应消息的开头有一个状态码
http的两种常用方法:get/post
知道了http协议,还是要回到浏览器中来看问题。在确定了服务器和文件名之后,就要生成http请求消息了。
看看请求消息和响应消息的格式
请求消息:
<方法><空格><URI><空格><HTTP版本>//请求行
<字段名>:<字段值>/*消息头
...
...
...*/
<空行>//消息体
<消息体>
响应消息:
<http版本><空格><状态码><空格><响应短语>
<字段名>:<字段值>
...
...
...
<空行>
<消息体>
响应消息的状态码表示响应的状态,1××表示告知请求的处理进度和情况,2××表示成功…
有个很重要的点:一条请求消息中只能写1个URI,如果要获取多个文件,必须对每个文件单独发送1条请求。
比如:一个页面,里面除了文字还有三张照骗,那么就得向服务器请求4次。
生成http请求消息之后,我们要拜托操作系统将请求消息发送给Web服务器,操作系统找服务器的时候,不能直接通过域名访问,而要转化为IP地址,所以这时候就要用DNS寻找服务器对应的IP地址了,这个过程还是比较好理解的,简单来说,域名是存在分级的,先在根域名中寻找一级域名,像这种.cn,.com,.jp等等都是一级域名,我们一级一级的找,最终就可以找到,而且一级域名的数量比较少。(关于DNS怎样通过域名寻找IP可以自行百度,很好理解的~
找到对方服务器的IP之后,就可以委托操作系统内部的协议栈向这个目标IP地址发送消息。
发送消息的过程大概可以分为四个:
1.创建套接字(socket组件
2.将管道连接到服务器端的套接字上(connect组件
3.收发数据(write组件,read组件
4.断开管道并删除套接字(close组件
END