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

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. windows 10激活

    1.安装Microsoft Toolkit 解压,安装 2.打开Microsoft Toolkit软件 点击下面红色框框 等到出现下面内容后,继续下一步 3.点击下面按钮 等待片刻后,出现下面结果,就 ...

  2. Java类集框架——List接口

    学习目标 掌握List接口与Collection接口的关系. 掌握List接口的常用子类:ArrayList.Vector. 掌握ArrayList与Vector类的区别.    Collection ...

  3. Oracle表的维护(字段,重命名表名)

    案例:银行里建的开卡信息 字段 字段类型 Id Number name Varchar2(64) sex Char2() birth Date money Number(10,2) 创建银行卡表 cr ...

  4. php curl采集数据问题汇总

    1. 使用curl获取网页数据提示: "curl: (6) Could not resolve host: xxx.xxx.com ; Name or service not known&q ...

  5. 洛谷P4799 世界冰球锦标赛 CEOI2015 Day2 meet-in-the-middle

    正解:折半搜索 解题报告: 先放个传送门QAQ 想先说下部分分?因为包含了搜索背包两个方面就觉得顺便复习下?QwQ 第一档部分分 爆搜 就最最普通的爆搜鸭,dfs(第几场,钱),然后每次可以看可以不看 ...

  6. window 安装 Twisted 遇到的问题

    scapy 需要Twisted17.1.0, Twisted报错 building 'twisted.test.raiser' extension 用Twisted 16.1.0 可以安装,使用时 I ...

  7. cocos2d动作

    1.动作的基类是CCAction,通过继承它可以实现很多不同的动作,主要分为三大类: (1)CCFiniteTimeAction(有限次动作执行类) (2)CCSpeed(节点执行速度类) (3)CC ...

  8. (转)Springboot+shiro配置笔记+错误小结

    springboot不像springmvc,它没有xml配置文件,那该如何配置shiro呢,其实也不难,用java代码+注解来解决这个问题.仅以此篇记录我对shiro的学习,如有对过客造成不便,实在抱 ...

  9. 手把手教你学node.js之一个简单的express应用

    一个简单的express应用 目标 建立一个 lesson1 项目,在其中编写代码.当在浏览器中访问 http://localhost:3000/ 时,输出 Hello World. 挑战 访问 ht ...

  10. 35. Search Insert Position(二分查找)

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...