网络协议分析
网络协议分析
- 网络协议分析概述
- 用IP实现异构网络互联
- 网络协议的分层
- TCP/IP的分层模型
- 协议分析
- 协议分析应用
- 协议分析任务
- 常见网络协议
- PPP协议
- 报文选项
- IPCP
- 认证协议PAP
- 安全缺陷
- 认证协议CHAP
- PPPoE
- 协议流程
- 地址解析协议ARP
- ARP的思想和步骤
- ARP报文格式及封装
- 移动IP
- 移动IP的工作机制:代理发现
- 移动代理通告
- 移动代理恳求
- 移动主机判断自己的位置
- 移动IP的工作机制:注册
- 移动IP的工作机制:数据传送
- 移动IP的三角路由问题
- 隧道技术
- IP-in-IP封装
- 最小封装
- 通用路由封装
- HTTP协议
- 持久连接和长度
- HTTP协商及条件请求
- 代理服务器和高速缓存
- HTTP报文格式
- HTTP面临的安全风险
- 电子邮件系统
- 三大部件
- 系统结构和基本功能
- 邮箱地址及电子邮件格式
- 简单邮件传输协议SMTP
- POP协议
- IMAP
- POP VS IMAP
- 电子邮件系统面临的安全威胁
- 域名系统DNS
- 域名解析原理
- 域名解析原理
- 高速缓存
- 减少DNS报文长度的措施
- DNS面临的安全威胁
网络协议分析概述
- Internet:Network of Networks(网络之网络)
- 异构网络互联技术:Vinton Cerf,每个网络内部使用各自的通信协议,每个网络与其它网络通信时使用TCP/IP协议族。
用IP实现异构网络互联
- 实际操作层面:用路由器互联
- Internet的构成:
- TCP/IP协议族的引入:简化问题,分而治之。随后在此基础上构建各类应用。
网络协议的分层
- 分层:将庞大而复杂的问题,转化为若干较小的局部问题。
- 最初的 ARPANET 设计时提出了分层的设计方法。
- 1974 年,IBM 按照分层的方法制定并提出系统网络体系结构 SNA (System NetworkArchitecture)。
-
通用的协议分层思想:理论抽象。
-
TCP/IP的分层模型:理论实现。
-
通用的协议分层思想:
- 第 N N N层实体在实现自身定义的功能时,只使用 N − 1 N-1 N−1层提供的服务
- N N N层向 N + 1 N+1 N+1层提供服务,此服务不仅包括 N N N层本身所具备的功能,还包括由下层服务提供的功能总和
- 最底层只提供服务,是提供服务的基础;最高层只是用户,是使用服务的最高层;中间各层既是下一层的用户,又是上一层服务的提供者
- 仅在相邻层间有接口,且下层服务的实现细节对上层完全透明
- 网络协议层间关系:
TCP/IP的分层模型
- 建立在硬件层上的4个软件层:
- 协议分层的原则:第 n n n层所收到的数据就是源主机第 n n n层所发出的数据。
- 操作系统边界和协议地址边界:
- 点到点和端到端:IP层为间隔:
- 协议依赖关系:上层依赖下层
- 协议依赖关系:沙漏模型
- 多路复用和多路分解:多路复用
- 多路复用和多路分解:多路分解
协议分析
- 协议分析也叫网络分析,通过程序分析网络数据包的协议头和尾,从而了解信息和相关的数据包在产生和传输过程中的行为,包含该程序的软件和设备就是协议分析器。 本质上协议分析器是在窃听网络通信。
- 协议分析器的本质是数据包嗅探,观察正在运行的协议实体间交换报文的基本工具被称为数据包嗅探器(packet sniffer),又称分组捕获器。
- 数据包嗅探器捕获计算机发送和接收的报文。
- 网络嗅探工具通常用来进行协议分析和网络监控,以便于进行故障诊断、性能分析和安全分析等,黑客则用之进行安全敏感信息的监听和截取。
- 分组捕获器需要把网卡设置为“混杂模式” 这样当数据包从嗅探器所连接的网卡上进入系统时,嗅探程序可以接收到整个以太网内的网络数据信息,包括所有的广播、组播和单播数据包,甚至错误的数据包,从而实现数据包捕获。
- 分组分析器的作用是分析协议报文并把报文中所有字段的内容直观地显示出来。其主要构成通常包括一个包过滤器、数据包缓冲区和解码部分。
协议分析应用
- 协议分析器通常用于诊断网络出现故障。
- 协议分析器也可以用来测试网络。通常测试可以采用两种方式来进行:一种是主动向网络中发送数据包来测试,另一种是通过侦听不同寻常的通信这种被动方式来测试。
- 协议分析器还可以用于搜集网络性能的趋势数据
协议分析任务
- 网络协议三要素:语法、语意、同步。
- 语法:常见网络协议的数据包格式
- 语义:数据包首部和尾部各个字段的含义和作用
- 同步:各个协议的工作过程
常见网络协议
PPP协议
-
PPP基础:网络接口层协议,数据链路层协议;点到点:数据帧的接收者就是固定对等端;
-
经典协议的新应用:
- PPPoA(PPP over ATM):ATM上的PPP;
- PPPoE(PPP over Ethernet):以太网上的PPP
-
PPP应用场景
-
PPP规定的内容:
- 帧格式及成帧方法
- 链路控制协议LCP:用于建立、配置和测试PPP链路
- 网络控制协议NCP:用于建立和配置网络层协议
-
使用的认证协议:
- 口令认证协议PAP:Password Authentication Proto
- 基于挑战的握手认证协议CHAP:Challenge Handshake Authentication Protocol
- 协议流程
- 链路状态转换
- PPP帧格式
- LCP
- 链路配置
报文选项
- 最大接收单元:MRU,Maximum Receive Unit,用以向对方通告可以接收的最大报文长度;
- 认证协议:用以向对方通告使用的认证协议,PAP(C023),CHAP(C223);
- 质量协议:用以向对方通告使用的链路质量监控协议,LQR(C025);
- 幻数:用以防止环路;
- 协议域压缩:PFC,Protocol Field Compression,用以通知对方可以接收“协议”字段经过压缩的PPP帧;
- 地址及控制域压缩: ACFC, Address and Control FieldCompression ,用以通知对方可以接收“地址”和“控制”字段经过压缩的PPP帧
- 链路终止
- 链路维护:用于错误通告及链路状态检测
IPCP
- 基本思想
- 与LCP的配置协商过程类似;
- 定义的报文类型包括:Configure-Request、Configure-Ack、Configure-Nak、Configure-Reject、Terminate-Request、Terminate-Ack和Code-Reject。
- 定义的配置选项:多个IP地址、IP压缩协议、IP地址。
- IP压缩协议:用以协商使用的压缩协议,IPCP仅规定了“Van Jacobson(002D)”。
- IP地址:发起方在Configure-Request中包含该选项,请求回应方分配一个IP地址;回应方在Configure-Nak包含该选项,返回合法IP。
认证协议PAP
- 报文格式
安全缺陷
- 身份和口令信息明文传输,无法防止窃听、重放和穷举攻击
- PPP仅在建立链路的阶段使用,在数据传输过程中不能使用,这意味着通信过程中不能再验证对等端身份
认证协议CHAP
- 报文格式
PPPoE
CSMA/CD
- 多点接入:广播网络;
- 载波监听:每台主机发送数据前都要监听信道以确定信道是否空闲;
- 碰撞检测:主机“边发送边监听”,当发现发生了冲突时,立即停止数据发送
- 以太网:高带宽;PPP:提供用户认证、控制、服务、记账等功能。
- PPPoE:结合二者的优点。
协议流程
- 发现阶段(获取AC的MAC地址,从多个AC中选择一个,生成会话ID)
- 发起(PADI, PPPoE Active Discovery Initiation ):客户端通过广播请求以获取可用的AC;
- 提供(PPPoE Active Discovery Offer,PADO):在收到请求后,若AC可以提供服务,则返回该报文;
- 请求(PPPoE Active Discovery Reques t,PADR):如果客户端收到来自多个AC的应答,则必须从中选择一个并向该AC发出请求;
- 确认(PPPoE Active Discovery Session-confirmation,PADS):收到请求的AC向客户端返回确认,从而建立PPP连接及会话。
- 会话阶段(为虚拟的PPP链路分配资源)
- 利用LCP配置链路;
- 使用PAP或者CHAP验证身份;
- 使用IPCP等网络层控制协议配置相关参数
- 断开链路
- 可以用PPP实现
- 也可以进入PPPoE定义的终止步骤PADT
- PPPoE报文格式与封装:封装于以太网帧中(发现阶段帧类型字段为0x8863,否则为0x8864)
- 会话阶段报文格式与封装
地址解析协议ARP
- 地址解析协议ARP:解决IP地址到物理地址的映射问题
- 两种地址解析方式
- 空间较小且容易配置的地址
- 空间巨大且固化的地址
- 两种地址解析方式
- 直接映射方法:比如对于物理地址长度为1字节且不固定的情况,可以用IP地址的最后一个字节作为物理地址
- 动态解析方法:物理地址长度大于IP地址长度且固化,此时使用ARP(Address Resolution Protocol,地址解析协议)
ARP的思想和步骤
- 思想:广播询问,单播回应:“谁的IP地址是IPB,请把你的物理地址MACB告诉我!”;
- 发送方主机发送一个ARP请求报文,该报文以广播方式发送,其中包含了接收方的IP地址;
- 网络上所有的主机都会收到这个请求,它们把请求中包含的接收方IP地址与自身的IP地址相比较
- 如果相等,则向发送方回应,回应中包含了自己的物理地址;
- 否则不作回应。
- 跨网转发时ARP的使用方法:ARP请求使用物理广播方式投递,而物理广播帧不能跨越路由器转发
- A在把数据报投递给R之前,首先利用ARP获取I1的物理地址MAC1。
- A把数据报投递给R的I1接口。此时数据报的目的IP地址为IPB,但封装该数据报的物理帧将目的物理地址设置为MAC1。
- R把数据报从I2接口转发出去,转发前利用ARP获取主机B的物理地址。
- R之后把数据报投递给B。此时数据报的源IP地址是IPA,但相应物理帧的源物理地址为MAC2
- 跨网转发时ARP的使用方法:
- 代理ARP:R代理主机D向A发送ARP应答
- 作用:无缝添加路由器,使得子网的变化对主机透明
ARP报文格式及封装
- 物理网络类型/物理地址长度:物理网络的类型及相应的地址长度
- 协议类型/协议地址长度:上层协议的类型及相应地址的长度
- 报文字段设置:
- 请求报文:发送方在前两个字段填写自己的IP和MAC地址,体现了捎带的思想;发送方也会在目标IP地址字段写明所请求目标的IP地址。
- 应答报文:目标硬件地址字段填写应答方的物理地址;交换发送方地址区和目标地址区的内容,并返回给发送方
- 封装ARP报文的帧:类型字段设置为0806h
移动IP
- 主机在变换网络后,仍能以原来的IP地址与Internet上的其它主机进行通信。具有以下特点:
- 透明性:对于应用程序、传输层协议以及变动中未涉及的路由器,移动性是透明的,即它们不知道主机已经变换网络。
- 互操作性:使用移动IP的主机简称为移动主机(MH,Mobile Host),它既可以与固定主机进行互操作,也可以与其它MH进行互操作,且不需要进行特殊编址,分配给MH的地址与分配给固定主机的地址没有不同。
- 安全性:移动IP提供认证机制,确保报文的完整性,防止其它主机假冒MH。
- 宏移动性:移动IP不会试图处理快速的网络变换,而是重点关注持续时间较长的移动性问题。
- 移动主机拥有两个IP地址:家乡地址和转交地址。
- 家乡地址:家乡网络给MH分配的固定地址,在移动过程中保持不变,被主机的应用程序和传输层使用
- 转交地址:外地网络给MH分配的临时地址,随MH的移动而改变
- 合作定位转交地址(co-located care-of address):通过DHCP或手工配置等方式分配给MH
- 外地代理转交地址(foreign agent care-of address):外地代理将自己的IP地址提供给MH使用
- MH把转交地址发送给家乡代理。家乡代理截取所有目的地为MH家乡地址的数据报,将转交地址作为新的目的地,以隧道方式传送给MH。当MH回到原始位置,即家乡网络时,使用家乡地址。
移动IP的工作机制:代理发现
移动代理通告
- 移动代理通告:对ICMP的路由器通告报文进行扩展
-
类型:16;长度:报文长度,字节为单位;
-
生命期:代理接受注册请求所允许的最大时间间隔(以秒为单位),全1为无限长;
-
转交地址:提供了MH可使用的转交地址列表
-
前缀长度扩展:位于移动代理通告扩展之后,对应路由器通告报文中的“路由器地址/优先级”对,了便于移动主机判断自己所处的网络
-
一字节填充扩展:保持报文按字节数偶数对齐
-
完整的ICMP代理通告报文:代码字段:0或16。0:普通路由器;16:行使移动代理功能;地址数字段:可以设置为0。
-
报文封装:封装于IP数据报随后封装于物理帧;帧目的地址为代理的源MAC地址;IP数据报首部TTL为1;目的地址可设置为224.0.0.1或255.255.255.255。
移动代理恳求
与路由器肯定报文相同,要求IP数据报首部TTL为1
移动主机判断自己的位置
- 根据路由器通告,MH可以判断自己是否在外地网络(比较网络前缀)
- 根据路由器通告,MH还可判断自己是否更换了网络
移动IP的工作机制:注册
- 作用:
- 通过注册,得到外地代理的路由服务;
- 通知家乡代理它当前的转交地址;
- 可以使一个即将过期的注册重新生效;
- MH回到家乡网络后,通过注册实现注销。
- 家乡代理根据接收到的注册报文,可以创建或更改MH的移动绑定信息。每个绑定信息包括MH的家乡地址、当前的转交地址等内容。
- 移动主机登记过程
- 注册报文:UDP报文,目的端口号434
- 生命期:以秒为单位的注册时间,0表示立即取消注册,全1表示无穷大。
- 家乡地址、家乡代理、转交地址:核心
- 注册应答报文:代理返回应答
移动IP的工作机制:数据传送
- 单播数据传送
- 向MH发送数据:向MH发送的数据报先被家乡代理截获,家乡代理查找注册信息,取出MH当前的转交地址,然后使用隧道技术将数据报封装,发往MH的转交地址;如果是合作定位转交地址,则由MH解封;如果是外地代理转交地址,则由外地代理先解封,再交给MH。
- MH发送数据:在外地网络的MH通常选择外地代理作为默认路由器。MH将需要发送的数据报直接交给外地代理,由外地代理负责将数据报路由到相应目的地。此时无需使用隧道技术。
- 广播数据传送
- 接收广播数据:MH如果希望接收家乡网络的广播报文,在登记时必须向家乡代理声明。家乡代理收到广播报文后,要根据MH使用的转交地址类型,进行相应转发。对于合作定位转交地址,家乡代理使用隧道直接将广播报文发送给MH;对于外地代理转交地址,家乡代理通过隧道将广播报文发给外地代理,后者收到后,先进行解封装,再发送给MH。
- 发送广播数据:MH发送广播报文时,如果目的地是外地网络,则可以直接广播;如果目的地是家乡网络或某个特定网络,则使用隧道发送给家乡代理。后者收到后,先进行解封装,再转发。
- 组播数据传送
- 接收组播数据:MH要接收组播数据,须先加入组播组,加入方式有两种。一种是向外地网络中的组播路由器申请加入,另一种是通过隧道向家乡代理申请加入。这要求家乡代理是一个组播路由器。对于第一种加入方式,组播路由器收到组播报文后,将转发给MH所在的外地网络;对于第二种加入方式,家乡代理收到组播报文后,使用隧道转发给MH。
- 发送组播数据:MH发送组播报文也有两种方式,一种是直接在外地网络上发送,二是通过隧道发送给家乡代理。由于组播路由器转发组播报文时要根据其源地址(采取反向路径转反策略)进行,因此,如果MH直接在外地网络上组播,则使用的地址必须是合作定位转交地址。当通过隧道转发组播报文时,也必须将内外两个IP首部的源地址设为MH的家乡地址。
移动IP的三角路由问题
- 解决:MH向通信节点发送地址绑定信息(<家乡IP地址,转交地址>对)。通信节点通过查找缓存中MH的地址绑定信息,获得转交地址,然后直接通过隧道将数据报发送到转交地址。
- 问题:当MH较多时,会有较大负担;绑定地址无认证的话容易受到DoS。
隧道技术
问题:传送数据报时经过不能直接传送它的网络
解决:使用隧道技术
隧道入口:为数据报添加一个能够在隧道中路由的首部,称为封装
隧道出口:要去掉所添加的首部,称为解封。
移动IP使用三种隧道技术:
- IP-in-IP封装(IP-in-IP Encapsulation)
- 最小封装(Minimal Encapsulation)
- 通用路由封装(GRE,Generic Routing Encapsulation)。
IP-in-IP封装
- 新IP首部:
- 协议类型字段设置为4;版本字段和服务类型字段拷贝原首部中的值;
- 源地址和目的地址分别设置为隧道的入口和出口点;
- 标识字段设置为唯一标识新数据报的值;TTL要设置足够大,使其能穿越隧道;
- 标志字段和片偏移字段要根据是否对原始数据报进行了分片而设置;
- 选项字段根据需要设置;首部长度、总长度以及与校验和要重新计算。
- 在入口和出口处,均要将原IP首部的TTL减1。
- 要防止递归封装
最小封装
- 新IP首部:
- 协议类型字段设置为55;版本字段和服务类型字段拷贝原首部中的值;
- 源地址和目的地址分别设置为隧道的入口和出口点;
- 如果隧道入口将原来的数据报从某个端口路由到了隧道端口,那么生存时间字段要相应减小;如果隧道入口就是原来数据报的源IP地址,那么生存时间不减小;
- 首部长度字段、总长度字段和校验和字段要重新计算。
最小转发首部:
- 协议类型:原数据报的协议类型。原目的地址:原数据报的目的IP地址。S比特和原源IP地址字段:如果隧道入口与原数据的源IP地址相同,则S字段置0,无原源地址字段;否则,S置1,原源地址字段置为原数据的源IP地址。
- 校验和:设置最小转发首部的校验和。
通用路由封装
- “递归”(Recur):提供了允许的封装次数;不为0才能继续封装,并将值减1;
- 版本和标记字段:0。协议字段:描述了被封装的数据对应的协议类型。
- CRKSs:5比特,前4比特描述了可选部分中校验和、路由、密钥、序号字段的有无。
- 最后1比特表示严格源路由。
可选部分:
- 校验和:2字节,针对GRE首部和被封装的数据计算;
- 偏移:2字节,路由字段中从第一个字节开始到包含严格源路由信息之间的字节数;
- 密钥:4字节,封装者插入,用于认证提供了允许的封装次数;不为0才能继续封装,并将值减1;
- 序号:4字节,每个被封装的报文都有1个编号;
- CRKSs:5比特,前4比特描述了可选部分中校验和、路由、密钥、序号字段的有无。
- 最后1比特表示严格源路由。
- 路由字段:变长,包含源路由信息
- 路由字段:变长,包含源路由信息
- 地址族:指明了地址格式,比如IPv4或IPv6地址;
- SRE(Source Routing Entry)偏移:从“路由信息”的第一个字节开始到源路由信息之间的字节数;
- SRE长度:源路由信息的长度;
HTTP协议
- 客户端/服务器模型。页面存储于服务器,客户端通过HTTP向服务器请求页面。
- HTTP:HyperText Transfer Protocol,超文本传输协议,基于TCP,80端口。
- 通信过程:客户端请求,服务器应答。
- HTTP特点:无状态、双向传输、协商能力、高速缓存、支持中介
- HTTP请求方式
持久连接和长度
- 非持久连接:客户端与服务器建立连接,获取页面,之后关闭连接。建立TCP连接->请求->响应->关闭连接
- 持久连接:一旦客户端与服务器建立了TCP连接,就可以在这个请求上发送多次请求并接收响应,等所有请求都发送完成后再关闭连接。建立TCP连接->请求->响应->请求->响应…->关闭连接
- 流水线技术:在响应到来之前就可以发送下一个请求
HTTP协商及条件请求
- 客户端与服务器协商的内容:访问是否需要认证、接受的文件类型、语言类型以及一系列控制信息。
- 服务器驱动协商方式:浏览器首先发出协商请求,指定一系列选项值及URL;服务器收到请求后,从中选取满足浏览器需求的一项。如果有多项符合条件,则服务器选取优先级最高的一项。
- 浏览器驱动协商方式:浏览器向服务器发送请求,询问可用的内容。服务器返回可能的内容列表。浏览器之后从中选取一项,发送第二个请求获得该数据项。
- 服务器驱动示例:
Accept: text/html, text/plain; q=0.5, text/x-dvi; q=0.8
- 条件请求:浏览器在发送请求时,可以指定响应满足的条件。比如:
If-Modified-Since:01 Jan. 2017 00:00:00 GMT
代理服务器和高速缓存
- 代理服务器:浏览器和服务器的中介,提高通信效率,减轻服务器负担。
- 浏览器:使用代理服务器可以绕过某些限制。
- 高速缓存:代理服务器设置,缓存页面,不必每次都到服务器取
- 代理服务器标准:明确规定了代理服务器如何处理请求、浏览器如何与代理服务器协商等内容
- 客户端高速缓存:提高通信效率。
HTTP报文格式
- HTTP报文就是字符串,包括开始行、首部行、实体主体
开始行:(请求报文的是请求行,响应报文的是状态行)
- 请求行:请求方式:GET、POST等;URL:指明所要获取页面对应的URL;HTTP版本:比如HTTP1.1。3项内容时间用空格间隔。
- 状态行:HTTP版本;状态码:3位数字字符,表示操作的状态;解释字符串:对状态码含义的进一步解释
- 首部行:数据长度、协商选项、请求条件、高速缓存控制信息等。每个首部格式:“首部名称:首部字符串” 。每个首部之间回车换行分隔
- 实体主体:数据部分。首部和实体之间要间隔一个空行
HTTP面临的安全风险
- HTTP协议明文传输数据:攻击者嗅探获取敏感隐私数据
- HTTP协议缺乏消息完整性检测:易遭受中间人攻击
- 增强HTTP安全性
- 使用HTTPS: HTTP over SSL(Secure Socket Layer,安全套接层),基于SSL安全协议对HTTP进行封装。URL形式为:“https://”;
- HTTP协议首部解析二义性:不同HTTP实现在解析和处理Host首部时存在不一致。带有多个Host首部的HTTP请求,下游与上游设备可能理解成不同的Host地址。
- 攻击原理:利用不一致性,通过精心构造报文,实现污染ISP缓存、CDN缓存、绕过WAF( Web Application Firewall,Web应用防火墙)。
电子邮件系统
三大部件
- 用户代理:电邮系统与用户直接交互的图形界面。用户可以通过这个界面编写邮件、读取邮件以及管理邮箱。
- 邮件传送代理:相当于邮政系统中的邮局,基本功能是发送和接收邮件。此外,还会设置缓冲区(相当于邮筒)来存放待发送的邮件。
- 邮箱:相当于邮政系统中的信箱。用户使用电邮系统时必须申请邮箱,这样,发给用户的邮件首先保存在用户邮箱里,供用户随时读取
系统结构和基本功能
5项基本功能:
- 撰写:让用户能够方便地撰写邮件
- 传输:将邮件发送到接收方用户邮箱中
- 报告:向发信者反馈发信成功与否
- 显示:让接收方能够方便地读取邮件
- 处理:让接收方能够方便地处理邮件
- 群发:一次性向一组接收者发送邮件
邮箱地址及电子邮件格式
- 邮箱地址:邮箱名@邮箱所在主机的域名,每个域名内邮箱唯一
- 电子邮件格式:
- 信封:信封供邮件传送代理使用。
- 首部:供用户代理使用,可以包含多个字段,每个首部字段的形式:字段名:字段值。以“X-”开头的字段是用户定义的字段,其余则是标准字段。
- 正文:邮件的内容部分,是NVT(Network Virtual Terminal,网络虚拟终端)ASCII文本行
- 发送邮件:先发首部,再跟一个空行,之后是正文
- 解决的问题:如何让邮件可以发送各种格式的附件
- 解决方案:MIME:Multipurpose Internet Mail Extensions,多用途互联网邮件扩充。
- 定义的3项内容:
- 加入5个新的邮件首部字段,提供了邮件主体相关信息;
- 定义了传送编码,可将任意格式的数据转化为SACII码。
- 定义了许多邮件内容格式,对多媒体电子邮件的表示方法进行了标准化。
简单邮件传输协议SMTP
- 发送邮件的协议。没有规定邮件的格式和存储方式等内容,仅仅给出了相互通信的两个SMTP进程之间如何交换信息。
- 使用客户端/服务器模型。发送邮件的进程是客户端,接收邮件的进程是服务器。
- 基于TCP,使用知名端口号25。
- 定义了14条命令21种应答。每条命令都是一个4字符的串,后面带上相应的参数;每种应答都由一个3字符数字开始,后面跟上简单的文字说明
POP协议
- POP:Post Office Protocol,用于接收邮件,目前广泛使用的是POP3。使用客户端/服务器模型,基于TCP,使用知名端口号110。
- POP服务器:仅仅在用户身份得到认证后才允许对邮箱的操作,认证使用用户名和口令。定义的内容:用户登录、退出、读取信件和删除信件的命令。
- 特点:用户从邮箱中读取邮件时,会把邮件下载到本地保存,之后服务器会把邮件删除掉
IMAP
- IMAP: Internet Mail Access Protocol,用于接收邮件。使用客户端/服务器模型,基于TCP,使用知名端口号143
- 与POP相比:对远程邮箱的管理和操作功能更强大,且用IMAP读邮件时,本地并不保存该邮件,在用户明确地发出删除命令之前,服务器都不会删除这个邮件。
POP VS IMAP
- POP是邮件传输模型,IMAP是联机访问模型
- POP只是简单第传输文件,IMAP是客户端登录服务器后进行远程访问
- IMAP用户可先查看首部,可根据需要创建文件夹并移动邮件,可选择收取邮件的一部分
- 用户使用IMAP时,相当于在邮件传送代理的机器上为自己开了个存储空间,邮箱就相当于自己的“网络硬盘”
- 用户代理软件: Outlook,Foxmail 等,在后台实现了SMTP、POP、IMAP等协议。
电子邮件系统面临的安全威胁
- SMTP面临的安全威胁:
- RCPT命令:用来定义邮件的接收地址,当邮件接收者不是本地用户时,SMTP服务器返回特定的信息码,黑客可以据此来发现服务器上的真实用户账号。
- VRFY命令:用来判断一个SMTP服务器是否能将邮件发送到特定的接收者,如果是本地用户,则返回用户的完整地址,否则返回给客户否定的答复或表明他愿意转发任何发送到远程用户的邮件。该命令可以使黑客检测到服务器上的用户的邮件地址或被垃圾邮件发送者利用来转发垃圾邮件。
- EXPN命令:用来向SMTP服务器查询邮件列表和别名。黑客可以用它来获取敏感信息。
- TRUN命令:允许两台计算机在一个TCP连接中进行双向邮件传输。通过允许服务器转换同客户机的角色,将目的地是客户机域名的邮件发给客户机,服务器只根据客户机自称的名字进行应答。若黑客冒用别人的域名,那么邮件服务器会将所有应发往合法用户的邮件发给黑客
- 数据明文传输问题:口令易被获取,数据无完整性机密性保护机制.
- 解决方法:对SMTP进行认证扩展;用SSL保护相关协议,比如基于SSL的SMTPS( SMTP over SSL)等;用PGP进行安全处理,引入数字签名和加密算法处理邮件;
- 系统设置和应用时面临的安全问题
- 邮件服务器被攻击:邮件是明文方式保存在邮件服务器的用户邮箱中,所以只要能够进入用户的邮箱,就可以看到发给用户的原始文件,甚至更改邮件的内容,邮件的接收者无法知道所接收的邮件是否真实
- 电子邮件病毒:电子邮件传播病毒通常是把自己作为附件发送给被攻击者。如果接收到该邮件的用户不小心打开了附件,病毒即会感染机器,并且自动打开地址薄,使电子邮件病毒能够大面积传播。
- 垃圾邮件:向新闻组或他人电子信箱发送的未经用户准许、不受用户欢迎的,难以退掉的电子邮件或电子邮件列表,叫做垃圾邮件(Spam)。目前还没有能够百分之百精确的垃圾邮件检测技术。
域名系统DNS
- Internet通信节点的标识——IP地址不便于记忆。DNS给Internet上的主机起个便于记忆的名字,同时解决名字到IP地址的映射问。
- DNS定义的两个要素
- 抽象要素,指明名字语法和名字的授权管理规则
- 具体要素,指明将名字映射到IP地址的具体方法
- 顶级域名:划分以用途或国家(地区)为准,引入域名树描述层次结构。
- 域:每个独立管理的子树。域名系统:这个层次型的命名管理系统
- 域名树:根节点未命名,第二层是顶级域(TLDs)
- 树型结构优点:便于管理维护,保证了名字的唯一性;
- 域名命名:树中每个节点都有唯一的一个名字,节点的名字是由该节点回溯到根节点的一条路径,比如搜狐Web服务器域名“www.sohu.com”。
- 标号:每个域名都是由‘.’分隔的字符串组成的,其中每个字符串称为一个“标号”(label)。每个域名任意后缀也构成了一个域名。每个标号最长63字符,一个域名最长255字符。
域名解析原理
- 基本思想:设置域名服务器保存域名和IP地址的映射关系,查询服务器即可获得域名对应的IP地址。
- 服务器设置:引入多个服务器,每个服务器负责部分域名。它们分布于不同的位置,互相协作,最后构成了一个大型的分布式域名服务系统,提供全球域名的解析服务。
- 服务器组织:树型结构,最高层为根服务器,全球共13个。每个根服务器都有多个镜像服务器,全球共574台服务器
域名解析原理
- 域名解析过程:客户端/服务器模型
- 域名查询步骤:
- 域名解析器向域名服务器发出查询请求,其中包含需要解析的域名;
- 域名服务器收到请求后在本地数据库中查询,找到域名对应的IP地址;
- 域名服务器把查询获得的结果返回给域名解析器
- 解析类型分为:递归解析和迭代解析
- 递归解析:客户端的默认域名服务器将代理客户完成查询工作,如果自身数据库中不包含所请求的记录,它将继续实施递归查询以获取结果
- 迭代解析:根服务器不接受递归解析请求,当它收到一个查询请求且自身数据库中不包含请求的记录时,它将向请求服务器指示可能包含该记录的服务器,以便请求服务器进行进一步查询
高速缓存
- 思想:设置缓存保存最近解析的域名和IP地址的映射关系,避免每次都重新解析,由此提高效率。
- 客户端的二步解析法:
- 需要解析某个域名时,首先在本地缓存中查找,如果有则直接使用,如果没有走第二步;
- 向域名服务器发送域名解析请求。
- 服务器缓存:存放最近解析的名字,以及从何处获取该名字相关的记录。收到请求后首先确认自己是否被授权,如果没授权,查缓存,把缓存记录告诉客户端,把信息来源也告诉之,把信息标记为“非授权绑定”。
- 缓存记录保存时间:授权域名服务器响应一个请求时,会给出TTL值
减少DNS报文长度的措施
- 域名缩写
- 思想:同一单位内部的只要拨分机,同一城市的不必加区号。比如:在
xxgc.edu.cn
域内请求该域的服务器解析kouxiaorui.xxgc.edu.cn
域名,则仅填入kouxiaorui
即可
- 域名压缩
- 思想:压缩同一个查询中不同域名相同的字段。比如:
jun.xxgc.edu.cn和cs.pku.edu.cn
,只要存储一个edu.cn,并用指针指明复用的位置
- DNS既可以基于TCP,也可以基于UDP,服务器则使用知名端口53.
- 核心:数据传输量少,可靠性要求低的时候用UDP;否则用TCP.
DNS面临的安全威胁
- DNS欺骗:恶意攻击者改变DNS响应并把解析结果指向自己可控的主机。
- 信任服务器背叛:用户配置的可信服务器被黑客控制。
- 数据窃听及篡改:破坏机密性和完整性。DNS数据未作安全处理,因此攻击者很容易利用嗅探等方式获取并篡改数据。
- 名字连锁攻击:伪造描述别名的CNAME或NS记录,通过响应的管理机构区和附加信息区返回给查询者,从而导向恶意链接。
- 否认域名存在:攻击者返回查询失败应答,或将某个资源记录删除
相关文章:

网络协议分析
网络协议分析 网络协议分析概述用IP实现异构网络互联网络协议的分层TCP/IP的分层模型协议分析协议分析应用协议分析任务 常见网络协议PPP协议报文选项IPCP认证协议PAP安全缺陷认证协议CHAPPPPoE协议流程 地址解析协议ARPARP的思想和步骤ARP报文格式及封装 移动IP移动IP的工作机…...
GAMIT目录配置
1打开home,显示隐藏文件,CTRH 2修改目录 #set gamitpath gamitpath/opt/gamit10.7 export PATH$PATH:${gamitpath}/com/:${gamitpath}/gamit/bin:${gamitpath}/kf/bin HELP_DIR${gamitpath}/help export HELP_DIR #set GMT path gmtpath/usr/lib/gmt P…...

基于JSP的九宫格日志网站
你好呀,我是学长猫哥!如果有需求可以文末加我。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:浏览器/服务器(B/S)结构 系统展示 首页 管理员功能模块 用户功能模块 摘要 本…...

C#中结构struct能否继承于一个类class,类class能否继承于一个struct
C#中结构struct能否继承于一个类class,类class能否继承于一个struct 答案是:都不能。 第一种情行,尝试结构继承类 报错:接口列表中的类型"XX"不是接口interface。 一般来说,都是结构只能实现接口&#x…...

【Vulhub】Fastjson 1.2.24_rce复现
文章目录 一,Fastjson是什么?二,fastjson漏洞原理三,判断是否有fastjson反序列化四,复现Fastjson 1.2.24_rce(vulhub)环境配置1.判断是否存在Fastjson反序列化2.反弹shell3.启动RMI服务器4.构造恶意POST请求 一&#x…...
【iconv】UTF-8字符串转换为UTF-16字符串
使用<iconv.h>来进行字符串编码的转换 #include <iconv.h> #include <iostream> #include <string.h> #include <unistd.h> #include <memory> #include <fcntl.h>// 需要链接iconv库// iconv -l 命令可列出所有支持的格式 // exam…...
AI技术的未来展望:重塑人类社会的智能革命
一、引言 随着技术的飞速发展,人工智能(AI)已经不再是科幻小说中的概念,而是成为了我们生活中不可或缺的一部分。从简单的智能助手到复杂的自动化生产线,AI技术正在以前所未有的速度改变着世界。本文将对AI技术的未来…...

掘金AI 商战宝典-系统班:2024掘金AIGC课程(30节视频课)
课程目录 1-第一讲学会向Al提问:万能提问公式_1.mp4 2-第二讲用AI写视频脚本_1.mp4 3-第三讲用AI写视频口播文案_1.mp4 4-第四讲用AI自动做视频(上)_1.mp4 5-第五讲用AI自动做视频(中)_1.mp4 6-第六讲用AI自动做视…...

C# WinForm —— 26 ImageList 介绍
1. 简介 图片集合,用于存储图像的资源,并在关联控件中显示出来 可以通过 索引、键名 访问每张图片 没有事件 2. 属性 属性解释(Name)控件ID,在代码里引用的时候会用到,一般以 imgList 开头ClolorDepth用于呈现图像的颜色数,默…...
Vue:现代前端开发的首选框架-【声明周期钩子详解】
引言 Vue.js 是一个流行的前端框架,它通过组件化的开发方式,让开发者能够构建出高效且可维护的应用程序。在Vue中,生命周期钩子(Lifecycle Hooks)是理解组件行为的关键概念。本文将深入探讨Vue生命周期钩子࿰…...

【因果推断python】8_线性回归模型2
目录 回归理论 非随机数据的回归 回归理论 我不打算深入研究线性回归是如何构建和估计的。然而,一点点理论将有助于解释它在因果推断中的力量。首先,回归解决了理论上的最佳线性预测问题。令 是一个参数向量: 线性回归找到最小化均方误差 (…...
MySQL目录和文件
MySQL目录和文件 bin目录 存储一些mysql脚本比如mysqld、mysqld-self等等,用于执行mysql一些操作 数据目录 show variables like datadir;--查看数据目录位置每一个数据库都有一个和数据库名相同的文件夹;MySQL5.7开始每创建一个表,在Innod…...

0基础学习Elasticsearch-Quick start
文章目录 1 背景2 前言3 快速部署ES4 快速部署Kibana5 发送请求给ES5.1 打开Kibana控制台5.2 通过REST API发送请求5.3 通过curl发送请求5.4 添加数据5.4.1 添加单个document5.4.2 添加多个document 5.5 搜索数据5.5.1 搜索所有documents5.5.2 match查询 6 总结 1 背景 因电商项…...

Centos给普通用户添加sudo命令权限
打开sudoers文件 sudo visudo 修改sudoers文件 找到root ALL(ALL) ALL这一行,即如下图标出红线的一行 在此行下新增如下内容: lbs为用给予sudo执行权限的用户名 # 执行sudo命令,需要输入命令 lbs ALL(ALL) ALL 或 # 执行sudo命令,…...

编写备份MySQL 脚本
目录 环境准备 增量备份 增量备份和差异备份 完整代码如下 测试脚本是否正常 星期天运行脚本(完全备份) 星期一运备份脚本(增量备份) 星期二备份数据(其他天--增量备份) 星期三备份数据(差异备…...

C语言中的数据类型转换:隐式类型转换与显示类型转换
一. 简介 本文简单学习一下,C语言中的数据类型转换。重点学习一下隐式类型转换。 二. C语言中的数据类型转换:隐式类型转换与显示类型转换 类型转换(TypeCasting):在C语言中是将一种数据类型值转换为另一种数据类型…...
Android 安卓通过bindService ServiceConnection 没有响应的问题
bindService 失败且 ServiceConnection 没有响应可能由多种原因造成。以下是一些可能的原因和相应的解决方法: Service未正确声明或注册: 如果Service没有在AndroidManifest.xml文件中正确声明或注册,bindService将会失败。解决方法…...
python切片(彻底解除对切片的曲解)
sequence[start:stop:step] **start: **step为正时默认为0,step为负时默认为-1 stop:_ step为正时默认为结尾结束,step为负时默认为开始位置_ ss=“abcdefg” 以该字符串举例,ss[start:stop:step]的意思是将字符串ss从start开始截取(包括start),截取到stop(不包括sto…...

Java—— StringBuilder 和 StringBuffer
1.介绍 由于String的不可更改特性,为了方便字符串的修改,Java中又提供了StringBuilder和Stringbuffer类,这两个类大部分功能是相同的,以下为常用方法: public static void main(String[] args) {StringBuilder sb1 n…...

vs2019 c++20 规范 STL库中关于时间的模板
在学习线程的时候,一些函数会让线程等待或睡眠一段时间。函数形参是时间单位,那么在 c 中是如何记录和表示时间的呢?以下给出模板简图: 谢谢...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
离线语音识别方案分析
随着人工智能技术的不断发展,语音识别技术也得到了广泛的应用,从智能家居到车载系统,语音识别正在改变我们与设备的交互方式。尤其是离线语音识别,由于其在没有网络连接的情况下仍然能提供稳定、准确的语音处理能力,广…...
k8s从入门到放弃之HPA控制器
k8s从入门到放弃之HPA控制器 Kubernetes中的Horizontal Pod Autoscaler (HPA)控制器是一种用于自动扩展部署、副本集或复制控制器中Pod数量的机制。它可以根据观察到的CPU利用率(或其他自定义指标)来调整这些对象的规模,从而帮助应用程序在负…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...

云安全与网络安全:核心区别与协同作用解析
在数字化转型的浪潮中,云安全与网络安全作为信息安全的两大支柱,常被混淆但本质不同。本文将从概念、责任分工、技术手段、威胁类型等维度深入解析两者的差异,并探讨它们的协同作用。 一、核心区别 定义与范围 网络安全:聚焦于保…...