中国铁道部开始互联网实验。
2)、1989 年
建立并运行第一个公共网络。
3)、1994 年
接入国际互联网。
4)、至今
「当今中国最大的五个公用的计算机网络」:
- 「中国电信互联网(CHINANET)」
- 「中国联通互联网(UNINET)」
- 「中国移动互联网(CMNET)」
- 「中国教育与科研计算机网(CERNET)」
- 「中国科学技术网(CSTNET)」
3、中国的互联网企业
- 1996年,张朝阳创建搜狐。
- 1997年,丁磊创建网易。
- 1998年,王志东创建新浪,马化腾、张志东创建腾讯。
- 1999年,马云创建阿里巴巴。
- 2000年,李彦宏创建百度。
三、重识网络层次结构
网络为什么要分层?
因为复杂的程序都要分层。这是一个架构设计的通用问题,不仅仅是网络协议的问题,「只要涉及复杂的逻辑或软件需求需要经常变动的情况通常都会通过分层来解决」。
思考🤔:设计一个计算机网络需要解决哪些问题?
- 1)、传输数据时需要保证数据通路顺畅。
- 2)、需要识别目的计算机。
- 3)、需要了解目的计算机的状态。
- 4)、数据是否错误。
总之,计算机网络需要解决的问题是繁多而复杂的,所以我们需要 「采用分层的设计分别去解决不同的问题,实现不同的功能」。
1、层级结构设计的基本原则
1)、相互独立
每一层仅仅实现一个相对独立的功能,并且需要确保层与层之间的耦合度是非常低的。
2)、灵活性
每一层的设计需要具备很好的灵活性、扩展性,以适应未来的网络变化。
3)、耦合度
各层之间是完全解耦的,层与层之间的变化互不影响。
2、OSI 七层模型
OSI | 功能 |
---|---|
应用层 | 为计算机用户提供接口和服务。 |
表示层 | 数据处理:编解码、加解密等等。 |
会话层 | 管理(建立、维护、重连)通信会话。 |
传输层 | 管理端到端的通信连接。 |
网络层 | 数据路由:决定数据在网络中的路径。 |
数据链路层 | 管理相邻节点之间的数据通信。 |
物理层 | 数据通信的光电物理特性。 |
1)、OSI 悲催的故事
- 1)、一开始,OSI 欲称为全球计算机都遵守的标准。
- 2)、但是,OSI 在市场化的过程中困难重重,因为 TCP/IP 已经在全球范围成功运行。
- 3)、最终,OSI 并没有称为广为使用的标准模型。
2)、OSI 七层模型失败的原因
- 1)、OSI 的专家没有充分将理论与实际进行结合。
- 2)、OSI 标准的制定周期过长,按 OSI 标准生产的设备无法及时进入市场。
- 3)、OSI 模型的设计不合理,某些功能在多层重复出现。
3、TCP/IP 四层模型
我们需要理解数据通信过程中不同设备之间协议的转换。从下图可以看到 「路由器仅包括网络层与网络接口层」。
从协议的数量来看,TCP/IP 四层模型构成了中间窄,两端大的⏳沙漏形状。如下图所示:
四、初识现代网络拓扑
1、为什么要了解网络拓扑?
因为它 「有助于我们在脑海里面形成一个形象的计算机网络」。
2、网络拓扑分类
1)、边缘部分
家庭
由 「终端机器、路由器、网关、地区 ISP」 组成。
企业
不同于家庭的网络拓扑,其 「网关细分为内部网关与统一网关」。
2)、核心部分
由 「地区 ISP、主干 ISP、路由器、海底电缆或跨地区电缆」 组成。其中的 「通信设备(一般是华为)主要是由移动、联通所铺设的」。
现代互联网的网络拓扑形成了一个 「树状结构」。
3)、C/S 模式
由 客户端/服务端 模式组成,并可以相互进行通信。
4)、P2P 模式
不分为服务端和客户端,它们都是 「对等地进行连接的」,优势在于可以使 「下载速度更快」,如迅雷下载器中就应用了这种模式。
五、网络性能指标
1、速率
即 bps <==> bit/s
网络数据传输的各种单位与之对应的常见设备
为什么电信拉的 100M 光纤,测试峰值速度只有 12M 每秒?
网络常用单位为(Mbps),因此这里的 100M 指的是 100Mbps。
100 M/S = 100 Mbps = 100 Mbit/s
100 Mbit/s = (100/8)MB/s = 12.5 MB/s
2、时延
1)、发送时延
发送时延 = 数据长度(bit)/ 发送速率(bit/s)
数据长度是由用户决定的,而发送速率是由计算机网卡所决定的。
2)、传输时延
传播时延 = 传输路径距离 / 传播速率(bit/s)
传输路径距离是由用户决定的,而传播速率则受限于传输介质。
3)、排队时延
数据包在网络设备中等待被处理的时间,例如路由器需要一个一个处理完前面的数据包才能处理后面的。
4)、处理时延
数据包到达设备或者目的机器被处理所需的时间。
总时延 = 发送时延 + 排队时延 + 传播时延 + 处理时延
3、往返时间 RTT(Route-Trip Time)
- 评估网络质量的一项重要指标。
- 表示数据报文在端到端通信中来回一次的时间。
通常使用 ping 命令查看 RTT
1)、ping 查看当前城市中的 IP
quchao@quchaodeMacBook-Pro ~ % ping 119.29.148.149
PING 119.29.148.149 (119.29.148.149): 56 data bytes
64 bytes from 119.29.148.149: icmp_seq=0 ttl=116 time=13.210 ms
64 bytes from 119.29.148.149: icmp_seq=1 ttl=116 time=19.118 ms
64 bytes from 119.29.148.149: icmp_seq=2 ttl=116 time=34.384 ms
2)、ping 美国的 IP
quchao@quchaodeMacBook-Pro ~ % ping 191.101.238.160
PING 191.101.238.160 (191.101.238.160): 56 data bytes
64 bytes from 191.101.238.160: icmp_seq=0 ttl=52 time=191.791 ms
64 bytes from 191.101.238.160: icmp_seq=1 ttl=52 time=180.278 ms
64 bytes from 191.101.238.160: icmp_seq=2 ttl=52 time=186.399 ms
六、应用层
「传输层与之下的层已经提供了完整的通信服务」。而应用层是面向用户的一层。它主要是用来 「定义应用间通信的规则」,例如应用进程的报文类型(请求报文、应答报文)、报文的语法、格式、应用进程发送数据的时机、规则等等。
1、DNS(Domain Name System) 域名系统服务
域即对应的网络号,名即对应的主机名字。
1)、功能
通过把没有规则的点分十进制 IP 地址转换为可以理解的一些域名。
2)、域名
- 使用域名可以帮助记忆。
- 域名通过 DNS 服务可以被转换成 IP 地址。
- 域名是由点、字母和数字组成的。
- 点分割不同的域。
- 「域名可以分为顶级域、二级域、三级域…,例如:www.taobao.com => - 三级域.二级域.顶级域」。
顶级域常见分类
-
国家
-
cn
-
us
-
uk
-
ca
-
通用
-
com
-
net
-
gov
-
org
二级域
例如:qq、aliyun、taobao、google、facebook 等等。
「顶级域、二级域、三级域组成了一个树状结构。且在顶级域名服务器上面还有一个根域名服务器」。
3)、域名服务器
只要有一个外网的服务器就可以搭建一个域名的服务器。
2、DHCP(Dynamic Host Configuratin Protocol) 动态主机设置协议
1)、是什么?
「网络管理员只需配置一段共享的 IP 地址,每一台新接入的机器都可以通过 DHCP 来这个共享的 IP 地址里面申请 IP 地址,就可以自动配置。等用完还回去其它机器也能使用」。它的特点如下所示:
- 1、「DHCP 是一个局域网协议」。
- 2、「DHCP 是应用 UDP 协议的应用层协议」。
2)、功能
- 「即插即用联网」。
- 「在 IP 配置界面选中 自动获得 IP 地址、自动获得 DNS 服务器地址即可启用 DHCP 协议去获取一个临时 IP(通常是一个内网地址)」。
- 「有一个租期,在租期过半时可以续租」。
3)、DHCP 的过程
- 1)、「DHCP 服务器监听默认端口:67」。
- 2)、「主机使用 UDP 协议广播 DHCP 发现报文」。
- 3)、「DHCP 服务器发出 DHCP 提供报文」。
- 4)、「主机向 DHCP 服务器发出 DHCP 请求报文」。
- 5)、「DHCP 服务器回应并提供 IP 地址」。
4)、向 DHCP 租用的 IP 地址是有租期的,IP 地址如何实现续租呢?
客户端会在租期过去50%的时候,直接向为其提供 IP 地址的 DHCP 服务器发送 DHCP request 消息报。客户端接收到服务器回应的 DHCP ACK 消息包后,会根据消息报中提供的新的租期以及其他已经更新的 TCP/IP 参数更新自己的配置。
3、HTTP(HyperText Tranfsfer Protocol) 超文本传输协议
1)、是什么?
- HyperText 即超文本、超链接,Http 是指在电脑中显示的、「含有可以指向其他文本的链接文本」。
- 对于这些内容都有一个统一的路径,例如:
http(s)://<主机>:<端口>/<路径>
。 - 「HTTP 协议底层是 TCP 协议,因此它是可靠的数据传输协议」。
2)、Web 服务器
分为硬件部分(计算机或云上的虚拟设备)和软件部分(Nginx、Apache)。
过程
- 1)、「接受客户端连接」
- 2)、「接受请求报文」
- 3)、「处理请求」
- 4)、「访问 Web 资源」
- 5)、「构造应答」
- 6)、「发送应答」
3)、HTTP 请求方法
header 1 | header 2 |
---|---|
GET | 获取指定的服务端资源。 |
POST | 提交数据到服务端。 |
DELETE | 删除指定的服务端资源。(很少用) |
UPDATE | 更新指定的服务端资源。 |
PUT | 修改数据。 |
OPTIONS | 列出可对资源实行的请求方法,用来跨域请求。 |
CONNECT | 建立连接隧道,用于代理服务器 |
HEAD | 获取资源的元信息 |
TRACE | 追踪请求-响应的传输路径 |
GET 和 POST 的区别
- 1、「get参数通过url传递,post放在request body中」。
- 2、「get请求在url中传递的参数是有长度限制的,而post没有」。
- 3、「get比post更不安全,因为参数直接暴露在url中,所以不能用来传递敏感信息」。
- 4、「get请求只能进行url编码,而post支持多种编码方式」。
- 5、「get请求会浏览器主动cache,而post支持多种编码方式」。
- 6、「get请求参数会被完整保留在浏览历史记录里,而post中的参数不会被保留」。
- 7、「GET和POST本质上就是TCP链接,并无差别。但是由于HTTP的规定和浏览器/服务器的限制,导致他们在应用过程中体现出一些不同」。
4)、HTTP 指定资源
1)、在地址中指定
❝
https://www.wanandroid.com/repo/100.html
❞
repo/100.html 是指定的请求资源。
❝
https://www.wanandroid.com/?sort=0&unlearn=0&page=2
❞
? 后面用来指定请求参数。
2)、在请求数据中指定
5)、HTTP 请求报文
HTTP 的请求报文与响应报文都满足如下结构:
❝
起始行 + 头部 + 空行 + 实体
❞
其中的 「空行是用来区分开头部和实体的」。
HTTP 请求报文的格式如下所示:
例如:
POST https://www.wanandroid.com HTTP/1.1
Accept-Encoding:gzip
Accept-Language:zh-CN
…
{ 请求的 jsonString 内容}
6)、HTTP 应答报文
7)、HTTP 应答状态码
header 1 | header 2 |
---|---|
100~199 | 协议处理的中间状态,还需要后续操作 |
200~299 | 成功 |
300~399 | 重定向 |
400~499 | 客户端错误 |
500~599 | 服务端错误 |
100~199
- 101:Switching Protocols,服务器同意将 HTTP 升级为 WebSocket 时发送。
200~299
- 200:在响应体中放有数据。
- 204:No Content,响应头后没有 body 数据。
- 206:Partial Content,通常用于 HTTP 分块下载和断点续传,同时带上相应的响应头字段 Content-Range。
300~399
- 301:Moved Permanently,永久重定向。
- 302:Found,临时重定向。
- 304:Not Modified,协商缓存命中时返回。
400~499
- 400:Bad Request,请求出错。
- 403:Forbidden,服务器禁止访问,原因有法律禁止、信息敏感等。
- 404:Not Found,资源未找到。
- 405:Method Not Allowed,请求方法不被允许。
- 406:Not Acceptable,资源无法满足条件。
- 408:Request Timeout,请求超时。
- 409:Conflict,多个请求发生了冲突。
- 413:Request Entity Too Large,请求体的数据过大。
- 414:Request-URI Too Long,请求行里的 URI 太大。
- 429:Too Many Request,客户端发送的请求过多。
- 431:Request Header Fields Too Large,请求头的字段内容太大。
500~599
- 500:Internal Server Error,服务内部出错。
- 501:Not Implemented: 请求的功能不支持。
- 502:Bad Gateway: 服务器自身是正常的,只是数据通道有问题。
- 503:Service Unavailable: 服务器很忙,无法响应服务。
8)、HTTP 工作结构
Web 缓存
通常遵循 「二八原则」:一个网站的内容通常分为20%的热门内容,80%的冷门内容。因此可以优先缓存热门内容。
存储器层次结构
缓存(CPU 高速缓存)/主存(内存)/辅存(磁盘)
Web 代理
- 通过 Web 代理可以屏蔽服务器的部署结构。
- 可以在 Web 代理里面设置规则,如防火墙来保证安全。
Web 代理的分类
- 1)、正向代理:代理客户端去访问 Server。
- 2)、反向代理:代理 Server 把数据返回给客户端。例如 Nginx、HAProxy 就是一些著名的代理软件。
CDN(Content Delivery Network)内容分发网络
- 「用于将一些大的内容在临近的服务器留一个备份」。
- 「使用 CDN 可以进行多媒体内容的加速」。
CDN的基本原理是 「广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应」。
爬虫
用于在互联网上采集信息, 例如百度、Google的本质就是一个爬虫,它们通过把整个网络的数据给取下来,并且做一个索引,然后把这些内容提供给大家,在进行搜索时就会匹配这些内容并返回。
不好的爬虫的缺点:
- 增加网络拥塞。
- 损耗服务器资源。
4、HTTPS(Secure) 安全的 HTTP 协议
❝
https://<主机>:<443>/<路径>
❞
HTTP 是明文传输的,但是我们需要在网络中传输 账号密码、个人信息、账号金额、交易信息、敏感信息,这会导致中间人非法截取信息,导致信息泄露。
1)、加密模型
-
「对称加密:加密与解密都使用同一个秘钥」。
-
「非对称加密:公钥加密,私钥解密,并且公钥与私钥是拥有一定数学关系的一组秘钥」。
-
「私钥:自己使用,不对外公开」。
-
「公钥:给大家使用,对外公开」。
2)、数字证书 签名校验
「数字证书是可信任组织颁发给特定对象的认证。而可信任组织即客户端与服务端都认为安全的组织」。
数字证书格式
- 证书格式、版本号
- 证书序列号
- 签名算法
- 有效期
- 对象名称
- 对象公开秘钥
3)、SSL(Secure Sockets Layer)安全套接层
「SSL 位于传输层与应用层之间,它是一个子层,作用主要有两点」:
- 1)、「数据安全(保证数据不会被泄漏)与数据完整(保证数据不会被篡改)」。
- 2)、「对数据进行加密后传输」。
HTTPS 的通信过程
- 1)、「443 端口的 TCP 连接」。
- 2)、「SSL 安全参数握手」。
- 3)、「客户端发送数据」。
- 4)、「服务端发送数据」。
SSL(Secure Sockets Layer) 安全套接层握手过程
1)、生成随机数 1、2、3 的过程
2)、双端根据随机数 1、2、3 与相同的算法生成对称秘钥进行加密通信
「HTTPS 综合地运用了对称加密与非对称加密,在进行随机数校验的阶段是使用了非对称加密来进行通信的,然后等双方都确定了三个随机数之后,就可以使用相同的算法来生成对称秘钥进行加密通信了。HTTPS 的优势在于双端分别生成了秘钥,没有经过传输,减少了秘钥泄漏的可能性」。
5、Http2
它的特点如下所示:
- 1)、「头部压缩」。
- 2)、「多路复用:多路复用允许同时通过单一的HTTP/2连接发送多重请求-响应信息。改善了:在http1.1中,浏览器客户端在同一时间,针对同一域名下的请求有一定数量限制(连接数量),超过限制会被阻塞」。
- 3)、「提升访问速度:相比 http1.1 请求资源所需时间更少,访问速度更快」。
- 4)、「二进制分帧:HTTP2.0 会将所有的传输信息分割为更小的信息或者帧,并对他们进行二进制编码」。
- 5)、「设置请求优先级」。
- 6)、「服务端推送」。
6、cookie
「HTTP 是一个无状态协议,因此 Cookie 的最大的作用就是存储 sessionId 用来唯一标识用户。并且,Cookie 本质上就是浏览器里面存储的一个很小的文本文件,内部以键值对的方式来存储」。
生存周期
通过 Expires 和 Max-Age 两个属性来设置:
- Expires:过期时间。
- Max-Age:表示一段时间间隔,单位是秒,从浏览器收到报文开始计算。
作用域
「我们可以使用 Domain 和 path 属性给 Cookie 绑定域名和路径。如果在发送请求之前,发现域名或者路径和这两个属性不匹配,那么就不会带上 Cookie」。需要注意的是,路径中含有 / 表示域名下的任意路径都允许使用 Cookie。
安全
- 「带上 Secure:说明只能通过 HTTPS 传输 cookie」。
- 「带上 HttpOnly:说明只能通过 HTTP 协议传输」。
- 「带上 SameSite:预防 CSRF 攻击」。
缺点
- 1)、「安全缺陷:Cookie 很容易被非法用户截获,然后进行一系列的篡改,最后在 Cookie 的有效期内重新发送给服务器」。
- 2)、「容量缺陷:体积上限只有4KB,只能用来存储少量的信息」。
- 3)、「性能缺陷:Cookie 紧跟域名,因此域名下的请求都会携带上完整的 Cookie,这样随着请求数的增多,将会造成巨大的性能浪费,因为请求携带了很多不必要的内容。这里可以通过 Domain 和 Path 指定作用域去解决」。
7、HTTP 传输中的常见问题
- 1)、「跨域问题」
- 2)、「数据传输」
- 3)、「队头阻塞」
七、传输层
现在,当设备 A 与 设备 B 相互通信时,我们可以认为它们就是通过一个虚拟的互连网络进行连接的。「在虚拟的互连网络里面已经解决了网络拓扑、数据路由的走向等问题。在传输层重点解决的是两个设备它们直接是如何进行通信的」。
1、传输层的主要功能
1)、进程与进程的通信
不同于在单个操作系统内使用的进程间通信(Unix 域套接字、共享内存),网络通信可以跨设备、跨网络进行通信。
2)、端口的概念
- 「使用端口来标记不同的网络进程」。
- 「端口使用16比特位表示(0~65535)」。
常见的协议端口有:
协议 | 端口 |
---|---|
FTP | 21 |
HTTP | 80 |
HTTPS | 443 |
DNS | 53 |
TELNET | 23 |
2、UDP(User Datagram Protocol)用户数据报协议
1)、功能
UDP 协议 「不会对数据报进行任何的处理,即不合并,也不拆分数据」。
2)、特点
1)、无连接
通信时并不需要提前建立连接。
2)、不保证可靠的数据交付
想发就发,无法保证数据在网络传输过程中是否丢失。
3)、面向报文传输
不对数据做任何处理,而是直接将应用层数据塞进报文里面。
4)、没有拥塞控制
不管网络是否拥塞,它都会把数据给交付出去。
5)、首部开销很小
首部仅仅占用8个字节。
3)、报文结构
- 「UDP 长度最小值为 8, 即仅包括 UDP 首部」。
- 「校验和是用来检测 UDP 的数据报在传输过程中是否出错」。
4)、基于 UDP 定制化的 5 个例子🌰
1、来自网页或者 App 的访问
目前,HTTP 往往采取多个数据通道共享一个连接的策略,这样做本来是为了加快传输速度,但是 TCP 严格的顺序策略使得哪怕共享通道,前一个包不来,后一个包即使与前一个包没关系,也要等着,这样就会使时延加大。
而 QUIC(Quick UDP Internet Connection,快速 UDP 互联网连接)协议是 Google 提出的一种基于 UDP 改进的通信协议,其目的是降低网络通信的延迟,提供更好的用户互动体验。
QUIC 会在应用层上自己快速建立连接、减少重传时延、自适应拥塞控制,是应用层定制化的代表。
2、流媒体协议
直播通常都使用 RTMP(Real Time Messaging Protocol,实时消息传输协议),基于 TCP。但对于直播来说实时性比较重要,宁可丢包,也不要卡顿。
最后
其实要轻松掌握很简单,要点就两个:
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
- 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
- 多练。 (视频优势是互动感强,容易集中注意力)
你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。
对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。
阿里P7Android高级教程
下面资料部分截图,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。
[外链图片转存中…(img-XCu288ia-1714678595406)]
附送高清脑图,高清知识点讲解教程,以及一些面试真题及答案解析。送给需要的提升技术、近期面试跳槽、自身职业规划迷茫的朋友们。
Android核心高级技术PDF资料,BAT大厂面试真题解析;
[外链图片转存中…(img-ap3FKdTp-1714678595406)]
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!