参考资料:网络是怎样连接的 【日】户根勤 /著 周自恒 /译

我自己有点网络基础就写的比较简略了

1.生成HTTP请求消息

网址指的就是URL(Uniform Resource Locator,统一资源定位符号),也就是以http://开头的,除了http:以外还有"ftp:" ,“file:”,"mailto"等,表示的是浏览器应该使用的访问方法。
为什么要有各种各样的URL?
虽然我们通常都是使用浏览器访问Web服务器,但是浏览器还能用来在FTP服务器上下载和上传文件,也具备电子邮件客户端的功能。
URL包含什么?
根据需求来,根据访问目标的不同,URL 的写法也会不同例如在访问 Web 服务器和 FTP 服务器时, URL 中
会包含服务器的域名 E 和要访问的文件的路径名等, 而发邮件的 URL 则包含收件人的邮件地址。 此外, 根据需要, URL 中还会包含用户名、 密码、服务器端口号等信息。、

1.浏览器要先解析URL
先对URL解析,才能生成发送给Web服务器的请求消息

**2.使用HTTP协议访问Web服务器的基本思路 **

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

  1. 客户端会向服务器发送请求消息,请求消息包含的内容是"对什么"和"进行怎样的操作"两个部分
    对什么的部分:称为URI( Uniform Resource Identifier,统一资源标识符)URI 的内容是一个存放网页数据的文件名或者是一个 CGI 程序 B 的文件名不深入讲了,陷进去就出不来了
    “进行怎样的操作” 的部分称为方法:方法表示需要让Web 服务器完成怎样的工作, 其中典型的例子包括读取 URI 表示的数据、将客户端输入的数据发送给 URI 表示的程序等
  2. 收到请求消息之后,Web服务器会对其中的内容进行解析,通过 URI和方法来判断“对什么”“进行怎样的操作”,并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。在响应消息的开头有一个状态码,表示操作的成功与否。当我们访问Web服务器的时候,遇到文件找不到的情况就会出现404 Not Found 的错误信息,这就是状态码。

其实请求信息这里没说明白。。。。

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

DNS:域名系统

生成HTTP消息之后,接下来需要委托操作系统将消息发送给Web服务器,在进行这一操作的时候,还要查询网址中服务器域名对应的IP地址。(这里要注意的是在委托操作系统发送消息时,必须要提供的不是通信对象的域名,而是IP),在生成HTTP消息之后,下一个步骤就是根据域名查询IP

1.IP地址基本知识
互联网和公司内部的局域网都是基于TCP/IP的思路来设计的,所以我们先了解TCP/IP的基本思路,TCP/IP的结构如图:

这个结构就是由一些小的子网,通过路由器连接起来组成一个大的网络。这里的子网可以理解成用集线器连接起来的几台计算机,我们将它看成一个单元,称为子网,子网通过网络连接就形成了一个网络。

路由器:一种对包进行转发的设备
集线器:一种对包进行转发的设备,分为中继式集线器和交换式集线器两种。
当计算机数量较少的时候,可以用一台集线器连接;当计算机数量较多的时候,一台集线器可能无法连接这么多计算机,可以增加集线器数量并将集线器相互连接起来,这时,凡是通过集线器连接起来的所有设备都属于同一个子网
一些家用路由器中已经内置了集线器功能,因此大家可以理解为这种路由器内部同时包含路由器和集线器两种设备,它们在里面已经连接起来了。

通过IP地址我们就可以判断出访问对象服务器的位置,从而将消息发送到服务器。发送者发出的消息首先经过子网中的集线器,转发到距离发送者最近的路由器上。接下来,路由器会根据消息的目的地判断下一个路由器的位置,然后将消息发送到下一个路由器,即消息再次经过子网内的集线器被转发到下一个路由器。

IP地址的表示方法不想详细说了,如下图:

2.域名和IP地址并用的理由
书里面写了一大段,最重要的理由就是更好记,访问百度会使用www.baidu.com这个能记住,但是百度的ip地址我反正记不住

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

4.通过解析器其向DNS服务器发出查询
解析器只要从应用程序中进行调用就可以了,就是在编写浏览器等应用程序的时候,只要写上解析器的程序名称“gethostbyname”以及Web服务器的域名就可以了。对于C语言来说gethostbyname其实就是个函数。

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

3.全世界DNS服务器的大接力

1.DNS域名服务器概述
DNS服务器的基本工作就是接收来自客户端的查询消息,然后根据消息的内容返回响应。
来自客户端的查询消息有以下三种:

  • 域名:(就是那个网址,邮件地址中@后面的)
  • Class: 用来识别网络信息
  • 记录类型:表示域名对应何种类型的记录。例如, 当类型为 A 时, 表示域名对应的是 IP 地址; 当类型为 MX 时, 表示域名对应的是邮件服务器。 对于不同的记录类型, 服务器向客户端返回的信息也会不同

    域名是一种层次结构
    比如:www.lab.glasscom.com, 这里的句点代表了不同层次之间的界限, 就相当于公司里面的组织结构不用部、 科之类的名称来划分, 只是用句点来分隔而已 A。 在域名中, 越靠右的位置表示其层级越高, 比如 www.lab.glasscom.com 这个域名如果按照公司里的组织结构来说, 大概就是“com 事业集团 glasscom 部 lab 科的 www”这样。 其中, 相当于一个层级的部分称为。 因此, com 域的下一层是glasscom 域, 再下一层是 lab 域, 再下面才是 www 这个名字。

域名服务器也不可能只有一个,一般都是将一个域作为一个整体存放在一个DNS服务器中,当然也可以将多个域存放在同一服务器中,但是同一个域不能拆分。每一个域下面可以有子域,在com的上面其实还有根域,不像com一样有自己的名字。

这个可以去看书,其实很容易理解

2.DNS域名服务器获取ip地址
互联网中有数万台 DNS 服务器, 肯定不能一台一台挨个去找。 我们可以采用下面的办法。 首先, 将负责管理下级域的 DNS 服务器的 IP 地址注册到它们的上级 DNS 服务器中, 然后上级 DNS 服务器的 IP 地址再注册到更上一级的 DNS 服务器中

如图 1.16 所示, 客户端首先会访问最近的一台 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址), 假设我们要查询 www.lab.glasscom.com 这台 Web 服务器的相关信息(图 1.16 ①)。 由于最近的 DNS 服务器中没有存放 www.lab.glasscom.com 这一域名对应的信息, 所以我们需要从顶层开始向下查找。 最近的 DNS 服务器中保存了根域 DNS 服务器的信息, 因此它会将来自客户端的查询消息转发给根域 DNS 服务器(图 1.16 ②)。 根域服务器中也没有 www.lab.glasscom.com 这个域名, 但根据域名结构可以判断这个域名属于 com 域, 因此根域 DNS 服务器会返回它所管理的 com 域中的DNS 服务器的 IP 地址, 意思是“虽然我不知道你要查的那个域名的地址但你可以去 com 域问问看”。 接下来, 最近的 DNS 服务器又会向 com 域的DNS 服务器发送查询消息(图 1.16 ③)。 com 域中也没有 www.lab.glasscom.com这个域名的信息, 和刚才一样, com 域服务器会返回它下面的 glasscom.com域的 DNS 服务器的 IP 地址。 以此类推, 只要重复前面的步骤, 就可以顺藤摸瓜找到目标 DNS 服务器(图 1.16 ⑤), 只要向目标 DNS 服务器发送查询消息,就能够得到我们需要的答案, 也就是 www.lab.glasscom.com 的 IP 地址了。

通过缓存加快DNS服务器的响应,我理解的就是费劲千辛万苦查一次,就不用在查一次了,要查询的消息已经在缓存中了,可以直接响应了

4.委托协议栈发送消息

知道ip地址之后就可以委托操作系统内部的协议栈向这个目标IP地址,也就是我们要访问的Web服务器发送消息了。要发送给web服务器的http消息是一种数字消息,委托协议栈来完成,这里应该说的是TCP/UDP,和向DNS服务器查询IP地址的操作一样,也使用的是Socket库

收发数据的操作过程应该分为四步:
1.创建
2.连接
3.收发
4.断开
当数据全部发送完毕之后,连接的管道将会被断开,管道的连接是由客户端发起,断开可以由任意一端发起

不想详细写了,学过套接字或者网络编程都应该有了解,后面有时间再深入的写一下,太多要学的了。。。。

网络是怎样连接的学习笔记1----探索浏览器内部(十分适合理清思路)相关推荐

  1. 网络是怎样连接的学习笔记(一)

    第一章.浏览器生成消息-探索浏览器内部 第一章.浏览器生成消息-探索浏览器内部 1.浏览器如何解析网址就是我们的第一个看点.2.浏览器通过请求消息将用户需要哪些数据告知服务器,而请求消息实际的样 子就 ...

  2. 网络是怎样连接的学习笔记(四)

    第四章.通过接入网进入互联网内部 4.1ADSL接入网的结构和工作方式 4.1.1互联网的基本结构和家庭.公司网络是相同的 互联网也是通过路由器来转发包的,而且路由器的基本结构和工作方式与家庭.公司网 ...

  3. 网络是怎样连接的学习笔记——从网线到网络设备

    知识点: 网线 集线器 交换机 路由器 信号在网线和集线器中传输 网络包从客户端计算机发出之后,要经过集线器.交换机和路由器最终进入互联网. 网卡中的PHY(MAU)模块负责将包转换成电信号,信号通过 ...

  4. Java 3D编程实践_Java 3D编程实践——网络上的三维动画[学习笔记]

    评论 # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2006-08-24 23:41 gy # re: Java 3D编程实践--网络上的三维动画[学习笔记] 2007-03-2 ...

  5. 《基于张量网络的机器学习入门》学习笔记7

    <基于张量网络的机器学习入门>学习笔记7 量子算法 什么是量子算法 三个经典量子算法 Grover算法 背景 基本原理 例题 量子算法 什么是量子算法 例如我们求解一个问题,一个111千克 ...

  6. 《基于张量网络的机器学习入门》学习笔记6

    <基于张量网络的机器学习入门>学习笔记6 密度算符(密度矩阵) 具体到坐标表象 在纯态上 在混合态上 纯态下的密度算符 混合态下的密度算符 密度算符的性质 量子力学性质的密度算符描述 第一 ...

  7. 《基于张量网络的机器学习入门》学习笔记5

    <基于张量网络的机器学习入门>学习笔记5 量子概率体系 事件 互斥事件 概率与测量 不相容属性对 相容属性对 量子概率与经典概率的区别 量子测量 量子概率体系 我们将经典的实数概率扩展到复 ...

  8. 《基于张量网络的机器学习入门》学习笔记4

    <基于张量网络的机器学习入门>学习笔记4 量子概率 将概率复数化 分布与向量的表示 事件与Hilbert空间 不兼容属性及其复数概率表示 为什么一定要复数概率 量子概率 将概率复数化 在经 ...

  9. 《基于张量网络的机器学习入门》学习笔记8(Shor算法)

    <基于张量网络的机器学习入门>学习笔记8 Shor算法 来源 Shor算法的大致流程 因数分解 周期求取与量子傅里叶变换(QFT) Shor算法 来源 1994 1994 1994年,应用 ...

  10. comsol与matlab连接使用学习笔记 1 基础设置

    comsol与matlab连接使用学习笔记 1 基础设置 前言 1.安装 COMSOL livlink for Matlab 2.首次运行 前言 以前从来没有用过comsol livelink for ...

最新文章

  1. 一文攻破枚举类型-C语言
  2. SpringCloud(1) 架构演进和基础知识简介
  3. cors跨域_Nginx通过CORS配置实现跨域访问
  4. 将Java向前推进? 一个定义。 一年回顾。
  5. Linux管道和重定向 ---多命令协作
  6. 清华博士庞天宇90页的PPT分享,如何让AI模型更皮实,更稳定?(精彩直播回放)...
  7. wcdma系统随机接入过程的流程图_WCDMA终端的随机接入过程的射频测试
  8. scala method与function的区别
  9. Java集合之map 集合使用
  10. java工程师linux命令大全
  11. 微信小程序----实现YDUI的ScrollTab(滚动选项卡)
  12. 2017-01-27-一句话木马原理详解
  13. c/c++游戏编程之用Easyx绘制图片
  14. 鼠标指针点击光圈特效_PC端手势操作神器——鼠标手势
  15. 双机热备的概念双机热备的概念
  16. win10 NET Framework 3.5(包括.NET 2.0和3.0)错误代码0x800f081f 的解决方法
  17. 五.linux设备驱动模型
  18. 深入理解同步工具类,看这篇就够了
  19. linux awk sed strace,docker 中进行strace的三种方式
  20. 小程序tabbar能放分包路径吗_微信小程序底部导航Tabbar

热门文章

  1. 能自动更新的万能周报模板,有手就会用!
  2. python 共享文件_通过 Python 快速实现局域网内文件共享
  3. SQL 2016——新功能
  4. LabVIEW使用MX Component与三菱PLC建立通讯(以FX5U举例)
  5. Python 操作 DB2 库_亲测可用
  6. java2实用教程第四版pdf下载_Java 2实用教程(第4版)
  7. Delphi 7 ADO使用
  8. 怎樣制作线段动画_几何画板如何做动画,看完明白了
  9. 黑客帝国屏保源码!快拿去试试吧!炫酷无比!
  10. harmonyos 2.0开机动画壁纸,华为鸿蒙OS 2.0开机动画