当前位置:   article > 正文

网络是怎样连接的(一)

网络是怎样连接的

一、浏览器与Web服务器间收发消息

1.1 HTTP请求

1.1.1 输入网址

1. URL及URI区别
  • URL(Uniform Resource Locator)统一资源定位符,eg:https://www.csdn.net/image/logo.gif

  • URI(Uniform Resource Identifier)是指统一资源标识符,eg:https://www.csdn.net

    URL是URI的子集

    只要能唯一标识资源的就是URI,在URI的基础上给出其资源的访问方式的就是URL

​ URL是一种具体的URI,它是URI的一个子集,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是 一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位,是绝对的

2.常见的 URL: http、ftp、file、mailto、news

  • FTP: File Transfer Protocol,文件传送协议。这是一种在上传、下载文件时使用的协议。使用 FTP 协议来传送文件的程序也被叫作 FTP。

1.1.4 HTTP

1. http请求方法(http动词)
方法描述
get请求指定的页面信息,并返回实体主体,
post向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST 请求可能会导致新的资源的建立和/或已有资源的修改
head和 GET 基本相同。不过它只返回 HTTP 的消息头(message header),而并不返回数据的内容。用于获取文件最后更新时间等属性信息
options允许客户端查看服务器的性能
put替换 URI 指定的服务器上的文件。如果 URI 指定的文件不存在,则创建该文件
delete删除 URI 指定的服务器上的文件
trace将服务器收到的请求行和头部(header)直接返回给客户端。用于在使用代理的环境中检查改写请求的情况
connect使用代理传输加密消息时使用的方法
patch是对 PUT 方法的补充,用来对已知资源进行局部更新

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F6hvE1hP-1691719688477)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230809154749568.png)]

2.常见的状态码
状态码描述
1XX表示临时响应并需要请求者继续执行操作的状态码
100请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部分。
101请求者已要求服务器切换协议,服务器已确认并准备切换
2XX表示成功处理了请求的状态码
200服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
201请求成功且服务器创建了新的资源
202服务器已接受请求,但尚未处理
203服务器已成功处理了请求,但返回的信息可能来自另一来源 非授权信息
204服务器处理了请求,但没有返回任何内容 无内容
205服务器成功处理了请求,但没有返回任何内容。与 204 响应不同,此响应要求请求者重置文档视图(例如,清除表单内容以输入新内容)重置内容
206服务器成功处理了部分请求 部分内容
3XX要完成请求,需要进一步操作。通常,这些状态码用来重定向
300针对请求,服务器可执行多种操作。服务器可根据请求者选择一项操作,或提供操作列表供请求者选择 多种选择
301请求的网页已永久移动到新位置(旧地址永久移除),服务器返回此响应时,会自动将请求者转到新位置 永久移动,永久性重定向
302服务器目前从不同位置的网页响应请求,旧地址还在,客户继续向旧地址发送请求 临时移动,暂时性重定向
303重定向到新地址时,必须使用get方法请求新地址 暂时性重定向
304从上次的请求后,请求的网页未修改过,服务器返回此响应时,不会再次返回网页内容
305请求者只能使用代理访问请求的页面。如服务器返回此响应,表示请求者应使用代理
307暂时性重定向,与302区别在于307不允许从POST改为GET
4XX请求出错
400服务器不理解请求的语法错误请求
401请求要求身份验证,对于登录后请求的网页,服务器可能返回此响应未授权
403服务器拒绝请求禁止
404服务器找不到请求的网页未找到
405禁用请求中指定的方法方法禁用
406客户端错误,指代服务器端无法提供与 Accept-Charset 以及 Accept-Language 消息头指定的值相匹配的响应不接受
407需要代理授权
408请求超时
409服务器在完成请求时发生冲突,服务器在响应与前一个请求相冲突的PUT请求时可能会返回此状态码,以及两个请求的差异列表。
410已删除,若请求的资源已永久删除,服务器就会返回此状态码
411需要有效长度服务器不接受不含有效内容长度标头字段的请求
412未满足前提条件服务器未满足请求者在请求中设置的其中一个前提条件
413请求实体过大服务器无法处理请求,请求实体过大,超出服务器处理能力
414请求的URI过长,服务器无法处理
415不支持的媒体类型请求的格式不受请求页面的支持
416请求范围不符合要求若页面无法提供请求的范围,则服务器会返回此状态码
417未满足期待值服务器未满足“期望”请求标头字段的要求
5XX服务器错误
500服务器内部错误服务器遇到错误,无法发生请求
501尚未实施服务器不具备完成请求的功能,eg:服务器无法识别请求方法时可能会返回此状态码
502错误网关服务器作为网关或代理,从上游服务器收到无效响应
503服务不可用服务器目前无法使用(超载或停机维护)
504网关超时服务器作为网关或代理,没有及时从上游服务器收到请求
505HTTP版本不受支持服务器不支持请求中所用的HTTP协议版本

1.2 IP地址

1. 简单局域网
  • 交换机用于组建局域网,路由器用于连接外网和内网

  • 局域网:一般称为内网

  • 简单局域网的构成:交换机、网线、PC

  • 交换机:用来组建内网的局域网的设备

2.IP地址
  • 即一个唯一标识,32位二进制
11001010.11000100.00000100.01101010        转换为十进制如下:
202.196.4.106                              称为点分十进制
  • 1
  • 2
  • 在同一局域网中,所有IP必须在同一网段才能进行通信(网络号相同的IP地址,为同一网段)

  • IP地址构成:网络号+主机号

  • 子网掩码:用来确定IP地址的网络位(与255对应的为网络位,与0对应的为主机位

  • 网络地址是一种IP地址,用于标识网络中的一个节点或子网

  • 广播地址是指一种特殊的IP地址,用于将数据包从一个网络中的所有主机传递到另一个网络中的所有主机

  • IP地址是网络中设备的唯一标识,用于在网络中寻址和交互。

  • 子网掩码是用来划分网络地址和主机地址的一种标记。

  • 网络地址是一个IP地址与其子网掩码进行与运算后得到的网络部分的地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系

  • 广播地址是用来向同一网络内的所有设备发送消息的特殊IP地址。(IP地址主机号部分全为0的话,就是网络地址,即整个子网,那么主机号部分全为1的话,就是广播地址)

  • 网段是由同一网络地址和子网掩码组成的一组IP地址的范围。

  • 网关是通往其他网络的出口,是互联网或局域网中的一个交换机或路由器。

  • 在网络通信过程中,数据从源设备传输到网关,再由网关进行转发,最终到达目标设备,实现了不同网络之间的连接和通信。

    img

eg:由IP地址和子网掩码求网络地址,主机地址,主机数,广播地址

IP地址:10.0.10.63     子网掩码:255.255.255.224
  • 1
IP地址=>00001010.00000000.00001010.00111111
子网掩码=>11111111.11111111.11111111.11100000

计算网络地址:将IP地址与子网掩码进行对位与运算
IP地址:10.0.10.00111111
子网掩码:255.255.255.11100000
对位与得到:10.0.10.00100000
即10.0.10.32

计算主机地址:将子网掩码取反,再与IP地址进行对位与运算
子网掩码取反:00000000.00000000.00000000.00011111
进行对位与:  00000000.00000000.00000000.00011111
即0.0.0.31

计算主机数:
最大主机数 = 2^(主机地址的位数)
可用主机数 = 最大主机数 - 2	(主机位全为0是网络地址,全为1是广播地址,所以要减2)
即最大主机数:2^5=32	可用主机数:32-2=30

广播地址:
00001010.00000000.00001010.00111111
该地址主机号(后5位)均为1,该IP地址为一个广播地址
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
3.IP地址分类

地址分类网络地址范围子网掩码适用规模
A类1.0.0.0—127.255.255.255255.0.0.0大型网络
B类128.0.0.0—191.255.255.255255.255.0.0中型网络
C类192.0.0.0—223.255.255.255255.255.255.0小型网络
D类
E类
4.DNS
  • Domain Name System,域名服务系统。将服务器名称和IP地址进行关联。进行域名与IP地址的转化

  • 通过 DNS 查询 IP 地址的操作称为域名解析

  • 对于 DNS 服务器,计算机上有相应的 DNS 客户端,而相当于 DNS 客户端的部分称为 DNS 解析 器,或者简称解析器。负责执行解析(resolution)这一操作的就叫解析器(resolver)。解析器实际上是一段程序,它包含在操作系统的 Socket 库中。

  • 调用解析器后,解析器会向DNS服务器发送查询消息,然后DNS服务器会返回响应消息。响应消息中包含查询到的 IP 地址,解析器会取出 IP 地址,并将其写入浏览器指定的内存地址中。接下来,浏览器在向 Web 服务器发送消息时,只要从该内存地址取出IP地址,并将它与 HTTP 请求消息一起交给操作系统就可以了。

5.解析器内部原理


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2ZHyzpDR-1691719688480)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230810093754918.png)]

1.3 DNS服务器(向DNS服务器发送消息,查询域名对应的IP地址)

1.DNS的基本工作

根据需要查询的域名和记录类 型查找相关的记录,并向客户端返回响应消息

来自客户端的查询消息包含:域名、Class、记录类型

  • 域名:服务器、邮件服务器(邮件地址中 @ 后面的部分)的名称
  • Class:最初设计DNS时方案时,考虑到了互联网外其他网络中的应用,Class就是用来识别网络的信息,现在,其值永远是代表互联网的IN
  • 记录类型:域名代表何种类型的记录,为A时,表域名代表IP地址,为MX时,表邮件服务器, 为PTR时,根据IP地址反查域名,为CNAME时,查询域名相关别名,为NS时,查询DNS服务器IP地址,为SOA时,查询域名属性信息

例如,如果要查询 www.lab.glasscom.com 这个域名对应的 IP 地址,客户端会向 DNS 服务器发送包含以下信息的查询消息。
(a)域名 = www.lab.glasscom.com
(b) Class = IN
(c)记录类型 = A
然后,DNS 服务器会从已有的记录中查找域名、Class 和记录类型全部匹配的记录。
  • 1
  • 2
  • 3
  • 4
  • 5
2.两种查询方式
  • 递归查询:DNS服务器接受到客户机的请求,回复一个精确的查询结果给客户机,若DNS服务器本地没有存储说查询的信息,该服务器将询问其他服务器,不断递归查询,最终返回结果

  • 迭代查询:当客户机发送查询请求时,DNS服务器并不直接回复查询结果,而实告诉客户机另外一台DNS服务器地址,当客户机再向这台DNS服务器提交请求,一次循环直到返回查询结果为止

总结: 一般情况下,从PC客户端到本地DNS服务器属于递归查询;而DNS服务器之间是迭代查询

3.域名的层次结构

互联网中存在大量服务器,将所有的服务器信息全部保存在一台DNS服务器是不现实的,而将其存在多台DNS服务器上又会出现在DNS服务器上找不到要查询的信息的情况

将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中,然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中,以此类推

eg:
负责管理 lab.glasscom.com 这个域的 DNS 服务器的 IP 地址需要注册到 glasscom.com 域的 DNS服务器中,而 glasscom.com 域的 DNS 服务器的 IP 地址又需要注册到 com域的 DNS 服务器中。
这样,我们就可以通过上级 DNS 服务器查询出下级DNS 服务器的 IP 地址,也就可以向下级 DNS 服务器发送查询请求了。
  • 1
  • 2
  • 3

根域:就是一个.点,一般在域名最后面还有一层根域,通常是被省略了,例如:百度的完整域名是www.baidu.com.(全球有13台根域服务器)


对照以上两图,从客户端与服务器端进行分析

1.4 委托协议栈向所要访问的Web服务器发送消息

1.数据收发操作概览
  • 管道两端的数据出入口,称为套接字

  1. 创建套接字(创建套接字阶段)
  2. 将管道连接到服务器端的套接字上(连接阶段)
  3. 收发数据(通信阶段)
  4. 断开管道并删除套接字(断开阶段)
  • 这 4 个操作都是由操作系统中的协议栈来执行的,浏览器等应用程序并不会自己去做连接管道、放入数据这些工作,而是委托协议栈来代劳

  • 这些委托的操作都是 通过调用 Socket 库中的程序组件来执行的,但这些数据通信用的程序组件 其实仅仅充当了一个桥梁的角色,并不执行任何实质性的操作,应用程序 的委托内容最终会被原原本本地传递给协议栈

1.创建套接字
调用Socket库中的socket程序组件,客户端进行套接字的创建,完成后,协议栈将返回一个该套接字描述符(用于识别不同的套接字,应用程序将其存放在内存中)
2.连接
调用Socket库中的connect程序组件,参数:描述符,服务器的Ip地址及端口号
调用connect时,协议栈将执行连接操作,连接成功后,协议栈会将对方(客户端存服务器,服务器存客户端)的IP地址和端口号等信息保存在套接字中
3.通信
调用Socket库中的write程序组件,参数:描述符,发送数据,发送数据长度
- 协议栈将数据发送到服务器。套接字中已经保存了已连接的通信对象的相关信息,所以只要通过描述符指定套接字,就可以识别出通信对象,并向其发送数据。接着,发送数据会通过网络到达我们要访问的服务器。
- 服务器执行接收操作,解析收到的数据内容并执行相应的操作,向客户端返回响应消息
- 当消息返回后,需要执行的是接收消息的操作。通过 Socket 库中的 read 程序组件委托协议栈完成接受消息
4.断开
调用Socket库的close程序组件,连接套接字的“管道”断开,套接字本身被删除
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

描述符是用来在一台计算机内部识别套接字的机制,端口号就是用来让通信的另一方能够识别出套接字的机制

img

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/712185
推荐阅读
相关标签
  

闽ICP备14008679号