Network
OSI模型
物理层
- 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
- 主要作用是传输比特流。
- 这一层的数据叫做比特。
数据链路层
- 主要将从物理层接收的数据进行 MAC 地址的封装与解封装。
- 这一层的数据叫做帧。
- 在这一层工作的设备是交换机,数据通过交换机来传输。
网络层
- 主要将从下层接收到的数据进行 IP 地址的封装与解封装。
- 这一层的数据叫做报文。
- 这一层工作的设备是路由器。
传输层
- 定义了一些传输数据的协议和端口号。
- 主要是将从下层接收的数据进行分段传输,到达目的地址后再进行重组。
- 常常把这一层数据叫做段。
会话层
- 主要在系统之间发起会话或或者接受会话请求。
表示层
- 主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等。
应用层
- 主要是一些终端的应用。
TCP/IP 模型
- 因特网整个 TCP/IP 协议族。
- 从协议分层模型方面来讲,TCP/IP 由四个层次组成:网络访问层、网络层、传输层、应用层。
网络访问层(Network Access Layer)
- 在 TCP/IP 参考模型中并没有详细描述,只是指出主机必须使用某种协议与网络相连。
网络层(Internet Layer)
- 整个体系结构的关键部分,其功能是使主机可以把分组发往任何网络,并使分组独立地传向目标。
- 这些分组可能经由不同的网络,到达的顺序和发送的顺序也可能不同,高层需要自行对分组进行排序。
- 使用因特网协议(IP,Internet Protocol)。
传输层(Tramsport Layer)
使源端和目的端机器上的对等实体可以进行会话。
在这一层定义了两个端到端的协议:
- 传输控制协议(TCP,Transmission Control Protocol):TCP 是面向连接的协议,它提供可靠的报文传输和对上层应用的连接服务。为此,除了基本的数据传输外,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。
- 用户数据报协议(UDP,User Datagram Protocol):UDP 是面向无连接的不可靠传输的协议,主要用于不要 TCP 的排序和流量控制等功能的应用程序。
应用层(Application Layer)
- 包含所有的高层协议,包括:
- 虚拟终端协议(TELNET, TELecommunications NETwork)
- 文件传输协议(FTP,File Transfer Protocol)
- 电子邮件传输协议(SMTP,Simple Mail Transfer Protocol)
- 域名服务(DNS,Domain Name Service)
- 超文本传送协议 (HTTP,HyperText Transfer Protocol)
数据包
- 源端口号(16 位):(连同源主机 IP 地址)标识源主机的一个应用进程。
- 目的端口号(16 位):(连同目的主机 IP 地址)标识目的主机的一个应用进程,这两个值加上 IP 报头中的源主机 IP 地址和目的主机 IP 地址唯一确定一个 TCP 连接。
- 顺序号(seq,32 位):用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,表示在这个报文段中的第一个数据字节的顺序号。
- 确认号 (ack,32 位):包含发送确认的一端所期望收到的下一个顺序号,是上次已成功收到数据字节顺序号加 1 ,且只有 ACK 标志为 1 时确认序号字段才有效。
- TCP 报头长度(4 位):给出报头中 32bit 字的数目,指明数据从哪里开始,需要这个值是因为任选字段的长度是可变的。
- 保留位(6 位):保留给将来使用,目前必须置为 0 。
- 控制位(control flags ,6 位):有 6 个标志比特,它们中的多个可同时被设置为 1:
- URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。
- ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。
- PSH :为 1 表示是带有 PUSH 标志的数据,指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
- RST :用于复位由于主机崩溃或其他原因而出现错误的连接。它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。
- SYN :同步序号,为 1 表示连接请求,用于建立连接和使顺序号同步(synchronize )。
- FIN :用于释放连接,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。
- 窗口大小(16 位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口大小,最大为 65535 字节。
- 校验和(16 位):对整个的 TCP 报文段(包括 TCP 头部和 TCP 数据)以 16 位字进行计算所得,是一个强制性的字段,一定是由发送端计算和存储,并由接收端进行验证。
- 紧急指针(16位):只有当URG标志置1时紧急指针才有效,是发送端向另一端发送紧急数据的一种方式。
三次握手
- 发起建立连接请求:主机A发送
SYN=1,seq=x
。 - 确认建立连接请求:主机B发送
SYN=1,ACK=1,seq=y,ack=x+1
。 - 建立连接:主机A发送
ACK=1,seq=y+1,ack=x+1
。
四次挥手
因为 TCP 连接是全双工的,所以进行关闭时每个方向上都要单独进行关闭。
当一方完成它的数据发送任务,就发送一个 FIN 来向另一方通告将要终止这个方向的连接。
- 主机A关闭连接请求:主机A发送
FIN=1
。FIN_WAIT_1 - 主机B确认关闭连接请求:主机B发送
ACK=1
。CLOSE_WAIT 半关闭 - 主机B关闭连接请求:主机B发送
FIN=1
。LAST_ACK - 主机A确认关闭连接请求:主机A发送
ACK=1
。CLOSED
HTTP
- 无状态的协议:客户端和服务端之间不需要建立持久的连接,服务器端不保留连接的有关信息。
- 遵循请求(Request)/应答(Response)模型:客户端向服务端发送请求,服务端处理请求并返回适当的应答。
传输流程
地址解析
- 解析地址中的协议名、主机名、端口、对象路径等信息。
- 其中需要 DNS 解析域名得到主机的 IP 地址。
封装 HTTP 请求数据包
- 以上数据结合本纪信息,封装数据包。
封装 TCP 包并建立连接
客户端发送请求命令
- 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息(包括请求修饰符、客户端信息和可能的内容)。
服务器响应
- 服务器接到请求后,给予相应的响应信息。
- 格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息(包括服务器信息、实体信息和可能的内容)。
服务器关闭 TCP 连接
- 一般情况下,一旦 Web 服务器向浏览器发送了请求数据,就要关闭 TCP 连接。
- 如果其头信息加入
Connection:keep-alive
,TCP 连接在发送后将仍然保持打开状态,客户端可以继续通过相同的连接发送请求。 - 保持连接节省了为每个请求建立新连接所需的时间,还节约了网络带宽。
HTTPS
- 全称:Hypertext Transfer Protocol over Secure Socket Layer。
- 是以安全为目标的 HTTP 通道,即HTTP 下加入 SSL 层,其安全基础是 SSL,所用端口号为 443。
获取过程
建立连接获取证书
- SSL 客户端通过 TCP 和服务器建立连接,在连接的协商(握手)过程中请求证书。
- 客户端发出一个消息(包括可实现的算法列表和其它一些需要的消息)给服务端,服务器端会回应一个数据包(包括这次通信所需要的算法),然后服务端向客户端返回证书(包括服务端域名、申请证书的公司、公共秘钥)。
证书验证
- 客户端在收到证书后,会判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效。
- 客户端还会确保证书中列出的域名就是它正在连接的域名。
数据加密和传输
- 如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。
- 然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。
CDN(Content Delivery Network)
- 内容分发网络,一般包括分发服务系统、负载均衡系统和管理系统。
分发服务系统
- 基本的工作单元是各个 Cache 服务器,负责直接响应用户请求,将内容快速分发到用户,同时还负责内容更新,保证和源站内容的同步。
- 根据内容类型和服务种类的不同,分发服务系统分为多个子服务系统,如:网页加速服务、流媒体加速服务、应用加速服务等,每个子服务系统都是一个分布式的服务集群,由功能类似、地域接近的分布部署的 Cache 集群组成。
- 向上层的管理调度系统反馈各个 Cache 设备的健康状况、响应情况、内容缓存状况等,以便管理调度系统能够根据设定的策略决定由 哪个 Cache 设备来响应用户的请求。
负载均衡系统
- 整个 CDN 系统的中枢,负责对所有的用户请求进行调度,确定提供给用户的最终访问地址。
- 使用分级实现,最基本的两极调度体系包括全局负载均衡(GSLB)和本地负载均衡(SLB)。
- GSLB 根据用户地址和用户请求的内容,主要根据就近性原则,确定向用户服务的节点。一般通过 DNS 解析或者应用层重定向(Http 3XX 重定向)的方式实现。
- SLB 主要负责节点内部的负载均衡,当用户请求从 GSLB 调度到 SLB 时,SLB 会根据节点内各个 Cache 设备的工作状况和内容分布情况等对用户请求重定向。SLB 的实现有四层调度(LVS)、七层调 度(Nginx)和链路负载调度等。
管理系统
- 分为运营管理和网络管理子系统。
- 实现对 CDN 系统的设备管理、拓扑管理、链路监控和故障管理,为管理员提供对全网资源的可视化的集中管理。
- 运营管理是对 CDN 系统的业务管理,负责处理业务层面的与外界系统交互所必须的一些收集、整理、 交付工作。包括用户管理、产品管理、计费管理、统计分析等。
POST 和 GET 区别
POST和GET是HTTP请求的两种方式,都可实现将数据从浏览器向服务器发送带参数的请求。
HTTP请求底层协议都是TCP/IP,所以两者没有本质的区别。
- GET - 从指定的资源请求数据。
- POST - 向指定的资源提交要被处理的数据
- GET 提交的数据放在URL中,POST 则不会。这是最显而易见的差别。这点意味着 GET 更不安全( POST 也不安全,因为HTTP是明文传输抓包就能获取数据内容,要想安全还得加密)
- GET 回退浏览器无害,POST 会再次提交请求(GET 方法回退后浏览器再缓存中拿结果,POST 每次都会创建新资源)
- GET 提交的数据大小有限制(是因为浏览器对 URL 的长度有限制,GET 本身没有限制),POST 没有
- GET 可以被保存为书签,POST 不可以。
- GET 能被缓存,POST 不能
- GET 只允许 ASCII 字符,POST 没有限制
- GET 会保存再浏览器历史记录中,POST 不会