易燃物汇聚 YouTube 有声书与书评
网络是怎样连接的 封面

网络是怎样连接的

户根勤

13万人在读
15.6万字总字数
¥49定价

有声书与视频解读 YouTube视频解读 2

内容简介

本书以探索之旅的形式,从在浏览器中输入网址开始,一路追踪了到显示出网页内容为止的整个过程,以图配文,讲解了网络的全貌,并重点介绍了实际的网络设备和软件是如何工作的。目的是帮助读者理解网络的本质意义,理解实际的设备和软件,进而熟练运用网络技术。同时,专设了“网络术语其实很简单”专栏,以对话的形式介绍了一些网络术语的词源,颇为生动有趣。本书图文并茂,通俗易懂,非常适合计算机、网络爱好者及相关从业人员阅读。

读者书评

★★★★★

想知道当你从浏览器输入一个网址后按下回车键,到浏览器显示出你想看的内容,这一过程发生了什么吗?那就来读一读这本书吧,深入浅出计算机网络,带你了解计算机内部0和1的世界[机智] 下面我整理一些考研复试和找工作面试常会被问到的经典问题,方便自己复习,也方便他人参考。(以下四个都是我考研复试被问到的) 一、从输入网址到获得网页的过程 1 浏览器查询DNS,获取域名对应的ip地址,具体包括浏览器搜索自身DNS缓存,搜索操作系统DNS缓存,读取本地host文件,向本地DNS服务器进行查询。 2 浏览器获得域名对应的ip地址以后,浏览器向服务器请求建立连接,发起三次握手。 3 TCP/IP连接建立后,浏览器想服务器发送HTTP请求。 4 服务器接收到这个请求,并根据路径参数映射到特定的请求处理器进行处理,并将处理结果及相应的视图返回给浏览器。 5 浏览器解析并渲染视图,若遇到对js文件,css文件及图片等静态资源的引用,则重复上述步骤并向服务器请求这些资源。 6 浏览器根据其请求到的资源和数据渲染问好,最终向用户呈现一个完整的页面。 二、计算机网络的体系结构和作用 1 第一层物理层,用于通信信道上的原始比特流传输。主要设备为集线器和中继器,协议数据单元为比特。 2 第二层数据链路层,物理寻址,数据的成帧,流量控制,数据的检错和重发。协议数据单元为帧,主要设备为网桥和交换机。 3 第三层网络层。将网络地址翻译成对应的物理地址,并决定如何将数据从发送方路由到接收方。协议数据单元为包,主要设备包括路由器。主要协议是IP和ARP。 4  第四层传输层,负责将上层数据分段并提供端到端的,可靠的或者不可靠的传输,还要处理端到端的差错控制和流量控制问题。协议数据单元为数据段,主要协议为TCP,UDP 5 第五层会话层,不同机器上的用户之间建立及会话管理。 6 第六层表示层,信息的语法语义以及他们的关联,如加密解密,转换翻译。 7 第七层应用层,负责为操作系统或者网络应用提供网络服务的接口。主要设备为网关。提供的服务包括文件传输,文件管理等。主要协议为HTTP和FTP。 三、TCP和UDP的区别 tcp是面向连接的,可靠的,udp是无连接的,不可靠的。tcp只支持点对点通信,udp支持一对一,一对多,多对一和多对多。tcp是面向字节流的,udp是面向报文的。 四、什么时候用TCP,什么时候用UDP 对某些实时性要求比较高的时候,选择udp,比如游戏,媒体通信和实时视频流,即出现传输错误也可以容忍。其他大部分情况,HTTP都是用TCP,因为要求传输内容可靠,不出现丢失。

★★★★★

感谢这本书 一定程度串联起来我的网络知识 ##### 一个 URL 的网络之旅 1. 用户在地址栏输入内容,浏览器判断后生成相应的 URL 并传给网络进程 1. 如果是普通的字符,那浏览器会使用默认的搜索引擎去对于输入的内容生成 URL 2. 如果输入的是网址,那浏览器会拼接协议名形成完整的 URL2. 网络进程先查询本地缓存,没有则解析 URL 并向 DNS 发送请求,得到 IP 1. 客户端在进行 DNS 解析之前,会先查看浏览器和操作系统是否有缓存域名对应的 IP 地址 2. 如果没有就会向本地 DNS 服务器发出查询请求,根 DNS 服务器收到请求后就会返回顶级域名服务器的 IP 地址 3. 然后本地 DNS 服务器再向顶级域名服务器发出查询请求,顶级域名服务器收到请求后就会返回权威域名服务器的 IP 地址 4. 然后本地 DNS 服务器在向权威域名服务器发出查询请求,权威域名服务器收到请求后,就会返回域名对应的 IP 地址了3. 网络进程先与目标服务器进行 TCP、TLS 多次握手,建立 TCP、TLS 安全连接 1. 首先刚开始双方处于关闭连接状态,服务端首先创建 socket、绑定端口、然后监听端口,监听端口后处于 Listen 状态,如果没有 Listen,服务端收到客户端的报文就会回复 RST 报文,还想要发生三次握手方式就是客户端自连接,需要开启全局 hash 1. 服务端调用 Listen 时,内核会计算半连接的长度,然后据此计算出半连接队列的长度,开始申请用于关于半连接对象的内存,因为半连接队列需要快速查找,所以内核是用哈希表来管理半连接队列的, 2. 最后会将半连接队列挂到了接收队列 queue,当然也会初始化全连接队列头,它是一个链表的形式,在 listen 这里因为没有连接,所以将全连接队列头设置成 NULL 2. 第一次握手: 1. 设置 socket 状态为 TCP_SYN_SENT 2. 动态选择一个端口 1. bind 的时候,如果传了端口,那么 bind 就会尝试使用该端口号,但是默认下一个端口只会被使用一次,所以对于客户端角色的 socket,不建议使用 bind 2. 如果端口号传的是 0,则会自动选择一个端口号 1. 自动选择一个端口的流程是:会随机地从 ip_local_port_range 选择一个位置开始循环判断,直到找到可用端口,可用端口默认是 28232 2. 如果端口查找失败,会报错 "Can not assign requested address",这个时候应该去检查一下服务器上的 net.ipv4.ip_locals_port_range 3. 如果因为某种原因不希望某些端口被使用到,可以把它们写到 ip_local_reserved_ports 这个内核中就可以啦,内核在选择的时候会跳过这些端口 3. 构建一个 syn 报文:客户端首先生成随机初始化序列号seq = x,并放到 TCP 头部的32位序号字段中,同时将 SYN 标志设置为 1,表示这是一个 SYN 报文,添加到发送队列,然后发送给服务端并且启动重传定时器,该定时器的作用是等到一定时间后收不到服务端的反馈的时候来开启重传,在 3.10 版本中首次超时时间是 1s,再 2.6 中是 3 s 3. 第二次握手:服务端收到客户端发送过来的 SYN 报文后, 1. 首先判断半连接队列是否满了,如果满了的话进入 tcp_syn_flood_action 去判断是否开启了 tcp_syncookies 内核参数,如果队列满了,且未开启 tcp_syncookies,那么该握手将直接被丢弃 2. 接着判断全连接队列是否满了,因为全连接队列满了也会导致握手异常的,那么干脆就在第一次握手的时候也判断了,如果全连接队列满了,且有 young_ack 的话,那么同样也是被丢弃,young ack 是半连接队列里保持的一个计数器,记录的是刚有 syn 到达,没有被 SYN_ACK 重传定时器重传过 SYN_ACK,同时也没有完成过三次握手的 socket 数量 3. 如果未满的话,就会生成随机初始化序列号seq = y,并放到 TCP 头部的32位序号字段中, 并对客户端的序列化 seq = x + 1 作未确认应答号,然后放到 TCP 头部的确认应答字段中,同时将 SYN 和 ACK 标志设置为 1,表示这是一个 SYN-ACK 报文。把该报文发送给客户端后并申请 request_sock 添加到半连接队列启动计时器,服务端处于 SYC_RCVD 4. 第三次握手:客户端收到服务端发送过来的 SYN_ACK 报文,会清除第一次握手设置的重传定时器,把当前 socket 状态设置为 ESTABLISHED,开启保活计时器,然后会发送确认报文给服务端,这个确认报文是对服务端的初始序列化 seq = y + 1, 客户端进入 ESATBLISH 状态 5. 服务端收到后,会把对应半连接队列对象删除,创建新的 sock 后加入到全连接队列中,最后将新连接状态设置为 ESTABLISHED,也进入 ESTABLISHED 状态 6. Accept 从已经建立好的全连接队列中取出一个返回给用户进程 7. TCP 三次握手完成之后,紧接着进行 TLS 四次握手 1. 客户端首先会发一个 client Hello 消息,消息里面有客户端使用的 TLS 版本号,支持的密码套件列表、客户端生成的随机数,这个随机数是用来后面生成对称密钥之一 2. 当服务端收到客户端的消息后,会返回 Server Hello 消息给客户端,消息里面有服务端确认的 TLS 版本号、密码套件、服务端生成的随机数,接着服务端为了证明自己的身份,会发送 Server Certificate 给客户端,这个消息含有数字证书,随后,服务端发送 Server Hello Done 消息,目的是告诉客户端,我已经把该给你的东西都给你了,本次握手完毕 3. 校验证书:客户端收到服务端发送过来的数字证书,会校验数字证书是否合法,如果合法的则会用 CA 机构的公钥去解密数字证书拿到服务端的公钥 4. 客户端再次生成随机数,用服务端的公钥加密后,通过 Client Key Exchange 消息传给服务端,服务端收到后,用服务端的私钥解密得到客户端的第二个随机数,到这里,服务端和客户端都有三个随机数,双方根据已经得到的三个随机数,会根据算法生成对称密钥,生成完对称密钥后,客户端会发一个消息告诉服务端开始使用对称加密方式发送消息,并且还会对之前所有发送的数据做个摘要,再用对称加密加密一下,让服务器做个验证,验证对称密钥是否可用,以及之前握手信息是否有被中途修改 5. 服务器也是同样的操作,发送消息告诉客户端开始用对称加密方式,并且也会对数据做个摘要,并用对称密钥加密一下,让客户端做个校验,如果双方都验证加密和解密没问题,那么 TSL 四次握手正式完成了 6. 最后,就用对称密钥加解密 HTTP 请求和响应4. 紧接着组装请求报文,并由各个分层对数据进行封装,最终转为 0、1 格式5. 基于建立好的连接,利用物理介质传输数据,通过路由器控制数据的传输方向6. 请求会先去到 CDN 查询是否有缓存的内容,如果没有则继续向下请求7. 请求来到 LVS 后被转发到 Nginx,再由 Nginx 转发到 GateWay 网关8. Gateway 网关根据配置好的 API 分发规则,将请求分发到具体服务9. 紧接着在从 Nacos 注册中心内,查询出该服务的具体服务实例 IP10. 请求来到具体的服务器后,先通过端口号找到具体的 WEB 服务进程 Tomcat11. Tomcat 基于 SpringMVC 的工作流程为请求定位到具体的 Java 后端方法 1. 用户发起请求,请求先被 Servlet 拦截给 Spring MVC 框架 2. Spring MVC 里面的 DispatcherServlet 核心控制器,会接收到请求并转发给给 HandlerMapping 3. HandlerMapping 负责解析请求,根据请求信息和配置找到匹配的 Controller 类,不过这里如果有配置拦截器,就会按照顺序执行拦截器里面的 preHandle 方法 4. 找到匹配的 Controller 以后,把请求参数传递给 Controller 里面的方法 5. Controller 中的方法执行完以后,会返回 一个 ModelAndView,这里面会包括视图名称和需要传递给视图的模型数据 6. 视图解析器根据名称找到视图,然后把数据模型填充到视图里面再渲染给 HTML 内容返回给客户端12. 线程执行 Java 方法时,先去 Redis 中查询是否有数据,没有则查询 MySQL13. 查询 DB 前先通过 MyBatis 生成 SQL 语句,然后通过 DB 连接执行 SQL 1. 为了避免每次去查询数据库,MyBatis 把查询出来的数据保存到 sqlSession 的本地缓存中,后续的 SQL 如果命令缓存,就直接从本地缓存读取了,如果想要实现跨 SqlSession 级别的缓存,那么一级缓存就无法实现了,所以在 MyBatis 里面引入了二级缓存,就是当多个用户在查询数据的时候,只有任何一个 sqlSession 拿到了数据就会放入到二级缓存里面,其他的 SqlSession 就可以从二级缓存加载数据 * 一级缓存的具体实现原理是 * 在 SqlSession 里面持有一个 Executor,每个 Executor 中有一个 LocalCache 对象,当用户发起查询的时候,MyBatis 会根据执行语句在 LocalCache 里面进行查询,如果没有命中,再去数据库查询并写入到 LocalCache,否则直接返回,所以一级缓存的生命周期的 SqlSession,而且在多个 SqlSession 或者分布式环境下,可能会导致数据库出现脏数据 * 二级缓存的具体实现原理是: * 使用 CacheingExecutor 装饰了 Executor,所以在进入一级缓存的查询流程之前,会先通过 CachingExecutor 进入二级缓存的查询 * 开启二级缓存以后,会被多个 SqlSesssion 共享,所以它是一个全局缓存,因此它的查询流程是先查二级缓存,再查一级缓存,最后再查数据库 * 另外,MyBatis 的二级缓存相对于一级缓存来说,实现了 SqlSession 之间缓存数据的共享,同时缓存粒度也能够到达 namespace 级别,并且还可以通过 Cache 接口实现类不同的组合,对 Cache 的可控性也更强 2. MyBatis 生成 SQL 语句的流程: 1. 读取 MyBatis 配置文件:mybatis-config 为 mybatis 的全局配置文件,配置了 mybatis 的运行环境等信息,例如数据库连接等信息。 2. 加载映射文件:映射文件即 SQL 映射文件,该文件中配置了操作数据库的 SQL 语句,需要在 MyBatis 配置文件 mybatis-config.xml 中加载,mybatis-config.xml 文件可以加载多个映射文件,每个文件对应数据库的一张表 3. 构建会话工厂:通过 mybatis 的环境等配置信息构建会话工厂 SqlSessionFactory 4. 创建会话对象:由会话工厂创建 SqlSession 对象,该对象包含了执行 SQL 的所有方法 5. Executor 执行器:MyBatis 底层定义了一个 Executor 接口来操作数据库,它将根据 SqlSession 传递的参数动态地生成需要执行的 SQL 语句,同时负责查询缓存的维护 6. MappedStatement 对象:在 Executor 接口的执行方法中有一个 MappedStatement 类型的参数,该参数是对映射信息的封装,用于要存储映射 SQL 的 id、参数等信息 7. 输入参数映射:输入参数类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 型,输入参数映射过程类似于 JDBC 对 preparedStatement 对象设置参数的过程 8. 输出结果映射:输出结果类型可以是 Map、List 等集合类型,也可以是基本数据类型和 POJO 类型,输出结果映射类似于 JDBC 对结果集的解析过程 14. 请求根据已配置的数据源地址,来到 MySQL, 并执行 SQL 语句,从而获得数据 1. 首先会验证客户端的用户名和密码是否正确 1. 如果用户名不存在或者密码错误,则抛出 1045 的错误即错误码信息 2. 如果用户名和密码验证通过,则进入第 2 步 2. 判断 MySQL 连接池是否存在空闲线程 1. 存在:直接从连接池中分配一条空闲线程维护当前客户端的连接 2. 不存在:创建一条新的线程 3. 工作线程会先查询 MySQL 自身的用户权限表,获取当前登录用户的权限信息并授权 4. 如果是查询语句 1. 先将 SQL 语句发送给 SQL 接口,SQL 接口会对 SQL 语句进行哈希处理 2. SQL 接口在缓存中根据哈希值检索数据,如果缓存中有数据则直接返回 3. 缓存中未命中会将 SQL 交给解析器,解析器会判断 SQL 语句是否正确 1. 错误,抛出 1064 错误码以及相关的语法错误信息 2. 正确,将 SQL 语句交给优化器处理,进入往下执行 4. 优化器根据 SQL 制定出不同的执行方案,并选择最优的执行计划 5. 工作线程根据执行计划,调用存储引擎所提供的 API 获取数据 6. 存储引擎根据 API 调用方的操作,去磁盘中检索数据 7. 发生磁盘 IO 后,对于磁盘中符合要求的数据逐条返回给 SQL 接口 8. SQL 接口会对所有符合要求的结果集进行处理并返回 5. 如果是写语句 1. 先将 SQL 发送给 SQL 接口,SQL 接口会对 SQL 语句进行哈希处理 2. 在缓存中根据哈希值检索数据,如果缓存中有数据则将对应表的所有缓存全部删除 3. 经过缓存后会将 SQL 交给解析器,解析器会判断 SQL 语句是否正确 1. 错误,抛出 1064 错误码以及相关的语法错误信息 2. 正确,将 SQL 语句交给优化器处理,继续往下处理 4. 优化器根据 SQL 制定出不同的执行方案,并选择出最优的执行计划 5. 在执行开始之前,先记录下 undo-log 日志和 redo-log 日志 6. 在缓冲区中查找是否存在当前要操作的行记录或者表数据 1. 存在 1. 直接对缓冲区的数据进行写操作 2. 然后利用 checkpoint 机制刷写到磁盘 2. 不存在 1. 根据执行计划,调用存储引擎的 API 2. 发生磁盘 IO,对磁盘中的数据做写操作 7. 写操作完成后,记录 bin-log 日志,同时将 redo-log 日志中的记录改为 commit 状态 8. 将 SQL 执行耗时及操作成功的结果返回给 SQL 接口,再由 SQL 接口返回给客户端15. 当结果集处理好了之后,会直接通过 Host 中记录的地址,经过报文组装、数据封装、请求转发等操作,向客户端响应数据,16. 应答报文经物理介质传输后,最终抵达客户端网络进程 1. 网络数据帧通过(物理介质)**网络传输**到达网卡时,网卡会将网络数据帧通过 DMA 的方式放到环形缓冲区 RingBuffer 中 2. 当 DMA 操作完成时,网卡会向 CPU 发起一个硬中断,告知 CPU 有网络数据到达,CPU 调用网卡驱动注册的**硬中断响应程序**。网卡硬中断响应程序会为网络数据帧创建内核数据结构 sk_buffer,并将网络数据帧拷贝到 sk_buffer 中,然后发起软中断请求,通知内核有新的网络数据帧到达 3. 内核线程 ksoftirqd 发现有软中断请求到来,随后调用网卡驱动注册的 poll函数,poll 函数 将 sk_buffer 中的网络数据包送到内核协议栈中注册的 ip_rcv 函数 中 4. ip_rcv 函数也就是网络层,取出数据包的 IP 头,判断该数据包下一跳的走向,如果数据包是发送给本机的,则取出传输层的协议类型,并去掉数据包的 IP 头,将数据包交给传输层处理 5. 当我们采用的是 TCP 协议,数据包到达传输层时,会在内核协议栈中的 tcp_rcv 函数处理,在 tcp_rcv 函数中去掉 TCP 头,根据四元组(源 IP,源端口,目标 IP,目标端口)查找 对应的 Socket,如果找到对应的 Socket 则将网络数据包中的传输数据拷贝到 Socket 中的接受缓冲区中,如果没有找到,则发送一个目标不可达的 icmp 包17. 网络进程将数据交给浏览器后,根据情况做 TCP 四次挥手,断开连接 1. 客户端主动调用关闭连接的函数,于是就会发送 FIN 报文,这个 FIN 报文代表客户端不会再发送数据了,进入 FIN_WAIT_1 状态; 2. 服务端收到了 FIN 报文,然后马上回复一个 ACK 确认报文,此时服务端进入 CLOSE_WAIT 状态。在收到 FIN 报文的时候,TCP 协议栈会为 FIN 包插入一个文件结束符 EOF 到接收缓冲区中,服务端应用程序可以通过 read 调用来感知这个 FIN 包,这个 EOF 会被**放在已排队等候的其他已接收的数据之后**,所以必须要得继续 read 接收缓冲区已接收的数据; 3. 接着,当服务端在 read 数据的时候,最后自然就会读到 EOF,接着 **read() 就会返回 0,这时服务端应用程序如果有数据要发送的话,就发完数据后才调用关闭连接的函数,如果服务端应用程序没有数据要发送的话,可以直接调用关闭连接的函数**,这时服务端就会发一个 FIN 包,这个 FIN 报文代表服务端不会再发送数据了,之后处于 LAST_ACK 状态; 4. 客户端接收到服务端的 FIN 包,并发送 ACK 确认包给服务端,此时客户端将进入 TIME_WAIT 状态; 5. 服务端收到 ACK 确认包后,就进入了最后的 CLOSE 状态; 6. 客户端经过 2MSL 时间之后,也进入 CLOSE 状态;18. 浏览器创建渲染子进程,然后根据数据生成渲染树,最后绘制并显示页面

★★★★★

《网络是怎么连接的》一个互联网大厂面试常考题: 你在浏览器输入网址后获得整个页面的过程? 浏览器接收到网址后,查询DNS获取域名对应的IP地址,然后向服务器发送请求,进行三次握手(三报文握手)建立连接。 连接建立后,浏览器向服务器发送HTTP请求。 服务器接收到HTTP请求后,根据路径参数映射对应请求处理器处理,并将结果返回给浏览器。 浏览器接收到服务器的响应数据后解析并渲染到页面上,对于图片等静态资源的引用,会先在页面上;留出显示空间,重复上面的步骤再向服务器发送请求。浏览器接收到静态资源后继续解析并渲染,得到最终的页面内容。 本书就是围绕这样的过程展开,告诉你这个过程的细节是怎么回事,帮助你构建计算机网络的整体框架。 全书15.6万字,完整阅读9个半小时。一个字描述读后感:爽! 这是一本讲述计算机网络的书,但是不同于计算机领域大佬谢希仁的专著《计算机网络》那样自顶向下地教授计算机七层协议各个部分的内容,而是从最直接的应用场景起手——从浏览器中输入网址开始,一直追踪后续返回整个页面的过程,告诉你这几秒直接计算机网络发生了什么,属于一本内容专业,但是不难读的计算机网络科普书。 综述:全书六个章节。开篇先总体网络的全貌,给你全书的路线图: 1. 向浏览器输入网址后,web浏览器查询DNS解析网址,获得域名对应的IP地址,生成HTTP消息交给操作系统的Socket库。 2. Socket库将接收到的HTTP消息作为数据转发给操作系统的协议栈。 3. 操作系统协议栈根据需要对HTTP消息进行分包,然后添加TCP头,转交给IP模块。 4. IP模块在TCP包前加上IP头,然后查询MAC地址并加上MAC头部,然后将包转交给网卡驱动,由网卡驱动转交给网卡并发送指令进行传输。 5. 传输过程会经过集线器、交换机、路由器层层转发,最后送达Web服务器的局域网。 6. 在Web服务器器的局域网中通过防火墙、缓存服务器(服务器不一定设置),web服务器接收到数据包,并通过web服务器的网卡、网卡驱动、协议栈、Socket库“拆快递”,最终连接到web服务器对应的应用程序完成连接。 7. 后续持续通过这个过程进行数据传输。 每个章节逐层分析:客户端Web浏览器做了什么, 协议栈和网卡做了什么, 集线器+交换机+路由器做了什么, 接入网、网络运营商的数据传递逻辑, 防火墙、缓存服务器的控制作用, Web服务器接收请求、数据传输、关闭连接的全过程。 作为学通信的学生,这样一本好书比学校老师教授的内容好吸收很多。从概述部分就向你提供了计算机网络传输的地图。因为本书的定位偏向于科普读物,并没有像专著一样对各个技术进行深挖。并且译者在文中多处提供了注释辅助理解,并且在微信读书的机制下会有各路大神留下高质量的评论为你答疑解惑。 本书的语言风格偏口语化,并且每章开头和结尾会提供小测试帮助读者了解和总结本章内容。 提示:这终究是一本比较专业的科普书籍,所以在阅读过程中会有一些计算机领域的专业术语,如:协议,cdn,ADLS。不要指望读一遍就能够完全了解计算机网络。需要继续深耕建议去读《计算机网络》 槽点:本书虽然只有15.6万字,但是在使用了较多图表辅助理解,需要多次翻阅,在电子书的机制下,页面1的文字内容可能需要翻到页面4查看。有一定障碍,但是如果你是双设备阅读或者纸质阅读,那么问题不大。

★★★★★

对于不是科班出身的童鞋来说,是一本很好的网络基础入门书籍,穿插专业术语的解释和插图,对复杂的网络通信世界有了些微的了解,第一次看,一下子全部吸收不大可能,需要循序渐进,提出自己的疑问 试着去书中寻找答案,我觉得下次再看时配合纸质笔记手绘网络通信流程可能会取得更好的效果。

★★★★★

大学时没学会的计算机网络。在这里学会了。 数据进来时,路由器可以根据MAC地址判断是不是给自己的。如果是给自己的,那么会根据数据包里面的IP查找下一跳,决定好下一跳时,会重新封装数据包里面的源、目的MAC地址。随后发出。 ﹉﹉﹉ 缓存服务器部署在客户端网络中,那么服务端不能控制了,好处是可以加速、减轻服务端负载、网络流量稳定(减少了网络节点的阻塞,因为部署在客户端网络中,少走互联网了);如果部署在服务端,服务端可控制,可以加速、减轻服务端负载,但无法减少互联网流量,可能会发生网络拥塞的情况。所以结合二者的有点。将其部署在互联网边界,也就是客户端接入网的服务商那里,这样服务端可控制缓存服务器,而且也能减少网络拥塞了。这就是CDN

★★★★★

首先说坏话 这绝对不是一本「轻松的科普书」,阅读难度就我自己亲身体验,是那种需要读后认真做笔记消化才有意义的书,单纯的阅读只会让你头昏脑胀不明所以。 书中巨量的生词也是个阅读难点,大部分时间你都会处在「虽然不知道这玩意是什么但是必须看下去」的状态,部分互联网机制要到很后面才揭晓,这就需要你不停地回看。所以我觉得这本书更适合纸质,线上特别是微信读书的跳转做得不好,来回翻看难度很高。作为计算机专业的学生,读完后反复观看或者立即进入进深阅读都很有必要,遗忘的速度太快了 - 然后说好的方面。虽然过程让我一度想放弃,但 21 天后我还是读完了它,并且确定我是相对满意的。这里提出另一个阅读要点「不要中途停下」,对于这本生词多得能当水喝的书来说真的很重要,就算我是连续阅读也有很多次感觉完全不记得之前读了啥。 在渡过痛苦期之后,你会突然看得懂这些文字在说什么了,这种感觉很奇妙。不想谈论中间的总结因为像又上了一次课,总之在最后有一张过程表,发现自己可以读懂那张表的时候是很惊喜的。TCP IP相关的内容第一次出现时其实没太看懂,但因为后面讲网络包反复提及,慢慢也就明白了IP发送、TCP端口之类的东西(原谅我只能写出自己看得懂的文字) 总体推荐专业人士入门阅读,但不推荐给纯想了解一下互联网的人,会把自己痛苦到,还是找一些视频慢慢看得好

★★★★★

本书讲解了从浏览器输入网址一直到显示网页内容的几秒钟的过程。对我这种小白而言,这本书的内容看的我是一愣一愣的,总得来说,就是啥也不懂。一天看一小节一点一点的啃完了。 总结一下本书内容网络包的旅程: 一、 客户端 浏览器—Socket库—协议栈(TCP/IP)—网卡驱动—网卡 二、 客户端局域网 双绞线—集线器—交换机—互联网接入路由器—ADSL Modem 三、 接入网 DSLAM(局端多路Modem)—BAS(宽带接入服务器)—隧道—隧道专用路由器 四、 Web服务器端局域网 互联网—防火墙—缓存服务器 五、 Web服务器 网卡—网卡驱动—协议栈(TCP/IP)—Socket库—Web服务器

★★★★★

历时18天,共16小时56分钟,总算读完此书。 虽然书中提到的少数技术在现今看来些许过时了,用于了解计算机网络的总体架构和发展史,读来还是颇为有益的。 尤其适用于web开发者及计算机网络初、中级学习者。 另,本书内容组织非常好,作为技术类书籍,读来竟然少见让人渐入佳境、觉得很有趣味。

★★★★★

《网络是怎样连接的》目标:理解整个网络的骨架。【s1 浏览器生成消息】重点:浏览器如何解析网址、请求消息实际的样子、DNS帮助查询IP地址、消息委托给操作系统发送给web服务器本章建立了“从输入网址到发出请求”的完整逻辑1.生成http请求消息2.向dns服务器查询ip地址3.DNS服务器大接力4.委托协议栈发送消息 核心:“浏览器不懂路,只负责打包,DNS负责指路,操作系统负责跑腿” 实战预测:①DNS 解析排障场景:用户反馈“微信能发消息(IP直连),但网页打不开(依赖域名)”。知识点:这通常是 DNS 挂了。工具:使用 nslookup 或 dig 命令手动查询域名。命令:nslookup www.baidu.com排查:如果超时或无返回,说明 DNS 服务器不可达,尝试更换 DNS(如 114.114.114.114 或 8.8.8.8)。 ② 内外网域名解析不一致场景:在公司内部访问 internal.company.com 应该解析到内网 IP(10.x.x.x),但在家访问应该解析到公网 IP。知识点:DNS 解析结果取决于你询问的 DNS 服务器。内网 DNS 知道内网 IP,公网 DNS 只知道公网 IP。操作:新员工入职电脑无法访问内部仓库,大概率是 DNS 设置为了 114 或 8.8,而不是公司的内网 DNS 服务器。 【s2 用电信号穿书tcp/ip数据】重点:协议栈如何执行浏览器委托的发送任务,核心脉络是,创建套接字→连接服务器→收发数据→断开连接。连接和断开时的三次握手,四次挥手。实战预测:①排查端口冲突场景:启动 Nginx 报错 bind() failed: Address already in use。知识点:端口已被另一个进程占用(也可能处于 TIME_WAIT 状态)。操作:用 lsof -i :80 或 ss -tlnp | grep :80 找到占用的进程,确认是否可以停止或更换端口。 【S3 从网络到网络】重点:数据包如何在互联网那个中经过多个网络跳转到达服务器,核心脉络是,ip模块发送包→通过路由表选择下一跳→使用ARP查询mac→经过集线器/交换机/路由器转发→到达目标“路由器看IP,交换机看MAC”,以及 “路由表决定下一跳,ARP找到下一跳的MAC” 【S4通过接入网进入互联网那个内部】重点:数据包如何从家庭/公司网络通过接入网进入互联网内部,核心脉络是接入网类型(ADSL/FTTH)→信号转换与调制→用户认证(PPPoE)→运营商网络(BAS/DSLAM)→跨运营商路由(BGP./IXP) 【S5服务器端的局域网中有什么玄机】重点:网络包到达服务器所在的局域网后,如何通过防火墙、负载均衡器、缓存服务器等设备最终抵达服务器,核心脉络是服务器部署位置→防火墙包过滤→负载均衡分发→缓存加速→CDN内容分发 【S6请求到达Web服务器,响应返回浏览器】重点:数据包抵达服务器后如何被处理、web服务器如何生成相应、浏览器如何渲染页面的完整闭环。核心脉络是硬件接收→协议栈处理→web应用解析→生成响应→浏览器渲染。 【全书总结】数据包的完整旅行你的电脑→局域网/家里路由器→接入网(电话线/光纤)→运营商网络→互联网骨干→目标机房→目标服务器→原路返回关键角色:DNS(把 www.baidu.com 变成 IP)TCP(保证数据可靠传输(三次握手、重传))IP+路由(一跳一跳找下一站)交换机(同网段内根据 MAC 转发)路由器/网关(跨网段转发,连接内外网)防火墙(按规则放行或拦住包)负载均衡(多台服务器分摊压力)Web服务器(接收请求,返回网页/接口)

★★★★★

五一4天都在啃这本书,留了个尾巴没啃完,今天终于看完了。不得不说,这真的是一本了解网络通信的优质书,能把复杂的东西讲的清清楚楚,让人一看就懂。看完除了对网络通信有一个挺全面的理解,也非常佩服作者知识面之广,之深。译者也超级棒,翻译质量非常高。自己还要读第二遍,笔记才刚刚记完第二章。强烈推荐IT业的人读读这本书。

书籍信息

作者户根勤
译者周自恒
出版社人民邮电出版社
出版时间2017-01-01
ISBN9787115441249
分类计算机-计算机综合
格式EPUB
完结状态连载中
章节数55