前言
如果没有体系化的认知, 了解的信息越多也就越迷茫! 如果对本质的认知就是错的, 了解的信息越多偏差也就越大! 信息绝对不等于认知, 互联网碎片化信息究竟有多少价值需要认真筛选
之前就想了解一下关于计算机网络方面的知识, 网上搜来搜去就是那两本书, 一本是 HTTP 权威指南, 这本书的厚度快赶上新华字典了; 另一本是 TCP/IP 讲解, 卷 1, 看完之后, 我就呵呵了!
最近看了上野宣 (日本作家) 写的图解 HTTP, 打算把书中的知识点简单的归类总结一下, 或者叫摘抄一下更为合理, 方便自己后期复习本来自己是搞移动端的, 可渐渐发现了瓶颈, 如果想要在专业技术的道路上走的踏实, 还是绕不开 HTTP 协议, 绕不开更加系统和低层的计算机知识, 大学的时候总觉得自己学的东西都太理论化, 根本应付不了实际的项目工程, 最近的感触却完全相反, 理论是可以指导实践的, 试想: 如果大学也开通了厨师专业, 大学肯定要从厨师的阶级属性社会使命学起, 甚至还要兼顾这个职业的历史演变等, 学的时候枯燥无味, 感觉这跟新东方开学就给你发两把菜刀直接颠勺的教学效率肯定不能比, 现在想想感觉还是太嫩了, 给自己不学习找理由已经到了不惜要自暴自弃的地步了, 加之社会总有说大学生不如 XX 之类的新闻, 搞得自己更是自行惭秽.....
算了, 不扯了, 直接上干货吧, 技多不压身~
第一章 了解 web 及网络基础
1.1 网络基础 TCP/IP
TCP/IP 协议族里可分为应用层传输层网络层和数据层
应用层
应用层决定了向用户提供应用服务时通信的活动 TCP/IP 协议族内预存了各类通用的应用服务比如 FTP(File Transfer Protocol, 文件传输协议)和 DNS(Domain Name Sysytem, 域名系统),HTTP 协议也处于该层
传输层
传输层对上层应用层, 提供处于网络连接中的两台计算机之间的数据传输在传输层有两个性质不同的协议: TCP(Transmission Control Protocol, 传输控制协议)和 UDP(User Data Protocol, 用户数据报协议)
网络层
网络层用来处理在网络上流动的数据包数据包是网络传输的最小数据单位, 该层规定了通过怎样的路径 (所谓的传输路线) 到达对方计算机, 比把数据包传送给对方
链路层(又名数据链路层, 网络接口层)
用来处理链接网络的硬件部分包括控制操作系统硬件的设备驱动 NIC(Network Interface Card, 网络适配器, 即网卡), 及光纤等物理可见的部分
1.2 发送 HTTP 大体流程
1 客户端在应用层 (HTTP 协议) 发出一个想看某个 Web 页面的 HTTP 请求;
2 为了传输方便, 在传输层 (TCP 协议) 把从应用层收到的数据 (HTTP 请求报文) 进行分割, 并在各个报文上打上标记序号及端口号后转发给网络层;
3 在网络层(IP 协议, Internet Protocol), 增加作为通信目的地的 MAC 地址后转发给链路层这样一来, 发往网络的通信请求就准备齐全了;
4 接收端的服务器在链路层收到数据, 按序往上层发送, 一直到应用层当传输到应用层, 才能算真正接收到由客户端发送过来的 HTTP 请求
1.3 与 HTTP 关系密切的协议: IPTCP 和 DNS
负责传输的 IP 协议
按层次分, IP(Internet Protocol)网际协议位于网络层, IP 协议的作用是把各种数据包传送给对方而要保证确实传送到对方那里, 则需要满足各类条件, 其中两个重要的条件是 IP 地址和 MAC 地址(Media Access Control Address)
IP 地址和 MAC 地址: 指明了节点被分配到的地址, MAC 地址是指网卡所属的固定地址, IP 地址可以和 MAC 地址进行配对 IP 地址可变换, 但 MAC 地址基本上不会更改
使用 ARP 协议凭借 MAC 地址进行通信
IP 间的通信依赖 MAC 地址在网路上通信双方在同一局域网内的情况很少, 一般是经过多台计算机和网络设备中转才能连接到对方而在进行中转时, 会采用 ARP 协议(Address Resolution Protocol)ARP 是一种用以解释地址的协议, 根据通信方的 IP 地址就可以反查出对应方的 MAC 地址
确保可靠性的 TCP 协议
按层次分, TCP 位于传输层, 提供可靠的字节流服务所谓字节流服务是指为了方便传输, 将大块数据分割成以报文段为单位的数据包进行管理 TCP 协议为了更容易传送大数据才把数据分割, 而且 TCP 协议能够确认数据最终是否送达到对方
TCP 的三次握手: 确保数据能到达目标
1 发送端首先发送一个带 SYN(synchronize)标志的数据包给对方;
2 接受端收到后, 回传一个带有 SYN/ACK(acknowledgement)标志的数据包以示传达确认消息;
3 最后, 发送端再回传一个带 ACK 标志的数据包, 代表握手结束
负责域名解析的 DNS 服务
DNS(Domain Name System)服务是和 HTTP 协议一样位于应用层的协议, 他提供域名到 IP 地址之间的解析服务例如把 www.hackr.jp 解析成对应的 IP 地址 20X.189.105.112
第二章 简单的 HTTP 协议
请求报文是由请求方法请求 URI(统一资源标识符, URL: 统一资源定位符)协议版本可选的请求收不字段和内容实体构成
2.3 HTTP 是不保存状态的协议
HTTP 是一种不保存状态, 即无状态协议 HTTP 协议自身不对请求和响应之间的通信状态进行保存, 不做持久化处理所以为了保存状态引入了 cookie 技术, 后面细讲
2.4 告知服务器意图的 HTTP 方法
1GET: 获取资源; 2POST: 传输实体主体 3PUT: 传输文件 4HEAD: 获得报文首部, 告知通信状态 5DELETE: 删除文件 6OPTIONS: 询问支持的方法 7TRACE: 追踪路径
2.5 使用 Cookie 的状态管理
Cookie 会根据从服务器端发送的响应报文内的一个叫做 Set-Cookie 的首部字段信息, 通知客户端保存 Cookie, 当下次客户端再往该服务器发送请求时, 客户端会自动在请求报文中加入 Cookie 值后发送出去服务器端根据客户端发过来的 cookie 对比服务器上的记录, 最后得到之前的状态信息即:
1 请求报文(没有 Cookie 信息的状态);
2 响应报文(服务端生成 Cookie 信息);
3 请求报文(自动发送保存着的 Cookie 信息)
web 网站为了管理用户的状态会通过 web 浏览器, 把一些数据临时写入用户的计算机内, 接着当用户访问该 web 网站时, 可通过通信方式取回之间发放的 cookie;
Cookie 属性
第三章 返回结果的 HTTP 状态码以及 Host
状态码
Host
第四章 确保 Web 安全的 HTTPS
HTTP 的缺点:
通信使用明文(不加密), 内容可能会被窃听;
不验证通信方的身份, 因此有可能遭遇伪装;
无法证明报文的完整性, 所以有可能已遭到篡改
HTTP + 加密 + 认证 + 完整性保护 = HTTPS
1 客户端通过发送 Client Hello 报文开始 SSL 通信, 报文中包含客户端支持的 SSL 的指定版本加密组件 (Cipher Suite) 列表(所使用的加密算法及密钥长度等);
2 服务器可进行 SSL 通信时, 会以 Server Hello 报文作为应答, 和客户端一样, 在报文中包含 SSL 版本及加密组件服务器的加密组件内容是从接收到的客户端加密组件内筛选出来的;
3 之后服务器发送 Certificate 报文, 报文中包含公开密钥证书;
4 最后服务器发送 Server Hello Done 报文通知客户端, 最初阶段的 SSL 握手协商部分结束;
5SSL 第一次握手结束后, 客户端以 Client Key Exchange 报文作为应答, 报文中包含通信加密中使用的一种被称为 Pre-mastersecret 的随机密码串, 该报文已用步骤 3 中的公开密钥进行加密;
6 接着客户端继续发送 Change Cipher Spec 报文, 该报文会提示服务器, 在此报文之后的通信会采用 Pre-master secret 密钥进行加密;
7 客户端发送 Finished 报文, 该报文包含链接至今全部报文的整体校验值, 这次握手协商是否能够成功, 要以服务器是否能够正确解密该报文作为判定标准;
8 服务器同样发送 Change Cipher Spec 报文;
9 服务器同样发送 Finished 报文;
10 服务器和客户端的 Finshed 报文交换完毕后, SSL 连接就算建立完成当然, 通信会受到 SSL 的保护, 从此处开始进行应用层协议的通信, 即发送 HTTP 请求;
11 应用层协议通信, 即发送 HTTP 响应;
12 最后由客户端断开连接, 断开连接时, 发送 close_notify 报文, 上图做了一些省略, 这步之后再发送 TCP FIN 报文来关闭与 TCP 的通信;
来源: https://juejin.im/post/5aa62f93f265da23906ba830