文章目录
网络
- 在计算机领域中,网络是信息传输、接收、共享的虚拟平台,将各个点、面、体的信息联系到一起,从而实现这些资源的共享。在大型分布式系统中,网络起着至关重要的作用。
- 相关知识点
(a)网络7层架构
(b)TCP/IP、HTTP和CDN的原理
OSI七层网络模型
网络的七层架构从下到上主要包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
物理层
- 主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。
- 它的主要作用是传输比特流(就是由 1、0 转化为电流强弱来进行传输,到达目的地后在转化为1、0,也就是我们常说的模数转换与数模转换)。
- 这一层的数据叫做比特。
数据链路层
- 主要将从物理层接收的数据进行 MAC 地址(网卡的地址)的封装与解封装。
- 常把这 一层的数据叫做帧。
- 在这一层工作的设备是网卡、网桥、交换机,数据通过交换机来传输。
网络层
- 主要将从下层接收到的数据进行 IP 地址(例 192.168.0.1)的封装与解封装。
- 在这一层工作的设备是路由器、交换机、防火墙等。
- 常把这一层的数据叫做数据包。
传输层
- 传输层定义了传输数据的协议和端口号,主要用于数据的分段、传输和重组。
- 在这一层工作的协议有TCP和UDP等。
- TCP是传输控制协议,传输效率低,可靠性强,用于传输对可靠性要求高、数据量大的数据,比如支付宝转账使用的就是TCP。
- UDP是用户数据报协议,与TCP的特性恰恰相反,用于传输可靠性要求不高、数据量小的数据,例如抖音等视频服务就使用了UDP。
会话层
- 会话层在传输层的基础上建立连接和管理会话,具体包括登录验证、断点续传、数据粘包与分包等。
- 在设备之间需要互相识别的可以是IP,也可以是MAC或者主机名。
表示层
主要是进行对接收的数据进行解释、加密与解密、压缩与解压缩等(也就是把计算机能够识别的东西转换成人能够能识别的东西(如图片、声音等))
应用层
应用层基于网络构建具体应用,例如FTP文件上传下载服务、Telnet服务、HTTP服务、DNS服务、SNMP邮件服务等。
TCP/IP四层网络模型
TCP/IP不是指TCP和IP这两个协议的合称,而是指因特网的整个TCP/IP协议簇。从协议分层模型方面来讲,TCP/IP由4个层次组成:网络接口层、网络层、传输层和应用层。
网络接口层
网络接口层(Network Access Layer):定义了主机间网络连通的协议,具体包括Echernet、FDDI、ATM等通信协议。
网络层
网络层(Internet Layer):主要用于数据的传输、路由及地址的解析,以保障主机可以把数据发送给任何网络上的目标。数据经过网络传输,发送的顺序和到达的顺序可能发生变化。在网络层使用IP(Internet Protocol)和地址解析协议(ARP)。
传输层
传输层(Transport Layer):使源端和目的端机器上的对等实体可以基于会话相互通信。在这一层定义了两个端到端的协议TCP和UDP。TCP是面向连接的协议,提供可靠的报文传输和对上层应用的连接服务,除了基本的数据传输,它还有可靠性保证、流量控制、多路复用、优先权和安全性控制等功能。UDP是面向无连接的不可靠传输的协议,主要用于不需要TCP的排序和流量控制等功能的应用程序。
应用层
应用层(Application Layer):负责具体应用层协议的定义,包括Telnet(TELecommunications NETwork,虚拟终端协议)、FTP(File Transfer Protocol,文件传输协议)、SMTP(Simple Mail Transfer Protocol,电子邮件传输协议)、DNS(Domain Name Service,域名服务)、NNTP(Net News Transfer Protocol,网上新闻传输协议)和HTTP(HyperText Transfer Protocol,超文本传输协议)等。
TCP 三次握手/四次挥手
TCP 在传输之前会进行三次沟通,一般称为“三次握手”,传完数据断开的时候要进行四次沟通,一般称为“四次挥手”。
TCP的数据包结构
TCP的数据包结构图:
TCP包的数据解释:
- 源端口号(16位): 标识源主机的一个应用进程(连同源主机的IP地址)。
- 目的端口号(16位): 标识目的主机的一个应用进程(连同目的主机的IP地址)。IP报头中的源主机IP地址、目的主机的IP地址和源端口、目的端口确定了唯一一条TCP连接。
- 顺序号seq(32位): 标识从TCP源端向TCP目的端发送的数据字节流,表示这个报文段中的第1个数据字节的顺序号。 如果将字节流看作在两个应用程序间的单向流动,则TCP用顺序号对每个字节进行计数。序号是32bit的无符号数,序号达到232-1后又从0开始。在建立一个新的连接时,SYN标志变为1,顺序号字段包含由这个主机选择的该连接的初始顺序号ISN(Initial Sequence Number)。
- 确认号ack(32位): 存储发送确认的一端所期望收到的下一个顺序号。 确认序号是上次已成功收到的数据字节顺序号加1。只有ACK标志为1时确认序号字段才有效。TCP为应用层提供全双工服务,这意味着数据能在两个方向上独立进行传输。因此,连接的每一端都必须保持每个方向上的传输数据顺序号。
- TCP报头长度(4位): 存储报头中头部数据的长度,实际上指明了数据从哪里开始。 需要这个值是因为任选字段的长度是可变的,该字段占4bit,因此TCP最多有60字节的首部,但没有任选字段,正常的长度是20字节。
- 保留位(6位): 数据保留位,目前必须被设置为0。
- 控制位(control flags:6位): 在TCP报头中有6个标志比特,它们中的多个可被同时设置为1。
-
URG :为 1 表示紧急指针有效,为 0 则忽略紧急指针值。
-
ACK :为 1 表示确认号有效,为 0 表示报文中不包含确认信息,忽略确认号字段。
-
PSH :为 1 表示是带有 PUSH 标志的数据, 指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满。
-
RST :用于复位由于主机崩溃或其他原因而出现错误的连接。 它还可以用于拒绝非法的报文段和拒绝连接请求。一般情况下,如果收到一个 RST 为 1 的报文,那么一定发生了某些问题。
-
SYN :同步序号,为 1 表示连接请求 ,用于建立连接和使顺序号同步( synchronize )。
-
FIN :用于释放连接 ,为 1 表示发送方已经没有数据发送了,即关闭本方数据流。
- 窗口大小(16位): 数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口的大小。窗口大小是16bit的字段,因而窗口最大为65535字节。
- 校验和(16位): 此校验和是对整个的TCP报文段,包括TCP头部和TCP数据,以16位字符计算所得的。 这是一个强制性的字段,一定是由发送端计算和存储的,并由接收端验证。
- 紧急指针(16位): 只有在URG标志置为1时紧急指针才有效,这时告诉TCP该条数据需要紧急发送。TCP 的紧急方式是发送端向另一端发送紧急数据的一种方式。
- 选项: 最常见的可选字段是最长报文大小,又叫作MSS(Maximum Segment Size)。每个连接方通常都在通信的第1个报文段(为建立连接而设置SYN标志的那个段)中指明这个选项,指明该TCP连接能接收的最大长度的报文段。 选项长度不一定是32字节的整数倍,所以要加填充位,使得报头长度成为整字节数。
- 数据: TCP报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP首部。如果一方没有数据要发送,则也使用没有任何数据的首部确认收到的数据。在处理超时的许多情况下也会发送不带任何数据的报文段。
TCP中的三次握手
- TCP是因特网的传输层协议,使用三次握手协议建立连接。
- 在客户端主动发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方式可以防止产生错误的连接,TCP使用的流量控制协议是可变大小的滑动窗口协议。
- 三次握手过程:
(1)第一次握手:主机 A 发送位码为 SYN=1,随机产生 seq number=x 的数据包到服务器,主机 B 由 SYN=1 知道,A 要求建立联机。
(2)第二次握手:主机 B 收到请求后要确认联机信息,向 A 发 送 ack number=( x+1),SYN=1,ACK=1,随机产生 seq=y 的包。
(3)第三次握手:主机 A 收到后检查 ack number 是否正确,即第一次发送的 seq number+1,以及位码ACK是否为 1,若正确,主机 A 会再发送 ack number=(主机 B 的 seq+1),ACK‘=1,主机 B 收到后确认seq 值与 ACK=1 则连接建立成功。
图解:
TCP中的四次握手
- TCP在建立连接时要进行三次握手,在断开连接时要进行四次挥手,这是由于TCP的半关闭造成的。 因为TCP连接是全双工的(即数据可在两个方向上同时传递),所以在进行关闭时对每个方向都要单独进行关闭,这种单方向的关闭叫作半关闭。在一方完成它的数据发送任务时,就发送一个FIN来向另一方通告将要终止这个方向的连接。
- TCP断开连接既可以是由客户端发起的,也可以是由服务器端发起的;如果由客户端发起断开连接操作,则称客户端主动断开连接;如果由服务器端发起断开连接操作,则称服务端主动断开连接。
- 以客户端发起关闭连接请求为例,说明TCP四次挥手断开连接的过程:
(1)客户端应用进程调用断开连接的请求,向服务器端发送一个终止标志位FIN=1, 序列号seq=u的消息,表示在客户端关闭链路前要发送的数据已经安全发送完毕,可以开始关闭链路操作,并请求服务器端确认关闭客户端到服务器的链路操作。此时客户端处于FIN-WAIT-1状态。
(2)服务器在收到这个FIN消息后返回一个ACK=1, ack=u+1, seq=v的消息给客户端,表示接收到客户端断开链路的操作请求,这时TCP服务器端进程通知高层应用进程释放客户端到服务器端的链路,服务器处于CLOSE-WAIT状态,即半关闭状态。客户端在收到消息后处于FIN-WAIT-2状态。
(3)服务器端将关闭链路前需要发送给客户端的消息发送给客户端,在等待该数据发送完成后,发送一个终止标志位FIN=1, ACK=1, seq=w, ack=u+1的消息给客户端,表示关闭链路前服务器需要向客户端发送的消息已经发送完毕,请求客户端确认关闭从服务器到客户端的链路操作,此时服务器端处于LAST-ACK状态,等待客户端最终断开链路。
(4)客户端在接收到这个最终FIN消息后,发送一个ACK=1, seq=u+1,ack=w+1的消息给服务器端,表示接收到服务器端的断开连接请求并准备断开服务器端到客户端的链路。此时客户端处于TIM-WAIT状态,TCP连接还没有释放,然后经过等待计时器(2MSL)设置的时间后,客户端将进入CLOSE状态。
HTTP的原理
- HTTP 是一个无状态的协议。无状态是指客户机(Web 浏览器)和服务器之间不需要建立持久的连接,这意味着当一个客户端向服务器端发出请求,然后服务器返回响应(response),HTTP连接就被关闭了,在服务器端不保留连接的有关信息。
- HTTP 遵循请求(Request)/应答(Response)模型。客户机(浏览器)向服务器发送请求,服务器处理请求并返回适当的应答。所有 HTTP 连接都被构造成一套请求和应答。
HTTP的传输流程
HTTP的传输流程包括地址解析、封装HTTP数据包、封装TCP包、建立TCP连接、客户端发送请求、服务端响应、服务端关闭TCP连接。
- 地址解析: 地址解析通过域名系统DNS解析服务器域名从而获得主机的IP地址。如用客户端浏览器请求这个页面:http://localhost.com:8080/index.htm 从中分解出协议名、主机名、端口、对象路径等部分,对于我们的这个地址,解析得到的结果如下:
- 协议名:HTTP
- 主机名:localhost.com
- 端口号:8080
- 对象路径:/index.htm
-
封装HTTP数据包: 解析协议名、主机名、端口、对象路径等并结合本机自己的信息封装成一个HTTP请求数据包。
-
封装TCP包: 将HTTP请求数据包进一步封装成TCP数据包。
-
建立TCP连接: 基于TCP的三次握手机制建立TCP连接。
-
客户端发送请求: 建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是 MIME 信息包括请求修饰符、客户机信息和可能的内容。
-
服务端响应: 服务器接到请求后,结合业务逻辑进行数据处理,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是 MIME 信息包括服务器信息、实体信息和可能的内容。
-
服务端关闭TCP连接: 服务器在向浏览器发送请求响应数据后关闭TCP连接。但如果浏览器或者服务器在消息头中加入了Connection:keep-alive,则TCP连接在请求响应数据发送后仍然保持连接状态,在下一次请求中浏览器可以继续使用相同的连接发送请求。采用keep-alive方式不但减少了请求响应的时间,还节约了网络带宽和系统资源。
HTTP中的常见状态码
在HTTP请求中,无论是请求成功还是失败都会有对应的状态码返回。状态码是我们定位错误的主要依据。
"10x"
状态码 | 响应 |
---|---|
100 | Continue(继续) |
101 | Switching Protocol(切换协议) |
- 一般
"20x"
格式的状态码表示成功:
状态码 | 响应 |
---|---|
200 | OK(成功) |
201 | Created(已创建) |
202 | Accepted(已创建) |
203 | Non-Authoritative Information(未授权信息) |
204 | No Content(无内容) |
205 | Reset Content(重置内容) |
206 | Partial Content(部分内容) |
"30x"
格式的状态码表示网络重定向
状态码 | 响应 |
---|---|
300 | Multiple Choice(多种选择) |
301 | Moved Permanently(永久移动) |
302 | Found(临时移动) |
303 | See Other(查看其他位置) |
304 | Not Modified(未修改) |
305 | Use Proxy(使用代理) |
306 | unused(未使用) |
307 | Temporary Redirect(临时重定向) |
308 | Permanent Redirect(永久重定向) |
"40x"
格式的状态码表示客服端请求错误
状态码 | 响应 |
---|---|
400 | Bad Request(错误请求) |
401 | Unauthorized(未授权) |
402 | Payment Required(需要付款) |
403 | Forbidden(禁止访问) |
404 | Not Found(未找到) |
405 | Method Not Allowed(不允许使用该方法) |
406 | Not Acceptable(无法接受) |
407 | Proxy Authentication Required(要求代理身份验证) |
408 | Request Timeout(请求超时) |
409 | Conflict(冲突) |
410 | Gone(已失效) |
411 | Length Required(需要内容长度头) |
412 | Precondition Failed(预处理失败) |
413 | Request Entity Too Large(请求实体过长) |
414 | Request-URI Too Long(请求网址过长) |
415 | Unsupported Media Type(媒体类型不支持) |
416 | Requested Range Not Satisfiable(请求范围不合要求) |
417 | Expectation Failed(预期结果失败) |
"50x"
格式的状态码表示服务器错误
状态码 | 响应 |
---|---|
500 | Internal Server Error(内部服务器错误) |
501 | Implemented(未实现) |
502 | Bad Gateway(网关错误) |
503 | Service Unavailable(服务不可用) |
504 | Gateway Timeout (网关超时) |
505 | HTTP Version Not Supported(HTTP 版本不受支持) |
HTTPS
-
HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer)是以安全为目标的HTTP通道,它在HTTP中加入SSL层以提高数据传输的安全性。
-
HTTP被用于在Web浏览器和网站服务器之间传递信息,但以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP不适合传输一些敏感信息,比如身份证号码、密码等。
-
为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并对浏览器和服务器之间的通信进行数据加密,以保障数据传输的安全性,其端口一般是443。
-
加密流程
(1)建立连接获取证书
SSL 客户端通过 TCP 和服务器建立连接之后(443 端口),并且在一般的 tcp 连接协商(握手)过程中请求证书。即客户端发出一个消息给服务器,这个消息里面包含了自己可实现的算法列表和其它一些需要的消息,SSL 的服务器端会回应一个数据包,这里面确定了这次通信所需要的算法,然后服务器向客户端返回证书。(证书里面包含了服务器信息:域名。申请证书的公司,公共秘钥)。
(2)证书验证
Client 在收到服务器返回的证书后,判断签发这个证书的公共签发机构,并使用这个机构的公共秘钥确认签名是否有效,客户端还会确保证书中列出的域名就是它正在连接的域名。
(3)数据加密和传输
如果确认证书有效,那么生成对称秘钥并使用服务器的公共秘钥进行加密。然后发送给服务器,服务器使用它的私钥对它进行解密,这样两台计算机可以开始进行对称加密进行通信。
CDN的原理
CDN(Content Delivery Network,内容分发网络)指基于部署在各地的机房服务器,通过中心平台的负载均衡、内容分发、调度的能力,使用户就近获取所需内容,降低网络延迟,提升用户访问的响应速度和体验度。
CDN的关键技术
- 内容发布: 借助建立索引、缓存、流分裂、组播等技术,将内容发布到网络上距离用户最近的中心机房。
- 内容路由: 通过内容路由器中的重定向(DNS)机制,在多个中心机房的服务器上负载均衡用户的请求,使用户从最近的中心机房获取数据。
- 内容交换: 根据内容的可用性、服务器的可用性及用户的背景,在缓存服务器上利用应用层交换、流分裂、重定向等技术,智能地平衡负载流量。
- 性能管理: 通过内部和外部监控系统,获取网络部件的信息,测量内容发布的端到端性能(包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳运行状态。
CDN的主要特点
- 本地缓存(Cache)加速: 将用户经常访问的数据(尤其静态数据)缓存在本地,以提升系统的响应速度和稳定性。
- 镜像服务: 消除不同运营商之间的网络差异,实现跨运营商的网络加速,保证不同运营商网络中的用户都能得到良好的网络体验。
- 远程加速: 利用DNS负载均衡技术为用户选择服务质量最优的服务器,加快用户远程访问的速度。
- 带宽优化: 自动生成服务器的远程镜像缓存服务器,远程用户在访问时从就近的缓存服务器上读取数据,减少远程访问的带宽,分担网络流量,并降低原站点的Web服务器负载等。
- 集群抗攻击: 通过网络安全技术和CDN之间的智能冗余机制,可以有效减少网络攻击对网站的影响。
内容分发系统
- 其基本的工作单元就是各个 Cache 服务器。负责直接响应用户请求,将内容快速分发到用户;同时还负责内容更新,保证和源站内容的同步。
- 根据内容类型和服务种类的不同,分发服务系统分为多个子服务系统,如:网页加速服务、流媒体加速服务、应用加速服务等。每个子服务系统都是一个分布式的服务集群,由功能类似、地域接近的分布部署的 Cache 集群组成。
- 在承担内容同步、更新和响应用户请求之外,分发服务系统还需要向上层的管理调度系统反馈各个Cache 设备的健康状况、响应情况、内容缓存状况等,以便管理调度系统能够根据设定的策略决定由哪个 Cache 设备来响应用户的请求。
负载均衡系统
- 负载均衡系统是整个CDN系统的核心,负载均衡根据当前网络的流量分布、各中心机房服务器的负载和用户请求的特点将用户的请求负载到不同的中心机房或不同的服务器上,以保障用户内容访问的流畅性。
- 负载均衡系统包括全局负载均衡(GSLB)和本地负载均衡(SLB)。
-
GSLB 主要指跨机房的负载均衡,通过DNS解析或者应用层重定向技术将用户的请求负载到就近的中心机房上。
-
SLB 主要指机房内部的负载均衡,一般通过缓存服务器,基于LVS、Nginx、服务网关等技术实现用户访问的负载。
管理系统
- 分为运营管理和网络管理子系统。
- 网络管理系统实现对 CDN 系统的设备管理、拓扑管理、链路监控和故障管理,为管理员提供对全网资源的可视化的集中管理,通常用 web 方式实现。
- 运营管理是对 CDN 系统的业务管理,负责处理业务层面的与外界系统交互所必须的一些收集、整理、交付工作。包括用户管理、产品管理、计费管理、统计分析等。