计算机网络
OSI七层网络模型
网络的七层架构从下到上主要包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,如图6-1所示。
◎ 物理层主要定义物理设备标准,它的主要作用是传输比特流,具体做法是在发送端将1、0转化为电流强弱来进行传输,在到达目的地后再将电流强弱转化为 1、0,也就是我们常说的模数转换与数模转换,这一层的数据叫作比特。
◎ 数据链路层主要用于对数据包中的MAC 地址进行解析和封装。这一层的数据叫作帧。在这一层工作的设备是网卡、网桥、交换机。
◎ 网络层主要用于对数据包中的IP 地址进行封装和解析,这一层的数据叫作数据包。在这一层工作的设备有路由器、交换机、防火墙等。
◎ 传输层定义了传输数据的协议和端口号,主要用于数据的分段、传输和重组。在这一层工作的协议有TCP和U?P 等。TCP 是传输控制协议,传输效率低,可靠性强,用于传输对可靠性要求高、数据量大的数据,比如支付宝转账使用的就是TCP;UDP 是用户数据报协议,与TCP 的特性恰好相反,用于传输可靠性要求不高、数据量小的数
据,例如抖音等视频服务就使用了UDP。
◎ 会话层在传输层的基础上建立连接和管理会话,具体包括登录验证、断点续传、数据粘包与分包等。在设备之间需要互相识别的可以是IP,也可以是MAC 或者主机名。
◎ 表示层主要对接收的数据进行解释、加密、解密、压缩、解压缩等,即把计算机能够识别的内容转换成人能够识别的内容(图片、声音、文字等)。
◎ 应用层基于网络构建具体应用,例如FTP 文件上传下载服务、Telnet服务、HTTP服务、DNS服务、SNMP邮件服务等。
TCP/IP四层网络模型
TCP/IP不是指TCP和IP这两个协议的合称,而是指因特网的整个TCP/IP协议簇。从协议分层模型方面来讲,TCP/IP由 4个层次组成:网络接口层、网络层、传输层和应用层,如图6-2所示。
TCP/IP中网络接口层、网络层、传输层和应用层的具体工作职责如下。
◎ 网络接口层(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(Hyper Text Transfer Protocol,超文本传输协议)等。
TCP三次握手/四次挥手
TCP数据在传输之前会建立连接需要进行 3次沟通,一般被称为“三次握手”,在数据传输完成断开连接的时候要进行4次沟通,一般被称为“四次挥手”。
TCP的数据包结构
TCP的数据包结构如图6-3所示。
对TCP包的数据结构介绍如下。
◎ 源端口号(16位):标识源?机的一个应用进程(连同源主机的IP地址)。
◎ 目的端口号(16 位):标识目的?机的一个应用进程(连同目的主机的IP 地址)。IP 报头中的源主机IP 地址、目的主机的IP地址和源端口、目的端口确定了唯一一条TCP连接。
◎ 顺序号seq(32 位):标识从TCP 源端向TCP目的端发送的数据字节流,表示这个报文段中的第1 个数据字节的顺序号。如果将字节流看作在两个应用程序间的单向流动,则TCP 用顺序号对每个字节进行计数。序号是 32bit的无符号数,序号达到 2 32 -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,如表6-1所示。
◎ 窗口大小(16 位):数据字节数,表示从确认号开始,本报文的源方可以接收的字节数,即源方接收窗口的大小。窗口大小是16bit的字段,因而窗口最大为65535字节。
◎ 校验和(16 位):此校验和是对整个的TCP 报文段,包括TCP头部和TCP 数据,以 16 位字符计算所得的。这是一个强制性的字段,一定是由发送端计算和存储的,并由接收端验证。
◎ 紧急指针(16 位):只有在URG标志置为 1 时紧急指针才有效,这时告诉TCP该条数据需要紧急发送。
◎ 选 项 : 最 常 见 的 可 选 字 段 是 最 长 报 文 大 小 , 又 叫 作MSS(Maximum Segment Size)。每个连接方通常都在通信的第1 个报文段(为建立连接而设置SYN 标志的那个段)中指明这个选项,指明该TCP连接能接收的最大长度的报文段。选项长度不一定是32字节的整数倍,所以要加填充位,使得报头长度成为整字节数。
◎ 数据:TCP 报文段中的数据部分是可选的。在一个连接建立和一个连接终止时,双方交换的报文段仅有TCP 首部。如果一方没有数据要发送,则也使用没有任何数据的首部确认收到的数据。在处理超时的许多情况下也会发送不带任何数据的报文段。
TCP中的三次握手
TCP是因特网的传输层协议,使用三次握手协议建立连接。在客户端主动发出SYN连接请求后,等待对方回答SYN+ACK,并最终对对方的SYN执行ACK确认。这种建立连接的方式可以防止产生错误的连接,TCP
使用的流量控制协议是可变大小的滑动窗口协议。
TCP三次握手的过程如下。
(1)客户端发送SYN(seq=x)报文给服务器端,进入SYN_SEND状态。
(2)服务器端收到SYN报文,回应一个SYN(seq =y)和ACK(ack=x+1)报文,进入SYN_RECV状态。
(3)客户端收到服务器端的SYN报文,回应一个ACK(ack=y+1)报文,进入Established状态。在三次握手完成后,TCP客户端和服务器端成功建立连接,可以开始传输数据了,具体流程如图6-4所示。
3.TCP中的四次挥手
TCP在建立连接时要进行三次握手,在断开连接时要进行四次挥手,这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上同时传递),所以在进行关闭时对每个方向都要单独进行关闭,这种单方向的关闭叫作半关闭。在一方完成它的数据发送任务时,就发送一个FIN来向另一方通告将要终止这个方向的连接。
TCP断开连接既可以是由客户端发起的,也可以是由服务器端发起的;如果由客户端发起断开连接操作,则称客户端主动断开连接;如果由服务器端发起断开连接操作,则称服务端主动断开连接。下面以客户端发起关闭连接请求为例,说明TCP四次挥手断开连接的过程,如图6-5所示。
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 ) 客 户 端 在 接 收 到 这 个 最 终 ?IN 消 息 后 , 发 送 一 个ACK=1,seq=u+1,ack=w+1的消息给服务器端,表示接收到服务器端的断开连接请求并准备断开服务器端到客户端的链路。此时客户端处于TIM-WAIT状态,TCP连接还没有释放,然后经过等待计时器(2MSL)设置的时间后,客户端将进入CLOSE状态。
HTTP的原理
HTTP是一个无状态的协议,无状态指在客户端(Web浏览器)和服务器之间不需要建立持久的连接,在一个客户端向服务器端发出请求且服务器收到该请求并返回响应(response)后,本次通信结束,HTTP连接将被关闭,服务器不保留连接的相关信息。
HTTP遵循请求(Request)/应答(Response)模型,客户端向服务器发送请求,服务器处理请求并返回适当的应答。
1.HTTP的传输流程
HTTP的传输流程包括地址解析、封装HTTP数据包、封装TCP包、建立TCP连接、客户端发送请求、服务端响应、服务端关闭TCP连接,具体流程如下。
(1)地址解析:地址解析通过域名系统DNS解析服务器域名从而获 得 主 机 的 IP 地 址 。 例 如 , 用 客 户 端 的 浏 览 器 请 求http://localhost.com:8080/index.html,则可从中分解出协议名、主机名、端口、对象路径等部分结果如下。
◎ 协议名:HTTP。
◎ 主机名:localhost.com。
◎ 端口:8080。
◎ 对象路径:/index.html。
(2)封装HTTP数据包:解析协议名、主机名、端口、对象路径等并结合本机自己的信息封装成一个HTTP请求数据包。
(3)封装TCP包:将HTTP请求数据包进一步封装成TCP数据包。
(4)建立TCP连接:基于TCP的三次握手机制建立TCP连接。
(5)客户端发送请求:在建立连接后,客户端发送一个请求给服务器。
(6)服务器响应:服务器在接收到请求后,结合业务逻辑进行数据处理,然后向客户端返回相应的响应信息。在响应信息中包含状态行、协议版本号、成功或错误的代码、消息体等内容。
(7)服务器关闭TCP连接:服务器在向浏览器发送请求响应数据后关闭TCP连接。但如果浏览器或者服务器在消息头中加入了Connection:keep-alive,则TCP连接在请求响应数据发送后仍然保持连接状态,在下一次请求中浏览器可以继续使用相同的连接发送请求。采用keep-alive方式不但减少了请求响应的时间,还节约了网络带宽和系统资源。
2.HTTP中的常见状态码
在HTTP请求中,无论是请求成功还是失败都会有对应的状态码返回。状态码是我们定位错误的主要依据,一般“20x”格式的状态码表示成功,“30x”格式的状态码表示网络重定向,“40x”格式的状态码表示客户端请求错误,“50x”格式的状态码表示服务器错误。常用的状态码及其含义如表6-2所示。
3.HTTPS
HTTPS是以安全为目标的HTTP通道,它在HTTP中加入SSL层以提高数据传输的安全性。HTTP被用于在Web浏览器和网站服务器之间传递信息,但以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了We b浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP不适合传输一些敏感信息,比如身份证号码、密码等。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并对浏览器和服务器之间的通信进行数据加密,以保障数据传输的安全性,其端口一般是443。
HTTP的加密流程如下,如图6-6所示。
(1)发起请求:客户端在通过TCP和服务器建立连接之后(443端口),发出一个请求证书的消息给服务器,在该请求消息里包含自己可实现的算法列表和其他需要的消息。
(2)证书返回:服务器端在收到消息后回应客户端并返回证书,在证书中包含服务器信息、域名、申请证书的公司、公钥、数据加密算法等。
(3)证书验证:客户端在收到证书后,判断证书签发机构是否正确,并使用该签发机构的公钥确认签名是否有效,客户端还会确保在证书中列出的域名就是它正在连接的域名。如果客户端确认证书有效,则生成对称密钥,并使用公钥将对称密钥加密。
(4)密钥交换:客户端将加密后的对称密钥发送给服务器,服务器在接收到对称密钥后使用私钥解密。
(5)数据传输:经过上述步骤,客户端和服务器就完成了密钥对的交换,在之后的数据传输过程中,客户端和服务端就可以基于对称加密(加密和解密使用相同密钥的加密算法)对数据加密后在网络上传输,保证了网络数据传输的安全性。
CDN的原理
CDN(Content Delivery Network,内容分发网络)指基于部署在各地的机房服务器,通过中心平台的负载均衡、内容分发、调度的能力,使用户就近获取所需内容,降低网络延迟,提升用户访问的响应速度和体验度。
1.CDN的关键技术
CDN的关键技术包括内容发布、内容路由、内容交换和性能管理,具体如下。
◎ 内容发布:借助建立索引、缓存、流分裂、组播等技术,将内容发布到网络上距离用户最近的中心机房。
◎ 内容路由:通过内容路由器中的重定向(DNS)机制,在多个中心机房的服务器上负载均衡用户的请求,使用户从最近的中心机房获取数据。
◎ 内容交换:根据内容的可用性、服务器的可用性及用户的背景,在缓存服务器上利用应用层交换、流分裂、重定向等技术,智能地平衡负载流量。
◎ 性能管理:通过内部和外部监控系统,获取网络部件的信息,测量内容发布的端到端性能(包丢失、延时、平均带宽、启动时间、帧速率等),保证网络处于最佳运行状态。
2.CDN的主要特点
CDN的主要特点如下。
◎ 本地缓存(Cache)加速:将用户经常访问的数据(尤其静态数据)缓存在本地,以提升系统的响应速度和稳定性。
◎ 镜像服务:消除不同运营商之间的网络差异,实现跨运营商的网络加速,保证不同运营商网络中的用户都能得到良好的网络体验。
◎ 远程加速:利用DNS 负载均衡技术为用户选择服务质量最优的服务器,加快用户远程访问的速度。
◎ 带宽优化:自动生成服务器的远程镜像缓存服务器,远程用户在访问时从就近的缓存服务器上读取数据,减少远程访问的带宽,分担网络流量,并降低原站点的We b服务器负载等。
◎ 集群抗攻击:通过网络安全技术和CDN 之间的智能冗余机制,可以有效减少网络攻击对网站的影响。
3.内容分发系统
将用户请求的数据分发到就近的各个中心机房,以保障为用户提供快速、高效的内容服务。缓存的内容包括静态图片、视频、文本、用户最近访问的JSON数据等。缓存的技术包括内存环境、分布式缓存、本地文件缓存等。缓存的策略主要考虑缓存更新、缓存淘汰机制。
4.负载均衡系统
负载均衡系统是整个CDN系统的核心,负载均衡根据当前网络的流量分布、各中心机房服务器的负载和用户请求的特点将用户的请求负载到不同的中心机房或不同的服务器上,以保障用户内容访问的流畅性。负载均衡系统包括全局负载均衡(GSLB)和本地负载均衡(SLB)。
◎ 全局负载均衡主要指跨机房的负载均衡,通过DNS 解析或者应用层重定向技术将用户的请求负载到就近的中心机房上。
◎ 本地负载均衡?要指机房内部的负载均衡,一般通过缓存服务器,基于LVS、Nginx、服务网关等技术实现用户访问的负载。
5.管理系统
管理系统分为运营管理和网络管理子系统。网络管理系统?要对整个CDN网络资源的运行状态进行实时监控和管理。运营管理指对CDN日常运维业务的管理,包括用户管理、资源管理、流量计费和流量限流等。