《网络是怎样连接的》阅读笔记(1),计算机网络基础知识小结笔记。

首先,应该承认这本书写得是不错的。但是我读电子版读起来的感觉就是太累,累的原因是作者行文的时候是行云流水的从头到尾。其中可能会因为一些需要了解的知识额外补充很长的篇幅,导致你阅读是忘记自己到底阅读到网络的哪一步了。

这只是我的自己在阅读时的一些摘要,笔记,和一些自己的理解。主要作为时用于记录自己学习的过程,如果能对你有帮助,那就太好了!

当然了,我记录的这些内容并不完整,看到哪记到哪,如果有错误的地方非常希望大家指正。

《网络是怎样连接的》阅读笔记(2),计算机网络基础知识小结笔记。


如果你需要这本书的pdf非扫描版本的话可以点赞留言,然后私信我,我看到后会及时给你发过去。


http://www.——————/ 中的www 代表World Wide Web 协议(对通信操作规则所作的定义


www只是Web服务器上的一种命名。
所谓网址,其实是叫 URL (URL:Uniform Resource Locator,统一资源定位符。)

浏览器:

1、访问URL;
2、在FTP( FTP:File Transfer Protocol,文件传送协议。)服务器上下载和上传文件;3、电子邮件客户端功能。
因为浏览器需要不同的URL来判断*浏览器应当使用的访问方法:*及使用协议的类型
如 “http:” “ftp:” “file:” "mailto:"等。
访问Web 服务器时用“http:”,而访问FTP服务器时用“ftp:”。
Web服务器端口号:80
FTP协议端口号:21
邮件端口号:25

浏览器工作:

1、浏览器解析URL

通过解析URL,得到访问的目标在哪里。解析完以后浏览器通过HTTP协议访问Web服务器

HTTP协议

HTTP 协议定义了客户端和服务器之间交互的消息内容和步骤。

1.1客户端向服务器发请求消息

请求消息包含两部分:
1.1.1 “对什么”——称为URI(URI:Uniform Resource Identifier,统一资源标识符。)URI 的内容是一个存放网页数据的文件名或者是一个CGI(CGI程序:对Web 服务器程序调用其他程序的规则所做的定义就是CGI,而按照CGI 规范来工作的程序就称为CGI 程序。)

1.1.2 “进行什么样的操作”——称为方法,也即需要让服务器完成什么样的操作。

1.2、收到请求消息后,服务器解析其内容

根据URI和方法来完成自己的工作,然后将结果放在响应消息中。
相应消息开头有一个操作码,用来表示操作的执行结果成功或错误。
404 Not Found就是一状态码。

1.3、客户端收到相应消息后,浏览器读取消息

2、生成HTTP请求消息

1 条请求消息中只能写1个URI。如果需要获取多个文件,必须对每个文件单独发送1 条请求。

Web服务器返回响应消息 :第一行内容为状态码相应短语,二者表示的内容一致,但用途不同。状态码是一个数字,告诉程序执行的结果;相应短语则是一段文字,向人们告知执行结果。
生成HTTP消息后,需要委托操作系统将消息发送给Web服务器,浏览器不具备将消息发送到网络中的功能,进行该操作时,需要

查询网址中服务器域名对应的IP地址

使用IP地址而不是直接使用名称:因为名称过于长,而且长度而不一样。效率低下。

DNS :制能够通过名称来查询IP地
址,或者通过IP地址来查询名称。
DNS:DNS:Domain Name System,域名服务系统。将服务器名称和IP 地址进行
关联是DNS 最常见的用法,但DNS的功能并不仅限于此,它还可以将邮件地址和邮件服务器进行关联,以及为各种信息关联相应的名称。

DNS服务器,DNS客户端(在我们的个人电脑上)
域名解析:通过DNS查询IP地址

解析器(resolver):负责执行解析(resolution)的一段程序,包含在操作系统的Socket库中。

:通用程序组件的集合。1、节省编程工作量;2、实现程序标准化等。
Socket 库提供查询IP 地址的功能
Socekt库:用于调用网络功能的程序组件集合。可让其他应用程序调用操作系统的网络功能。解析器就是该库中的一种程序组件。

根据域名查询IP 地址时,浏览器会使用Socket 库中的解析器。
调用解析器 →
解析器向DNS服务器发送查询消息 →
DNS服务器返回响应消息(包含查询到的IP地址) →
解析器取出IP地址,写入指定的内存地址中

程序控制流程转移:由于调用了其他程序,原本运行的程序进入暂停状态,而被调用的程序开始运行。

解析器发送消息这个操作并不是由解析器自身来执行,而是要委托给操作系统内部的协议栈(协议栈:操作系统内部的网络控制软件,也叫"协议驱动""TCP/IP 驱动"等。)来执行

DNS服务器地址:向DNS服务器发送消息时,我们当然也需要知道DNS服务器的IP 地址。只不过这个IP地址是作为TCP/IP 的一个设置项目事先设置好的,不需要再去查询了。

DNS服务器的基本工作就是根据需要查询的域名和记录类型查找相关的记录,并向客户端返回响应消息。

DNS 服务器会从域名与IP 地址的对照表中查找相应的记录,并返回IP地址。

DNS中的信息时 按照域名分层次的结构 保存

DNS服务器众多,一台存不下所有需要的信息,所有可以将信息分布保存在多台DNS服务器中,这些DNS服务器相互接力配合,从而找出需要查询的信息。

域名中,以"."来分割不同的域,越靠右表示其层级越高。且每个域时作为一个整体来处理,作为一个整体存放在DNS服务器中,不可拆分。当然,一台DNS服务器中也可以存放多个域的信息。
这样一来,DNS服务器也具有了像域名一样的层级结构,每个域的信息对应存在相应层级的DNS服务器中。

寻找相应的DNS服务器并获取IP地址

负责管理下级域的DNS服务器的IP地址注册到它们的上级DNS服务器中,然后上级DNS服务器的IP地址再注册到更上一级的DNS服务器中以此类推。这样,我们就可以通过上级DNS 服务器查询出下级DNS服务器的IP地址,也就可以向下级DNS服务器发送查询请求了。

com和jp的上面还有一级域,称为根域
根域没有自己的名字,通常省略。若要明确表示则在域名最后加一个句点’.’

根域的DNS 服务器中保管着com、jp 等的DNS服务器的信息。由于上级DNS 服务器保管着所有下级DNS服务器的信息,所以我们可以从根域开始一路往下顺藤摸瓜找到任意一个域的DNS 服务器。

需要将根域的DNS服务器信息保存在互联网中所有的DNS服务器中
这样一来只要客户端找到任意一台DNS服务器,就可以通过它找到根域DNS服务器,就可以顺藤摸瓜找到位于下层的某台DNS服务器。

DNS服务器有也缓存功能。
要查询的域名不在缓存中时,成功查询后的响应结果也要添加到缓存中。
信息被缓存后,原本的注册信息可能会发生改变,这时缓存中的信息就有可能是不正确的

缓存有一个有效期,当缓存中的信息超过有效期后,数据就会从缓存中删除。

对查询相应时,DNS服务器也会告知客户端这一响应的结果是来自缓存中还是来自负责管理该域名的DNS服务器。

委托协议栈发送消息

向操作系统内部的协议栈发出委托时,需要按照指定的顺序来调用Socket 库中的程序组件。
1、服务器先创建好套接字,然后等待客户端向该套接字连接管道。(服务器程序一般会在启动后就创建好套接字并等待客户端连接管道。)
2、当服务器进入等待状态时,客户端就可以连接管道了。
3、客户端也会先创建一个套接字,然后从该套接字延伸出管道,最后管道连接到服务器端的套接字上。
4、当双方的套接字连接起来之后,通信准备就完成了。
5、只要将数据送入套接字就可以收发数据了。
6、当数据全部发送完毕之后,连接的管道将会被断开。
7、管道在连接时是由客户端发起的,但在断开时可以由客户端或服务器任意一方发起。
8、其中一方断开后,另一方也会随之断开,当管道断开后,套接字也会被删除。

summary
(1)创建套接字(创建套接字阶段)
(2)将管道连接到服务器端的套接字上(连接阶段)
(3)收发数据(通信阶段)
(4)断开管道并删除套接字(断开阶段)

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

应用程序是通过“描述符”这一类似号码牌的东西来识别套接字的。

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

需要委托协议栈将客户端创建的套接字与服务器那边的套接字连接起来。
应用程序通过调用Socket 库中的名为connect 的程序组件来完成这一操作。
这里的要点是当调用connect 时,需要指定描述符、服务器IP 地址和端口号这3 个参数。
描述符:应用程序用来识别套接字的机制
IP地址和端口号:客户端和服务器之间用来识别对方套接字的机制

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

1、应用程序需要在内存中准备好要发送的数据。根据用户输入的网址生成的HTTP 请求消息就是我们要发送的数据。
2、当调用write时,需要指定描述符和发送数据,然后协议栈就会将数据发送到服务器。由于套接字中已经保存了已连接的通信对象的相关信息,所以只要通过描述符指定套接字,就可以识别出通信对象,并向其发送数据。接着,发送数据会通过网络到达我们要访问的服务器。
3、接下来,服务器执行接收操作,解析收到的数据内容并执行相应的操作,向客户端返回响应消息。
4、当消息返回后,需要执行的是接收消息的操作。接收消息的操作是通过Socket库中的read程序组件委托协议栈来完成的。调用read 时需要指定用于存放接收到的响应消息的内存地址,这一内存地址称为接收缓冲区。。由于接收缓冲区是一块位于应用程序内部的内存空间,因此当消息被存放到接收缓冲区中时,就相当于已经转交给了应用程序。

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

当浏览器收到数据之后,收发数据的过程就结束了。我们需要调用Socket 库的close 程序组件进入断开阶段。最终,连接在套接字之间的管道会被断开,套接字本身也会被删除。
1、Web 使用的HTTP 协议规定,当Web 服务器发送完响应消息之后,应该主动执行断开操作。因此Web 服务器会首先调用close 来断开连接。
2、断开操作传达到客户端之后,客户端的套接字也会进入断开阶段。
3、当浏览器调用read 执行接收数据操作时,read 会告知浏览器收发数据操作已结束,连接已经断开。浏览器得知后,也会调用close 进入断开阶段。

HTTP 协议将HTML 文档和图片都作为单独的对象来处理,每获取一次数据,就要执行一次连接、发送请求消息、接收响应消息、断开的过程。

后来人们又设计出了能够在一次连接中收发多个请求和响应的方法。在HTTP 版本1.1 中就可以使用这种方法,在这种情况下,当所有数据都请求完成后,浏览器会主动触发断开连接的操作。

你可能感兴趣的:(计算机网络)