网络:由负责搬运数字信息的机制 + 浏览器和服务器这些网络应用程序。

web->协议栈,网卡->交换机,路由器->接入网,网络运营商->(防火墙,缓存服务器)->web服务器。


第一章 探索browser内部

浏览器生成message

  1. 生成HTTP request message
  2. ask DNS server  Web server IP address
  3. 全世界DNS服务器大接力
  4. 委托协议栈发送消息






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

如:图片<img src='xxx'>


HTTP message 示例:


1.2 DNS工作

在网址中不写服务器的名字,直接写 IP 地址可以吗?

可以,但是,

1.难记。 2.效率。IP地址只需要4个字节的数字,而域名多的多。

因此,让路由器使用IP, 让人使用域名,人机双方的效率最好,这个机制就是DNS(Domain Name System)

计算机上有一个解析器(DNS客户端),它存在于操作系统中的Socket库中。通过解析器向DNS服务器发出查询,得到ip地址。


解析器内部原理:

控制流程转移:

一般应用程序代码从上往下执行。当调用了其他程序,原本运行的程序进入暂停状态,而被调用的程序开始运行。

计算机的内部结构就是这样一层一层的。

也就是说,很多程序组成不同的层次,彼此之间分工协作。

当接到上层派的操作时,本层的程序并不会完成所有的工作,而是会完成一部分工作,再将剩下的部分派到下层来完成。

DNS服务器的IP地址是设置在操作系统中的,可以在进行修改。


1.3全世界DNS大接力

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

1.32域名存在层次结构

因为服务器的信息不可能只保存在一台DNS中,所以需要分布保存在多个DNS服务器中,它们相互配合接力,从而找出查询的结果。

根域名,顶级域名,二级域名,三级域名。每个域都是作为一个整体保存在一台DNS中的,不能拆开。

但这个域的下级域可以有多个,并存放在不同的DNS中。

例子:

www.nikkeibp.co.jp 这个域 名,最上层的 jp 代表分配给日本这个国家的域;下一层的 co 是日本国内 进行分类的域,代表公司;再下层的 nikkeibp 就是分配给某个公司的域; 最下层的 www 就是服务器的名称。

图1.12的5,6步骤。就是本图的1,6部分。

1.34通过cache加快DNS的相应

DNS 服务器有一 个缓存功能,可以记住之前查询过的域名。如果要查询的域名和相关信息已经在缓存中,那么就可以直接返回响应,接下来的查询可以从缓存的位置开始向下进行。缓存可以减少查询所需的时间。

这一技术有很多应用,如 CPU 和内存之间的缓存、磁盘和内存之间的缓存等,在网络中缓存也是一种用 来提高访问速度的普遍性技术。

缓存是有一个有效期,当到期后,数据从缓存中删除。


1.4委托协议栈发送消息

知道了 IP 地址之后,就可以委托操作系统内部的协议栈向这个目标 IP 地址,也就是我们要访问的 Web 服务器发送消息了:

收发数据的两台计算机之间建立一条数据通道。建立通道的关键是通道两端的数据出入口, 套接字。

  1. 服务器程序在启动后创建套接字,并等待客户端连接管道。
  2. 客户端创建套接字,然后从该套接字延伸出管道,最后连接到服务器的套接字上。连接阶段完成。
  3. 收发数据。
  4. 断开管道并删除套接字。任意一端都可以发起断开。

⚠️:这四个操作是由协议栈执行的。

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

对于同一台服务器来说,重复连接和断开显然是效率很低的, 在http1.1中有一次连接中收发多个请求和响应的方法。在这种情况下,当所有数据都请求完成后,浏览器会主动触发断开连接的操作。

实际负责发收消息的是协议栈,网卡驱动和网卡,三者配合,数据才会在网络中流动。

<<网络是怎样连接的>>笔记第一章browser生成message的更多相关文章

  1. Android开发艺术探索笔记——第一章:Activity的生命周期和启动模式

    Android开发艺术探索笔记--第一章:Activity的生命周期和启动模式 怀着无比崇敬的心情翻开了这本书,路漫漫其修远兮,程序人生,为自己加油! 一.序 作为这本书的第一章,主席还是把Activ ...

  2. Android群英传笔记——第一章:Android体系与系统架构

    Android群英传笔记--第一章:Android体系与系统架构 图片都是摘抄自网络 今天确实挺忙的,不过把第一章的笔记做一下还是可以的,嘿嘿 1.1 Google的生态圈 还是得从Android的起 ...

  3. C++ Primer 笔记 第一章

    C++ Primer 学习笔记 第一章 快速入门 1.1 main函数 系统通过调用main函数来执行程序,并通过main函数的返回值确定程序是否成功执行完毕.通常返回0值表明程序成功执行完毕: ma ...

  4. 《图解HTTP》阅读笔记---第一章网络基础

    第一章.网络基础TCP/IP:----------传输控制协议Transmission Control Protocol / 网络协议Internet Protocol是一种用于Internet(因特 ...

  5. 《css3实战》读书笔记 第一章 基于CSS需求而编写的HTML.

    笔记说明 <CSS3实战手册第3版(影印版)>可以消除Web设计工作的痛苦,并且带给你:HTML--重新入门.如果你是HTML新手,你会学到如何以CSS友好的方式进行基本页面构造.若你是H ...

  6. 《深入理解计算机系统》(CSAPP)读书笔记 —— 第一章 计算机系统漫游

    本章通过跟踪hello程序的生命周期来开始对计算机系统进行学习.一个源程序从它被程序员创建开始,到在系统上运行,输出简单的消息,然后终止.我们将沿着这个程序的生命周期,简要地介绍一些逐步出现的关键概念 ...

  7. Java学习笔记 第一章 入门<转>

    第一章 JAVA入门 一.基础常识 1.软件开发 什么是软件? 软件:一系列按照特定顺序组织的计算机数据和指令的集合 系统软件:DOS,Windows,Linux 应用软件:扫雷.QQ.迅雷 什么是开 ...

  8. 《跟我学Shiro》学习笔记 第一章:Shiro简介

    前言 现在在学习Shiro,参照着张开涛老师的博客进行学习,然后自己写博客记录一下学习中的知识点,一来可以加深理解,二来以后遗忘了可以查阅.没有学习过Shiro的小伙伴,也可以和我一起学习,大家共同进 ...

  9. OpenGL笔记<第一章> 构建 GLSL class

    恭喜,我们终于很扎实地完成了第一章——glsl 入门 不幸的是,it's not the basic of GLSL shader ,我们下一节开篇,basic of GLSL shader 在下一章 ...

随机推荐

  1. MySQL删除数据表中重复数据

    今天遇到一个问题,数据表的数据有重复的,关键原因在于新增数据时,没有根据条件先判断数据是否存在,当数据存在时进行有关条件的更新,不存在时做新增数据. 对于表中已经存在的数据处理办法的方法: 1.先根据 ...

  2. Docker企业级仓库Harbor的安装配置与使用

    Harbor是一个用于存储和分发Docker镜像的企业级Registry服务器,通过添加一些企业必需的功能特性,例如安全.标识和管理等,扩展了开源Docker Distribution.作为一个企业级 ...

  3. 13.Github使用

    我们一直用GitHub作为免费的远程仓库,如果是个人的开源项目,放到GitHub上是完全没有问题的.其实GitHub还是一个开源协作社区,通过GitHub,既可以让别人参与你的开源项目,也可以参与别人 ...

  4. 第1章 1.6计算机网络概述--OSI参考模型

    ISO七层模式:国际标准组织对互联网通信规则进行的定义. 7.应用层:所有能产生网络流量的程序,如:QQ. 6.表示层:传输前对数据进行进行处理,是一种数据处理的规则,如:加密.压缩.传输二进制(图片 ...

  5. ROS,launch学习

    想象一下,如果一个ros工程里包含几十个节点,我们在命令行窗口一个个的开启它们,是一件多么耗时间,多么没有意义的浪费. launch功能可以解决这一问题,启动launch文件时ROS中非常重要的,有用 ...

  6. testng日志和报告

    TestNG是通过 Listeners 或者 Reporters 生成测试报告. Listeners,即 org.testng.ITestListener 的实现,能够在测试执行过程中发出各种测试结果 ...

  7. Linux_Chrome出现Adobe Flash Player is out of date解决方法

    在安装Google的Chrome后都有出现Adobe Flash Player is out of date的问题. Chrome浏览器用的播放器插件是PepperFlashPlayer.而且是内置的 ...

  8. Python的星号(*)和双星号(**)用法

    ①引言 在Python中,星号除了用于乘法数值运算和幂运算外,还有一种特殊的用法是在变量前加单个星号或两个星号,实现多参数的传人或变量的拆解. ②什么是星号变量 最初,星号变量是用在函数的参数传递上的 ...

  9. js动态创建Form表单并提交

    javascript动态创建Form表单和表单项,然后提交表单请求,最后删除表单,代码片段如下(Firefox测试通过): var dlform = document.createElement('f ...

  10. 钉钉,连续获取Token一样么? Js_ticket重复获取一样么?

    经过测试,是一样的: Token的过期时间是2个小时: 2个小时后在获取则发生变化: js_ticket:  重复获取的值不同的: