《网络是怎样连接的》读书笔记(一)

前言

放暑假了,我好久没有写博客了,主要是因为整个六月都很忙,忙着去完成编程实训,忙着去期末复习,还有个原因就是自己变懒了,我发现坚持写文章可以使自己勤奋起来,于是我开始了新的旅程……本来想着去深入学习一下计算机网络这门课程,可是我了解到这门课程需要花很多的时间,而我现在的精力主要放在算法与数据结构上面,所以就选择了《网络是怎么连接的》这本计网的入门科普书进行学习


Day01:

整书目录:

 第一章:浏览器生成消息

1.网址中的"www"只是Web服务器上的一种命名 ,是World Wide Web的缩写,它不是一个协议的名字,而是Web的提出者最早开发的浏览器兼HTML编辑器的名字

2.互联网中常见的几种URL(统一资源定位系统(uniform resource locator;URL)是因特网万维网服务程序上用于指定信息位置的表示方法。它最初是由蒂姆·伯纳斯·李发明用来作为万维网的地址。现在它已经被万维网联盟编制为互联网标准RFC1738。):

 浏览器要做的第一步工作就是对URL进行解析:

 在这里介绍一下 http 协议 (资料来自知乎:详细链接

HTTP协议(超文本传输协议HyperText Transfer Protocol),它是基于TCP协议的应用层传输协议,简单来说就是客户端和服务端进行数据传输的一种规则。

HTTP 是一种无状态 (stateless) 协议, HTTP协议本身不会对发送过的请求和相应的通信状态进行持久化处理。这样做的目的是为了保持HTTP协议的简单性,从而能够快速处理大量的事务, 提高效率。

HTTP协议定义了客户端和服务器之间交互的消息内容和步骤,其基本思路非常简单。首先,客户端会向服务器发送请求消息 。请求消息中包含的内容是“对什么”和“进行怎样的操作”两个部分。其中相当于“对什么”的部分称为URI 。一般来说,URI的内容是一个存放网页数据的文件名或者是一个CGI程序[插图]的文件名,例如“/dir1/file1.html”“/dir1/program1.cgi”等 。不过,URI不仅限于此,也可以直接使用“http:”开头的URL 来作为URI。换句话说就是,这里可以写各种访问目标,而这些访问目标统称为URI。

相当于接下来“进行怎样的操作”的部分称为方法,常见的方法如下:

HTTP请求的所发送的数据格式 

 

 写好方法之后,加一个空格,然后写URI。URI部分的格式 一般是文件和程序的路径名。

第二行开始为消息头。尽管通过第一行我们就可以大致理解请求的内容,但有些情况下还需要一些额外的详细信息,而消息头的功能就是用来存放这些信息。消息头的规格中定义了很多项目,如日期、客户端支持的数据类型、语言、压缩格式、客户端和服务器的软件名称和版本、数据有效期和最后更新时间等。

当我们将上述请求消息发送出去之后,Web服务器会返回响应消息。

响应消息的格式请求消息是基本相同的 ,差别只在第一行上。在响应消息中,第一行的内容为状态码和响应短语,用来表示请求的执行结果是成功还是出错。状态码和响应短语表示的内容一致,但它们的用途不同。状态码是一个数字,它主要用来向程序告知执行的结果 ;相对地,响应短语则是一段文字,用来向人们告知执行的结果。

关于状态码,我发现了一篇很好的文章:HTTP状态码详解


Day02

向DNS服务器查询Web服务器的IP地址

生成HTTP消息之后,我们要委托操作系统将消息发送到网络中,在委托操作系统发送消息时,我们查询并提供网址中服务器域名对应的IP地址。

互联网和公司内部的局域网都是基于TCP/IP的思路来设计的:

 号”对应的号码称为网络号,“室”对应的号码称为主机号,这个地址的整体称为IP地址,际的IP地址是一串32比特的数字,按照8比特(1字节)为一组分成4组,分别用十进制表示然后再用圆点隔开。

 主机号部分的比特全部为0或者全部为1时代表两种特殊的含义,主机号部分全部为0代表整个子网而不是子网中的某台设备,主机号部分全部为1代表向子网上所有设备发送包,即广播。

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

查询IP地址的方法非常简单,只要询问最近的DNS服务器。向DNS服务器发出查询,也就是向DNS服务器发送查询消息,并接收服务器返回的响应消息。换句话说,对于DNS服务器,我们的计算机上一定有相应的DNS客户端,而相当于DNS客户端的部分称为DNS解析器,或者简称解析器。通过DNS查询IP地址的操作称为域名解析,因此负责执行解析(resolution)这一操作的就叫解析器(resolver)了。解析器实际上是一段程序,它包含在操作系统的Socket库中。

 接下来,浏览器在向Web服务器发送消息时,只要从该内存地址取出IP地址,并将它与HTTP请求消息一起交给操作系统就可以了。


Day03

DNS服务器的工作

DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。

 除了A和MX这两个记录类型,实际上还有很多其他的类型。例如根据IP地址反查域名的PTR类型,查询域名相关别名的CNAME类型,查询DNS服务器IP地址的NS类型,以及查询域名属性信息的SOA类型等。

信息分布保存在多台DNS服务器中,按照域名以分层次的结构来保存。DNS中的域名都是用句点来分隔的,比如www.lab.glasscom.com,这里的句点代表了不同层次之间的界限。比如www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是“com事业集团glasscom部lab科的www”这样。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。

比如www.lab.glasscom.com这个域名如果按照公司里的组织结构来说,大概就是“com事业集团glasscom部lab科的www”这样。其中,相当于一个层级的部分称为域。因此,com域的下一层是glasscom域,再下一层是lab域,再下面才是www这个名字。

根域不像com、jp那样有自己的名字,因此在一般书写域名时经常被省略,如果要明确表示根域,应该像www.lab.glasscom.com.这样在域名的最后再加上一个句点,而这个最后的句点就代表根域。不过,一般都不写最后那个句点,因此根域的存在往往被忽略,但根域毕竟是真实存在的,根域的DNS服务器中保管着com、jp等的DNS服务器的信息。

 客户端首先会访问最近的一台DNS服务器(也就是客户端的TCP/IP设置中填写的DNS服务器地址),然后进行后续访问。

 有时候并不需要从最上级的根域开始查找,因为DNS服务器有一个缓存[插图]功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。相比每次都从根域找起来说,缓存可以减少查询所需的时间。并且,当要查询的域名不存在时,“不存在”这一响应结果也会被缓存。这样,当下次查询这个不存在的域名时,也可以快速响应。

委托协议栈发送消息

 知道了IP地址之后,就可以委托操作系统内部的协议栈向这个目标IP地址,也就是我们要访问的Web服务器发送消息了。 要发送给Web服务器的HTTP消息是一种数字信息(digital data),因此也可以说是委托协议栈来发送数字信息。向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket库中的程序组件。

收发数据的操作分为四个阶段:

(1)创建套接字(创建套接字阶段)

(2)将管道连接到服务器端的套接字上(连接阶段)

(3)收发数据(通信阶段)

(4)断开管道并删除套接字(断开阶段)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值