应用层
域名系统(DNS)
Domain Name System based on UDP port 53
域名 名字空间
层次结构:………三级域名.二级域名.顶级域名
根:无名字
顶级域名:国家、组织
二级域名(我国):类别域名、行政区域名
属于不同父亲的孩子节点可以有相同的名称: www.example.cn www.example.com
域名服务器
DNS服务器实际是一个分布式的数据库。主从复制,读写分离,增强可用性。服务器可以采用anycast任播技术,多台服务器使用同一IP地址,路由自动选择最近的服务器。
分类:
- 根域名服务器(Root):所有的根域名服务器都知道所有顶级域名服务器的IP地址和域名
- 根域名有13个,分布于全球的若干根域名服务器,使用IP anycast技术,每个域名有多个物理实例,但对外展示同一个 IP。
- 顶级域名服务器(Top Level Domain):管辖属于自己的二级域名
- 权限域名服务器(Authoriative Name Server):管辖区内的域名,一个服务器管一个域名,效率比较低,所以采用 区 的概念,区是域的子集。
- 本地域名服务器:不在上述层次中,但是离客户最近的DNS服务器。
DNS 查询顺序
先查缓存的查询流程
- 浏览器 DNS 缓存:首先,浏览器会检查自己的缓存中是否已经有该域名的IP地址记录。如果有,则直接使用这个IP地址,而不会发起DNS查询
- 操作系统 DNS 缓存:如果浏览器缓存中没有找到,浏览器会请求操作系统进行DNS解析。操作系统会先检查自己的DNS缓存。大多数现代操作系统都会维护一个 DNS 缓存来存储最近解析过的域名和对应的IP地址
- 本地 hosts 文件:如果操作系统缓存中也没有找到对应的记录,并且您使用的是Unix-like系统(如Linux或macOS),操作系统会查询本地的/etc/hosts文件。这个文件通常包含静态的IP地址到域名的映射
- 路由器DNS缓存:我们常用的路由器也带有自动缓存功能,路由器DNS被篡改会造成域名劫持,将访问网址定位到另外一个服务器;
- 本地DNS服务器(递归查询,本地DNS服务器替主机查询,主机作为DNS客户端向DNS服务器请求服务):如果/etc/hosts文件中也没有找到,操作系统会向配置的本地DNS服务器发送查询请求。这个本地DNS服务器可能是您的网络服务提供商提供的,或者是您在公司或学校网络中配置的,也具有缓存功能。本地DNS将解析结果告知客户端的同时,将记录缓存下来,当下次请求同一个域名时,直接会将记录返回,而无需再进行全球查询。
- 根域名服务器(迭代查询,从此开始就是本地DNS服务器反复查询):如果本地DNS服务器无法解析该域名,它会向根域名服务器发送查询请求。根域名服务器会返回负责顶级域名(如.com)的权威DNS服务器的地址
- 顶级域名服务器:本地DNS服务器然后会向顶级域名服务器发送查询请求,获取该域名的权威DNS服务器的地址
- 权威DNS服务器:最后,本地DNS服务器会向权威DNS服务器发送查询请求,获取该域名的IP地址
- 返回IP地址:一旦本地DNS服务器从权威DNS服务器那里获得了IP地址,它就会将这个IP地址返回给操作系统,操作系统再返回给浏览器。浏览器最后使用这个IP地址来建立与服务器的连接
在查询的过程中,一旦在某一环节找到有效的IP地址记录,就会停止后续的查询。而且,为了提高效率,本地DNS服务器和操作系统通常会对查询结果进行缓存,以便在后续请求中直接使用,减少网络延迟
DNS 缓存
所谓DNS缓存是指DNS返回正确的IP地址之后,系统会将这个结果临时储存起来,并为缓存设定一个失效时间(TTL值),在TTL失效前,当再次访问这个网站,系统就会直接从DNS 缓存中将结果返回,而不必再次委托递归服务器进行全球解析查询,加快了DNS解析的流程。
当然TTL值失效后,系统还会自动再次询问DNS服务器以获取最新的解析结果。
DNS 污染
在中国大陆,对所有经过防火长城(英语:Great Firewall,常用简称:GFW)的在UDP的53端口上的域名查询进行IDS入侵检测,一经发现与黑名单关键词相匹配的域名查询请求,会马上伪装成目标解析服务器注入伪造的查询结果。攻击仅出现在DNS查询之路由经过防火长城时。伪造的查询结果中的IP地址不是一成不变的,在一段时间后会更新。
对于TCP协议下的域名查询,防火长城可使用TCP重置攻击的方法进行干扰。
重置(reset)是传输控制协议(TCP)的一种消息,例如服务器端在没有客户端请求的端口或者其它连接信息不符时,系统的TCP协议栈就会给客户端回复一个重置通知消息,该功能本来用于应对例如服务器意外重启等情况,而防火长城阻止TCP连接的技术实际上就是比连接双方更快地发送连接重置消息,使连接双方以为对方终止了连接[65]。
动态主机配置协议(DHCP)
Dynamic Host Configuration Protocol based on UDP
port 68
for client
, 67
for server
采用C/S通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请
报文格式
dhcp offer:
- Relay Agent 中继
- Next Server 其他DHCP服务器
- Client MAC Address 之前 Discover含有 客户端的MAC地址
- bootp flags unicast 单播
dhcp offer:
分配IP
内网 使用DHCP协议
首次接入网络的DHCP客户端不知道DHCP服务器的IP地址,为了学习到DHCP服务器的IP地址,DHCP客户端以广播方式发送
DHCP DISCOVER
报文(目的IP地址为255.255.255.255)给同一网段内的所有设备(包括DHCP服务器或中继)。DHCP DISCOVER
报文中携带了客户端的MAC地址(chaddr字段)、需要请求的参数列表选项(Option55)、广播标志位(flags字段)等信息。源IP 地址0.0.0.0 目的IP:255.255.255.255某个(可能有多个服务器)DHCP服务器A监听到了DHCP请求,能够动态管理自己的IP池,通过
DHCP Offer
给计算机分配IP地址和默认网关(用于访问外部地址)以及子网掩码和DNS、租约信息,注意并不一定要全部提供。源IP为DHCP服务器的IP 目的IP:分配给客户端的IP,里面也有客户端的MAC地址。设备收到以后会正式提出租用请求,
DHCP Request
,源IP为0.0.0.0 目的IP:255.255.255.255,==广播==形式可以告诉其他可能存在的DHCP服务器已经向DHCP服务器A提出租用请求,。路由器收到以后发送
DHCP ACK
,确认分配并连接成功。源IP为DHCP服务器的IP 目的IP:分配给客户端收到
DHCP ACK
报文,会广播发送免费ARP报文,探测本网段是否有其他终端使用服务器分配的IP地址,如果在指定时间内没有收到回应,表示客户端可以使用此地址。如果收到了回应,说明有其他终端使用了此地址,客户端会向服务器发送DHCP DECLINE
报文,并重新向服务器请求IP地址,同时,服务器会将此地址列为冲突地址。当服务器没有空闲地址可分配时,再选择冲突地址进行分配,尽量减少分配出去的地址冲突。设备使用某个IP地址的时间有限,==单播==发送
DHCP Request
报文进行续约,如果收到DHCP NAK
报文说明续租失败;如果到时间如果设备不再续用发送DHCP Release
报文进行释放,DHCP服务器会回收,设备收到DHCP
。某些设备可能需要为静态的IP,这个可以通过MAC绑定也可以手动配置。
宽带:
静态IP:根据运营商提供的静态IP,子网掩码,网关,DNS手动配置,是固定的IP。
动态DHCP :自动从ISP获取IP地址等网络配置信息。
ADSL虚拟拨号 :使用PPPoE协议向运营商动态租用(PPPoE提供了身份验证功能,也就是宽带账号)。
典型场景
路由器从运营商的网络获取一个公网IP地址(通过运营商的DHCP服务器分配)。
路由器在局域网内充当DHCP服务器,为局域网设备分配私有IP地址(如192.168.0.x)。
RARP 协议
RARP(反向地址转换协议,Reverse Address Resolution Protocol)是局域网的物理机器从网关服务器的ARP表或者缓存上根据MAC地址请求IP地址的协议。它的功能与ARP协议相反。
- 请求IP地址:当局域网中的某个物理机器只知道自己的MAC地址而不知道IP地址时,它可以通过RARP协议向RARP服务器发送一个请求,请求分配一个IP地址。
- 服务器响应:RARP服务器在收到请求后,会查找其RARP列表或ARP表,查找该MAC地址对应的IP地址。如果找到匹配的MAC地址,RARP服务器就会将对应的IP地址发送给请求者。
- 获取IP地址并通信:请求者在收到RARP服务器的响应后,就可以利用得到的IP地址进行网络通信。
RARP(Reverse Address Resolution Protocol)和DHCP(Dynamic Host Configuration Protocol)是两种网络协议,它们都可以为某个刚接入网络的设备提供IP地址以实现互联通信。区别主要有以下几点:
- RARP是数据链路层的协议,无法跨路由器和网段工作,每个本地网络都必须配置一台RARP服务器;而DHCP属于应用层协议,可以跨路由器和网段工作,因此多个网段可以共享同一个DHCP服务器。
- RARP协议中,必须提前在RAPR服务器中手工配置好MAC地址和IP地址之间的映射;而DHCP允许动态的分配IP,更适应当前网络的需求。
- RARP协议仅仅是分配IP地址,而DHCP协议不仅提供IP地址,还提供其他网络配置信息,如子网掩码、网关、DNS服务器
万维网(WWW)
超文本传输协议(HTTP)
WebSocket
内容分发网络(CDN)
Content Distribution Network
push: 源服务器将内容推送给CDN
pull:CDN遇到自己没有的资源就从源服务器pull过来
anycast: 任播,与DNS服务器类似,很多CDN具有相同的IP地址,可以负载均衡。
CDN所需要的节点数量随着需求而不同,依照所需要服务的对象大小,有可能有数万台服务器。
服务器的运作方式一般是基于nginx的模式,通过HTTP头的Host字段等方式区分服务域名来提供HTTP服务。不过,随着2017年世界各地CDN服务商纷纷推出HTTPS加速功能,运作方式也变得略有不同,变成了nginx+SNI模式,同一个CDN节点上可以借此机制绑定多个域名而为不同域名提供HTTPS服务。同时,BGP的anycast技术也逐渐引入了CDN领域中。
P2P CDN(PCDN):用户自愿以PC或专用设备利用闲置上行带宽充当CDN缓存节点
进程间通信(IPC)
P2P
文件传送协议(FTP)
FTP 协议 基于 TCP 协议,是一种用于在计算机之间传输文件的协议,可以屏蔽操作系统和文件存储方式。
FTP 是基于客户—服务器(C/S)模型而设计的,在客户端与 FTP 服务器之间建立两个连接。如果我们要基于 FTP 协议开发一个文件传输的软件的话,首先需要搞清楚 FTP 的原理。关于 FTP 的原理,很多书籍上已经描述的非常详细了:
FTP 的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条 TCP 连接(其它客户服务器应用程序一般只有一条 TCP 连接):
- 控制连接:用于传送控制信息(命令和响应)
- 数据连接:用于数据传送;
这种将命令和数据分开传送的思想大大提高了 FTP 的效率。
FTP工作过程
注意 :FTP 是一种不安全的协议,因为它在传输过程中不会对数据进行加密。因此,FTP 传输的文件可能会被窃听或篡改。建议在传输敏感数据时使用更安全的协议,如 SFTP(SSH File Transfer Protocol,一种基于 SSH 协议的安全文件传输协议,用于在网络上安全地传输文件)。
电子邮件
SMTP
简单邮件传输(发送)协议(SMTP,Simple Mail Transfer Protocol) 基于 TCP 协议,是一种用于发送电子邮件的协议
SMTP 协议
注意 ⚠️:接受邮件的协议不是 SMTP 而是 POP3 协议。
SMTP 协议这块涉及的内容比较多,下面这两个问题比较重要:
- 电子邮件的发送过程
- 如何判断邮箱是真正存在的?
电子邮件的发送过程?
比如我的邮箱是“dabai@cszhinan.com”,我要向“xiaoma@qq.com”发送邮件,整个过程可以简单分为下面几步:
- 通过 SMTP 协议,我将我写好的邮件交给 163 邮箱服务器(邮局)。
- 163 邮箱服务器发现我发送的邮箱是 qq 邮箱,然后它使用 SMTP 协议将我的邮件转发到 qq 邮箱服务器。
- qq 邮箱服务器接收邮件之后就通知邮箱为“xiaoma@qq.com”的用户来收邮件,然后用户就通过 POP3/IMAP 协议将邮件取出。
如何判断邮箱是真正存在的?
很多场景(比如邮件营销)下面我们需要判断我们要发送的邮箱地址是否真的存在,这个时候我们可以利用 SMTP 协议来检测:
- 查找邮箱域名对应的 SMTP 服务器地址
- 尝试与服务器建立连接
- 连接成功后尝试向需要验证的邮箱发送邮件
- 根据返回结果判定邮箱地址的真实性
推荐几个在线邮箱是否有效检测工具:
IMAP/POP3
这两个协议没必要多做阐述,只需要了解 POP3 和 IMAP 两者都是负责邮件接收的协议 即可(二者也是基于 TCP 协议)。另外,需要注意不要将这两者和 SMTP 协议搞混淆了。SMTP 协议只负责邮件的发送,真正负责接收的协议是 POP3/IMAP。
IMAP 协议是比 POP3 更新的协议,它在功能和性能上都更加强大。IMAP 支持邮件搜索、标记、分类、归档等高级功能,而且可以在多个设备之间同步邮件状态。几乎所有现代电子邮件客户端和服务器都支持 IMAP。
E-mail on WWW
MIME
MIME改善了由 RFC 822 转变而来的 RFC 2822 ,这些旧标准规定电子邮件标准并不允许在邮件消息中使用7位ASCII字符集以外的字符。正因如此,一些非英语字符消息和二进制文件,图像,声音等非文字消息原本都不能在电子邮件中传输(MIME可以)。MIME规定了用于表示各种各样的数据类型的符号化方法。此外,在万维网中使用的HTTP协议中也使用了MIME的框架,标准被扩展为互联网媒体形式。
1 | Content-Type: [type]/[subtype]; parameter |
Telnet & SSH
Telnet 协议 基于 TCP 协议,用于通过一个终端登陆到其他服务器。Telnet 协议的最大缺点之一是所有数据(包括用户名和密码)均以明文形式发送,这有潜在的安全风险。这就是为什么如今很少使用 Telnet,而是使用一种称为 SSH 的非常安全的网络传输协议的主要原因。
SSH (Secure Shell) 基于 TCP 协议,通过加密和认证机制实现安全的访问和文件传输等业务。
SSH 的经典用途是登录到远程电脑中执行命令。除此之外,SSH 也支持隧道协议、端口映射和 X11 连接(允许用户在本地运行远程服务器上的图形应用程序)。借助 SFTP(SSH File Transfer Protocol) 或 SCP(Secure Copy Protocol) 协议,SSH 还可以安全传输文件。
SSH 使用客户端-服务器模型,默认端口是 22。SSH 是一个守护进程,负责实时监听客户端请求,并进行处理。大多数现代操作系统都提供了 SSH。
如下图所示,SSH Client(SSH 客户端)和 SSH Server(SSH 服务器)通过公钥交换生成共享的对称加密密钥,用于后续的加密通信。