应用层
域名系统DNS
DNS(Domain Name System,域名系统)是互联网的一项核心服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网,而不用去记住能够被机器直接读取的IP地址。
功能
DNS主要提供以下功能:
- 域名解析:将域名转换为IP地址
- 反向解析:将IP地址转换为域名
- 邮件交换:查找邮件服务器的地址
- 负载均衡:将域名解析到多个IP地址,实现负载分配
工作原理
DNS采用分布式数据库系统,采用客户/服务器模式进行工作:
- 客户端向本地DNS服务器发送查询请求
- 本地DNS服务器首先检查缓存中是否有该记录
- 如果缓存中没有,则向根域名服务器发起查询
- 根域名服务器返回顶级域(TLD)服务器的地址
- 本地DNS服务器向TLD服务器查询,获取权威域名服务器的地址
- 本地DNS服务器向权威域名服务器查询,获取最终结果
- 本地DNS服务器将结果返回给客户端,并缓存结果
查询方式
- 递归查询:客户端发出请求后,只等待最终结果,中间过程由DNS服务器完成
- 迭代查询:客户端发出请求后,如果DNS服务器无法直接回答,则返回下一个服务器的地址,由客户端继续查询
域名结构
DNS采用层次结构的命名空间:
- 根域名:位于最顶层,用"."表示
- 顶级域:如.com、.org、.net、.cn等
- 二级域:如.example.com中的"example"
- 子域名:如.www.example.com中的"www"
服务器类型
- 根域名服务器:全球共13组,负责管理顶级域服务器
- 顶级域服务器:管理特定顶级域下的所有域名
- 权威域名服务器:存储特定域名的官方记录
- 本地DNS服务器:通常由ISP提供,为用户提供DNS解析服务
资源记录类型
- A记录:将域名映射到IPv4地址
- AAAA记录:将域名映射到IPv6地址
- CNAME记录:创建域名的别名
- MX记录:指定邮件服务器
- NS记录:指定域名的权威域名服务器
- PTR记录:用于反向DNS查询,将IP地址映射到域名
文件传输协议
FTP(File Transfer Protocol,文件传输协议)是用于在网络上进行文件传输的一套标准协议,它工作在OSI模型的第七层,TCP模型的第四层,即应用层,使用TCP传输而不是UDP,客户在和服务器建立连接前要经过一个"三次握手"的过程,保证客户与服务器之间的连接是可靠的,而且是面向连接,为数据传输提供可靠保证。
工作原理
FTP采用客户/服务器模式,通过两个TCP连接实现文件传输:
- 控制连接:用于传输命令和响应,使用TCP 21端口
- 数据连接:用于传输实际文件内容,使用TCP 20端口(主动模式)或临时端口(被动模式)
传输模式
主动模式(Active Mode)
- 客户端从随机端口N连接到服务器的21端口
- 客户端监听N+1端口,并通过PORT命令告诉服务器
- 服务器从20端口连接到客户端的N+1端口建立数据连接
被动模式(Passive Mode)
- 客户端从随机端口N连接到服务器的21端口
- 客户端发送PASV命令
- 服务器开放一个随机端口M,并通过PORT命令告诉客户端
- 客户端从随机端口N+1连接到服务器的M端口建立数据连接
传输类型
- ASCII模式:用于传输文本文件,会进行格式转换
- 二进制模式:用于传输二进制文件,不进行任何转换
- 本地模式:使用特定于机器的格式,很少使用
常用命令
- USER:提供用户名
- PASS:提供密码
- LIST:列出目录内容
- RETR:下载文件
- STOR:上传文件
- QUIT:退出连接
特点
- 交互式:用户可以与服务器进行交互
- 可靠:使用TCP保证数据传输的可靠性
- 灵活:支持多种文件类型和传输模式
- 安全性低:用户名和密码以明文传输
远程终端协议Telnet
Telnet(Telecommunication Network)协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
工作原理
Telnet采用客户/服务器模式:
- 客户端与服务器建立TCP连接(默认端口23)
- 客户端从键盘接收输入,发送给服务器
- 服务器接收输入,执行相应命令
- 服务器将输出返回给客户端
- 客户端将输出显示在终端上
网络虚拟终端(NVT)
为了适应不同系统的差异,Telnet定义了网络虚拟终端(NVT):
- NVT是一种统一的字符表示形式
- 客户端将本地字符转换为NVT格式发送给服务器
- 服务器将NVT格式转换为本地字符格式
- NVT使用7位ASCII码,最高位为0
选项协商
Telnet支持选项协商,使客户端和服务器可以协商使用的选项:
- WILL:发送方希望使用某个选项
- WONT:发送方不希望使用某个选项
- DO:发送方希望对方使用某个选项
- DONT:发送方不希望对方使用某个选项
常用选项
- 回显(ECHO):控制是否回显用户输入
- 抑制继续进行(SUPPRESS GO AHEAD):控制数据传输方式
- 状态(STATUS):请求获取远程系统的状态信息
- 终端类型(TERMINAL TYPE):协商终端类型
特点
- 简单:协议简单,易于实现
- 通用:支持多种操作系统
- 交互性:支持实时交互
- 安全性低:数据以明文传输,容易被窃听
应用场景
- 远程登录:登录远程主机进行操作
- 设备配置:配置网络设备(如路由器、交换机)
- 系统管理:远程管理系统服务器
- 测试调试:测试网络连接和应用程序
万维网
万维网(World Wide Web,WWW)是一个由许多互相链接的超文本文档组成的全球信息系统,通过互联网访问。
基本概念
- 超文本:包含链接的文本,可以链接到其他文档
- 超媒体:包含多种媒体类型(文本、图像、音频、视频等)的超文本
- 网页:万维网中的基本文档
- 网站:一组相关的网页集合
- URL(统一资源定位符):标识万维网上的资源
HTTP协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是万维网数据通信的基础。
特点
- 简单快速:客户端向服务器发送请求时,只需传送请求方法和路径
- 灵活:HTTP允许传输任意类型的数据对象
- 无连接:每次连接只处理一个请求
- 无状态:对于事务处理没有记忆能力
请求方法
- GET:请求获取由Request-URI所标识的资源
- POST:在Request-URI所标识的资源后附加新的数据
- HEAD:请求获取由Request-URI所标识的资源的响应消息报头
- PUT:请求服务器存储一个资源,并用Request-URI作为其标识
- DELETE:请求服务器删除由Request-URI所标识的资源
- TRACE:请求服务器回显收到的请求信息,主要用于测试或诊断
状态码
- 1xx:指示信息-表示请求已接收,继续处理
- 2xx:成功-表示请求已被成功接收、理解、接受
- 3xx:重定向-要完成请求必须进行更进一步的操作
- 4xx:客户端错误-请求有语法错误或请求无法实现
- 5xx:服务器错误-服务器未能实现合法的请求
HTTPS协议
HTTPS(HyperText Transfer Protocol Secure,安全超文本传输协议)是HTTP的安全版本。
特点
- 加密:使用SSL/TLS协议对数据进行加密
- 认证:通过证书验证服务器的身份
- 完整性:保证数据在传输过程中不被篡改
工作过程
- 客户端向服务器发送HTTPS请求
- 服务器返回证书
- 客户端验证证书
- 客户端生成会话密钥,用服务器的公钥加密后发送给服务器
- 服务器用私钥解密获取会话密钥
- 双方使用会话密钥进行加密通信
HTML
HTML(HyperText Markup Language,超文本标记语言)是用于创建网页的标准标记语言。
- 标签:用尖括号包围的关键词,如
<html>、<body> - 元素:由开始标签和结束标签组成,如
<p>内容</p> - 属性:提供元素的额外信息,如
<a href="url">链接</a> - 结构:文档类型声明、html、head、body等部分
Web浏览器
Web浏览器是用于访问万维网的客户端软件:
- 功能:解析HTML、CSS、JavaScript,渲染网页
- 常见浏览器:Chrome、Firefox、Safari、Edge等
- 内核:渲染引擎,如Blink、Gecko、WebKit等
Web服务器
Web服务器是存储、处理和传输网页的计算机程序:
- 功能:接收HTTP请求,返回HTTP响应
- 常见服务器:Apache、Nginx、IIS等
- 虚拟主机:在一台物理服务器上运行多个网站
电子邮件
电子邮件(E-mail)是互联网上应用最广泛的服务之一,它提供了一种快速、便捷的电子通信方式。
系统组成
电子邮件系统主要由三部分组成:
- 用户代理(User Agent,UA):用户与电子邮件系统交互的接口
- 邮件服务器:负责发送和接收邮件
- 电子邮件协议:规定邮件传输格式的规则
邮件地址格式
电子邮件地址格式为:用户名@域名
- 用户名:标识邮箱的所有者
- 域名:标识邮件服务器
- @符号:分隔用户名和域名
邮件协议
SMTP
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)用于发送邮件:
- 使用TCP 25端口
- 基于文本的协议
- 推送协议:将邮件从客户端推送到服务器
- 只支持7位ASCII编码
POP3
POP3(Post Office Protocol version 3,邮局协议版本3)用于接收邮件:
- 使用TCP 110端口
- 拉取协议:将邮件从服务器拉取到客户端
- 离线模式:邮件下载后通常从服务器删除
- 状态管理:认证、事务、更新三个状态
IMAP
IMAP(Internet Message Access Protocol,互联网消息访问协议)用于接收邮件:
- 使用TCP 143端口
- 在线模式:邮件保留在服务器上
- 支持文件夹管理
- 支持邮件部分下载
邮件传输过程
- 发送方使用用户代理编写邮件
- 用户代理通过SMTP将邮件发送到发送方邮件服务器
- 发送方邮件服务器通过SMTP将邮件发送到接收方邮件服务器
- 接收方使用用户代理通过POP3或IMAP从接收方邮件服务器接收邮件
邮件格式
电子邮件由两部分组成:
-
首部:包含邮件的各种信息
- From:发件人地址
- To:收件人地址
- Subject:邮件主题
- Date:发送日期
- 其他字段
-
正文:邮件的实际内容
MIME
MIME(Multipurpose Internet Mail Extensions,多用途互联网邮件扩展)扩展了电子邮件的功能:
- 支持非ASCII字符
- 支持多种媒体类型
- 支持多部分邮件
- 支持附件
常见邮件服务器软件
- Sendmail:Unix/Linux系统常用的邮件服务器
- Postfix:Sendmail的替代品,更安全
- Microsoft Exchange:Windows环境下的企业邮件服务器
- Qmail:注重安全性的邮件服务器
DHCP
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段。
功能
DHCP主要提供以下功能:
- 动态分配IP地址
- 分配子网掩码
- 分配默认网关
- 分配DNS服务器地址
- 分配其他网络配置参数
工作原理
DHCP采用客户/服务器模式,通过以下步骤分配IP地址:
- DHCP Discover:客户端广播DHCP Discover报文,寻找DHCP服务器
- DHCP Offer:DHCP服务器收到Discover报文后,发送DHCP Offer报文,提供IP地址
- DHCP Request:客户端收到Offer报文后,发送DHCP Request报文,请求使用提供的IP地址
- DHCP ACK:DHCP服务器收到Request报文后,发送DHCP ACK报文,确认IP地址分配
IP地址分配方式
- 自动分配:DHCP服务器分配一个永久性IP地址给客户端
- 动态分配:DHCP服务器分配一个有时间限制的IP地址给客户端
- 手工分配:管理员手动指定IP地址,DHCP服务器只负责将指定IP地址传达给客户端
租约更新
DHCP分配的IP地址有租期限制,客户端需要更新租约:
- 当租期达到50%时,客户端向原DHCP服务器发送DHCP Request报文,请求更新租约
- 如果服务器同意,发送DHCP ACK报文,租期更新
- 如果服务器不同意或无响应,客户端继续使用原IP地址,直到租期达到87.5%
- 当租期达到87.5%时,客户端广播DHCP Request报文,请求任何DHCP服务器更新租约
- 如果租期到期仍未更新,客户端必须停止使用该IP地址
报文格式
DHCP报文格式基于BOOTP,包含以下字段:
- op:报文类型(1=请求,2=响应)
- htype:硬件地址类型
- hlen:硬件地址长度
- hops:跳数
- xid:事务ID
- secs:秒数
- flags:标志位
- ciaddr:客户端IP地址
- yiaddr:你的IP地址(分配给客户端的IP地址)
- siaddr:服务器IP地址
- giaddr:网关IP地址
- chaddr:客户端硬件地址
- sname:服务器主机名
- file:启动文件名
- options:可选参数字段
优点
- 减少管理员的配置工作
- 避免IP地址冲突
- 支持移动用户
- 高效利用IP地址资源
缺点
- 依赖网络广播
- 安全性较低
- 可能导致单点故障
SNMP
SNMP(Simple Network Management Protocol,简单网络管理协议)是用于管理网络设备的协议,它可以让管理员通过网络对设备进行监控、配置和故障排除等操作。
基本组件
SNMP系统由以下三个主要组成部分:
- 网络管理系统(NMS):运行网络管理软件的计算机,负责发送SNMP请求并接收设备返回的响应信息
- 代理(Agent):运行在被管理设备上的进程,负责执行管理站发送的命令,收集设备的状态信息并反馈给管理站
- 管理信息库(MIB):存储网络设备的所有管理对象和参数的定义的数据库
工作原理
SNMP采用客户/服务器模式:
- 管理站向代理发送请求
- 代理接收请求,执行相应操作
- 代理将结果返回给管理站
- 代理可以主动发送Trap报文,通知管理站发生了特定事件
协议操作
SNMP提供了一组操作来实现管理任务:
- Get:从代理获取特定MIB对象的值
- Set:修改设备MIB对象的值,执行特定的设备配置更改
- GetNext:逐步遍历MIB表中的数据
- GetBulk:一次获取多个连续的对象,减少网络开销
- Trap:代理设备主动发送的告警信息,通知管理站发生了特定事件或故障
- Inform:类似Trap,但管理站需要确认收到告警信息
版本演进
SNMP有三个主要版本:
- SNMPv1:最早的版本,安全性较差,只支持简单的管理操作
- SNMPv2c:增加了GetBulk操作和新的数据类型,但安全性仍然不够
- SNMPv3:提供了更好的安全性和扩展性,支持加密和认证等功能
管理信息结构(SMI)
SMI(Structure of Management Information)定义了MIB中的对象类型和属性:
- 定义了基本的数据类型,如整数、字符串、布尔值等
- 定义了复杂的数据类型,如序列、集合等
- 定义了对象标识符的格式、数据类型的编码方式等规则
对象标识符(OID)
OID(Object Identifier)是用于唯一标识管理对象的全局唯一标识符:
- 采用层次结构,类似DNS
- 由一系列数字组成,用点分隔
- 例如:1.3.6.1.2.1.1.1.0表示系统描述
安全机制
SNMPv3提供了以下安全机制:
- 认证:验证消息的来源和完整性
- 加密:保护消息的机密性
- 访问控制:控制用户对MIB对象的访问权限
- 基于用户和视图的访问控制
应用场景
- 网络设备监控:监控路由器、交换机等网络设备的状态
- 性能管理:收集和分析网络性能数据
- 故障管理:检测和诊断网络故障
- 配置管理:远程配置网络设备
- 安全管理:监控网络安全事件
应用进程跨越网络的通信
应用进程跨越网络的通信是指在不同主机上的应用进程之间通过网络进行数据交换的过程。
进程通信模型
客户/服务器模型
- 服务器:一直运行,有固定的IP地址和周知的端口号
- 客户:主动与服务器通信,与互联网有间歇性的连接,可能是动态IP地址
- 特点:服务器提供服务,客户请求服务
对等(P2P)模型
- 没有一直运行的服务器
- 任意端系统之间可以直接通信
- 每个节点既是客户端又是服务器
- 自扩展性:新节点带来新的服务能力
混合模型
- 结合客户/服务器和对等体系结构
- 例如:Napster文件搜索使用集中式服务器,文件传输使用P2P
进程标识
IP地址
- 标识主机在网络中的位置
- 32位(IPv4)或128位(IPv6)
- 分为网络部分和主机部分
端口号
- 标识主机上的应用进程
- 16位整数,范围0-65535
- 分为三类:
- 周知端口(0-1023):由IANA分配给常用服务
- 注册端口(1024-49151):由应用程序注册使用
- 动态/私有端口(49152-65535):客户端临时使用
套接字地址
- 套接字地址 = IP地址 + 端口号
- 唯一标识网络中的一个进程
- 例如:192.168.1.1:80
应用层协议
应用层协议定义了应用进程之间交换的报文的格式和规则:
- 报文类型:请求报文、响应报文等
- 报文格式:报文中各个字段的描述
- 字段语义:字段中包含的信息的含义
- 规则:进程何时发送报文、对报文进行响应的规则
常见应用层协议:
- HTTP:超文本传输协议
- FTP:文件传输协议
- SMTP:简单邮件传输协议
- DNS:域名系统
- Telnet:远程终端协议
- DHCP:动态主机配置协议
- SNMP:简单网络管理协议
传输层服务选择
应用层协议需要选择合适的传输层服务:
TCP服务
- 可靠数据传输
- 流量控制
- 拥塞控制
- 面向连接
- 适用于需要可靠传输的应用,如Web、文件传输、电子邮件
UDP服务
- 不可靠数据传输
- 无流量控制
- 无拥塞控制
- 无连接
- 适用于对实时性要求高但对可靠性要求不高的应用,如语音、视频、DNS
网络应用开发
套接字编程
套接字(Socket)是应用进程与网络协议之间的接口:
- 创建套接字:指定协议类型(TCP/UDP)
- 绑定地址:将套接字与本地地址绑定
- 监听连接(服务器):设置套接字为监听模式
- 接受连接(服务器):等待并接受客户端连接请求
- 建立连接(客户端):向服务器发起连接请求
- 发送/接收数据:通过套接字发送和接收数据
- 关闭套接字:释放资源
API选择
- TCP API:Socket、ServerSocket(Java)、Winsock(Windows)、Berkeley Sockets(Unix/Linux)
- UDP API:DatagramSocket(Java)、Winsock(Windows)、Berkeley Sockets(Unix/Linux)
p2p的应用
P2P(Peer-to-Peer,对等网络)是一种在对等者(Peer)之间分配任务和工作负载的分布式应用架构,是对等计算模型在应用层形成的一种网络形式。
P2P原理
P2P技术属于覆盖层网络(Overlay Network)的范畴,是相对于客户机/服务器(C/S)模式来说的一种网络信息交换方式。
在P2P网络环境中:
- 彼此连接的多台计算机之间都处于对等的地位
- 各台计算机有相同的功能,无主从之分
- 每个节点既充当服务器,为其他节点提供服务,也能作为客户端,享用其他节点提供的服务
P2P与C/S模式比较
C/S模式特点
- 数据的分发采用专门的服务器
- 多个客户端都从此服务器获取数据
- 优点:数据的一致性容易控制,系统容易管理
- 缺点:容易出现单一失效点,可扩展性差
P2P模式特点
- 每个节点既可以从其他节点得到服务,也可以向其他节点提供服务
- 庞大的终端资源被利用起来
- 解决了C/S模式中的单一失效点和可扩展性差的问题
P2P应用类型
P2P应用软件主要包括:
- 文件分发软件:如BitTorrent、eMule
- 语音服务软件:如Skype
- 流媒体软件:如PPLive
- 分布式计算:如SETI@home
文件分发
C/S文件分发
- 服务器必须向每个客户端发送文件的副本
- 服务器总发送量与客户端数量成正比
- 服务器带宽成为瓶颈
P2P文件分发
- 每个节点可以向其他节点分发文件
- 分发任务被分散到多个节点
- 随着节点数量增加,分发能力也增加
BitTorrent协议
BitTorrent是一种广泛使用的P2P文件分发协议:
基本概念
- 文件被分成多个块(chunk)
- 节点从多个其他节点同时下载不同的块
- 节点在下载的同时也上传已有的块给其他节点
工作过程
- 节点加入P2P系统,注册到追踪器(tracker)
- 追踪器返回当前活跃节点列表
- 节点从多个节点下载不同的文件块
- 节点将已下载的文件块上传给其他节点
- 节点完成下载后可以选择继续上传(做种)
优化机制
- 最稀罕优先:优先下载最稀少的文件块
- 交换策略:优先上传给那些向自己上传速度快的节点
- 激励机制:通过上传速度限制下载速度,鼓励节点上传
P2P索引技术
为了在P2P网络中定位资源,需要索引技术:
集中式索引
- 使用中央服务器存储所有资源的索引信息
- 类似Napster的早期实现
- 优点:简单高效
- 缺点:单点故障,可扩展性差
洪泛式查询(Query flooding)
- 节点向所有邻居节点广播查询请求
- 收到请求的节点继续广播,直到找到资源或达到TTL限制
- 优点:完全分布式,无单点故障
- 缺点:产生大量网络流量
层次式覆盖网络
- 节点组织成层次结构
- 高层节点负责索引,底层节点负责存储
- 优点:平衡了集中式和分布式的优点
- 缺点:实现复杂
P2P面临的挑战
- 可扩展性:随着节点数量增加,系统性能如何保持
- 安全性:如何防止恶意节点和攻击
- 版权问题:如何处理非法内容分发
- 管理复杂性:如何管理一个高度分布式的系统
- 网络资源消耗:P2P应用可能消耗大量网络带宽
未来发展
- 混合架构:结合P2P和C/S的优点
- 智能路由:更高效地定位资源
- 安全机制:增强P2P系统的安全性
- 资源激励机制:鼓励节点贡献资源
- 移动P2P:适应移动设备的特点