计算机网络系列博客
开篇 https://blog.csdn.net/hieheihei/article/details/94127674
文章目录
网络应用程序体系结构
客户-服务器体系结构(client-server architecture)
服务器 总是开启的主机,响应客户主机的请求。具有固定,周知的地址。
客户相互间不直接通信。
如:Web,TFP,Telnet,电子邮件
对等体系结构(P2P architecture)
不依赖或极少地依赖中心服务器。
应用程序在间断连接的主机对间直接通信。
对等方 P2P体系下直接通信的主机。
流量密集型应用常用P2P结构。
如:BitTorrent,P2P下载加速器,因特网电话,IPTV
混合体系结构
结合了C/S,P2P结构。
如许多即时通讯应用中,服务器用于跟踪用户IP,用户到用户报文直接在用户主机间传输。
进程通信
进程是通信中会话双方的实体。
套接字
同一主机内,应用层与运输层间的接口。
开发者可通过套接字控制应用层的一切行为,但对运输层的控制非常有限。
进程寻址
标识进程
- 主机地址: IP地址
- 主机中的进程标识符: 端口号
周知端口号:
https://www.iana.org/
可供进程使用的运输服务
可靠数据传输
运输层协议确保进程到进程的可靠数据传输:数据正确,完全地交付
丢包:结点缓存溢出,数据比特损坏。
吞吐量保证
运输层协议提供确保可用的吞吐量。
即协议确保可用吞吐量总大于r 比特每秒。
定时保证
运输层协议确保延时低于一定值。
安全性保证
运输层协议保证数据机密性,完整性等。
因特网运输服务
TCP服务 面向链接的可靠数据传输服务
UDP服务 无连接的不可靠数据传输服务
安全套接字层(Secure Sockets Layer,SSL)
应用层协议,提供进程到进程的安全性服务。
依赖运输层的TCP服务。
有自己的套接字API,需要在通信应用程序的双方部署相应SSL代码(SSL库,类)
应用层协议
定义应用程序进程如何传递报文,具体地,定义:
- 报文类型
- 报文语法 报文字段及格式
- 字段语义
- 进程何时,如何发送报文,如何响应报文
公有域应用层协议 常由RFC 文档定义
应用层协议是网络应用的重要组成部分。
HTTP超文本传输协议
HTTP概况
Web World Wide Web
20世纪90年代初
因特网应用
超文本传输协议(HyperText Transfer Protocol,HTTP)
HTTP 由客户端程序和服务端程序实现,二者通过交换HTTP报文会话。
Web游览器实现HTTP客户端
Web服务器实现HTTP服务端
HTTP使用TCP作为支撑运输层协议。
端口:80
Web页面
由对象组成。对象是一个文件,如HTML文件,JPEG图像,Java程序,视频片段等。
对象可通过一个URL地址寻址。
Web页面常由一个HTML基本文件和多个引用对象构成。
URL地址
用以寻址Web对象
由一个存放对象的服务器主机名和对象路径名构成。
无状态协议 服务器不保存关于客户的任何信息
服务器向客户发送被请求的文件,而不存储任何关于客户的状态信息。
持续连接 某客户和服务器的一次会话中,所有请求/响应对经同一TCP连接传输
非持续连接 某客户和服务器的一次会话中,每个请求/响应对通过一个单独的TCP连接传输
HTTP在默认方式下采用持续连接,但也可由客户端/服务器配置为非持续连接。
浏览器通常支撑并行的TCP连接
往返时间(Round-Trip Time,RTT)
一个短分组从客户到服务器然后再返回客户所花费的时间。
TCP 三次握手
1.客户向服务器发送一个小TCP报文段;
2.服务器用一个小TCP报文段做出确认和响应;
3.客户向服务器返回确认和一个HTTP请求报文;
4.服务器返回相应HTML文件;
HTTP报文格式
HTTP规范
RFC 1945 https://tools.ietf.org/html/rfc1945
RFC 2616 https://tools.ietf.org/html/rfc2616
用ASCII文本书写
HTTP 请求报文
请求行 HTTP请求报文的第一行
- 方法字段 值可用为:GET POST HEAD PUT DELETE ; 绝大多数HTTP请求报文使用GET方法
- URL字段 请求对象的标识
- HTTP版本字段
GET方法 请求一个对象
POST方法 提交表单
HEAD方法 类GET,但返回特殊的响应报文,而非所请求的对象,常用于调试
PUT方法 用户上传对象到指定Web服务器的指定目录
DELETE方法 允许用户删除Web服务器上的对象
首部行 请求行后继的其它行
实体体(entity body)
GET方法下实体体为空
POST方法下实体体包含表单信息
HTTP 响应报文
状态行
- 协议版本字段
- 状态码
- 状态信息
首部行
实体体
cookie
HTTP是无状态协议,但cookie技术允许服务器识别用户
cookie在无状态的HTTP之上建立一个用户会话层
参见 [RFC 6265]
cookie组件
HTTP响应报文中的cookie首部行
HTTP请求报文中的cookie首部行
用户端系统中保留一个cookie文件,由游览器管理
Web站点中的后台数据库
Web缓存器(代理服务器)
代表原Web服务器来响应HTTP请求的网络实体
Web缓冲器的存储空间保存最近请求过的对象的副本
可以配置用户浏览器,使得HTTP请求首先指向Web缓冲器
Web缓冲器通常由ISP购买并安装
条件GET方法 允许缓存器证实其缓存的副本是新的。
优点:
- 减少对客户请求的响应时间
- 大大减少一个机构的接入链路到因特网的通信流量以降低费用
- 从整体上,大大减小因特网上的Web流量
内容分发网络(Content Distribution Network,CDN)
基于缓存器技术,CDN公司在因特网上安装许多地理上分散的缓存器,使得大流量本地化。
有共享CDN,专用CDN(谷歌,微软)
FTP文件传输协议
用户在本地主机与远程主机间传输文件
端口:21
FTP使用多个并行TCP链接
控制连接 在主机间传输控制信息,如用户标识,口令,文件命令等
数据连接 实际传递文件
控制连接是持续的,一次会话维持一个控制连接
数据连接是非持续的,为每一次文件传输创建一个新数据连接
带外传送(out-of-band) 使用独立控制连接,如FTP
带内传送(in-band) 在传送数据的同一个连接内传输控制信息,如HTTP
SMTP简单邮件传输协议
Simple Mail Transfer Protocol,SMTP
因特网电子邮件系统
用户代理 允许用户阅读,回复,转发,保存,撰写报文(电子邮件)
邮件服务器 每个邮件接收方都在某邮件服务器上有一个邮箱
简单邮件传输协议,SMTP
SMTP
用于从发送方邮件服务器发送报文到接收方邮件服务器
依赖TCP运输层协议
端口:25
参见 [RFC 5321]
古老(1982年),限制报文的体只能用ASCII表示,故传输现代多媒体附件时,要将多媒体数据编码为ASCII码,用SMTP传输完毕后再解码还原为多媒体数据。
SMTP一般不使用中间邮件服务器发送邮件,即使两服务器相距甚远也会尝试直接建立连接。
拉协议(pull protocol)
用户依据协议从服务器上拉取信息,连接由想接收文件的进程发起。如HTTP(的主要功能)
推协议(push protocol)
用户依据协议把文件推送到服务器上,连接由文件发送方发起。如SMTP
邮件发送过程
- 发送方用户代理用SMTP(或HTTP)将邮件推送至发送方邮件服务器;
- 发送方邮件服务器用SMTP将邮件推送至接收方邮件服务器;具体地,发送方邮件暂存与发送方邮件服务器中,发送方邮件服务器会周期性的尝试连接接收方服务器,若多次尝试失败,则返回给发送方一个错误信息
- 接收方邮件服务器分发邮件给接收方;具体地,接收方通过邮件访问协议从接收方邮件服务器上拉取邮件。
邮件访问协议
用于接收方从接收方邮件服务器上拉取报文。
常用邮件访问协议:
Post Office Protocol-Version 3,POP3
Internet Mail Access Protocol,IMAP
HTTP
现今基于Web的电子邮件都使用HTTP协议,此时用户代理就是普通的游览器。
用户和邮件服务器间的报文传输都通过HTTP进行,而邮件服务器间的报文传输仍通过SMTP进行。
DNS域名解析协议
因特网主机标识
- 主机名 hostname
- IP地址 IP adress
域名系统(Domain Name System,DNS)
主要提供主机名到IP地址转换的服务
包括
- 一个由分层的DNS服务器实现的分布式数据库
- 一个使得主机能够查询分布式数据库的应用层协议
DNS服务器通常是运行Berkely Internet Name Domain(BIND)软件的UNIX机器
DNS协议基于UDP
端口:53
参见 [RFC 1034],[RFC 1035]
DNS服务
- 解析主机名为IP地址
- 主机别名(host aliasing) 主机可拥有一个 规范主机名 和若干主机别名。DNS提供通过主机别名获得规范主机名及主机IP的服务
- 邮件服务器别名 MX记录技术允许一个机构使用相同(但不同类型)的主机名
- 负载分配 DNS可用于在冗余的服务器间进行负载分配。一个规范主机名可以映射到一个地址集合,当用户请求解析该规范主机名时,DNS返回相应IP地址集合,但是在每次响应中轮换IP地址次序,以将负载分配到不同服务器(进程通常默认使用IP地址集合中的第一个地址)
DNS工作机制
分布式层次数据库
DNS使用了大量服务器,它们以层次方式组织,分布在全世界范围内。
DNS大致分三类
根DNS服务器
因特网上共13个根DNS服务器,标号[A-M]
每台逻辑上的根服务器实际上是一个冗余的服务器网络。
顶级域DNS服务器
负责顶级域名
参见 https://www.iana.org/domains/root/db
权威DNS服务器
因特网上具有公共可访问主机的机构必须提供公共可访问的DNS记录。
机构可以选择实现自己的权威DNS服务器以管理该机构的公共可访问DNS记录,也可以选择由DNS服务提供商管理该机构的公共可访问DNS记录(付服务提供商钱,存服务提供商的权威DNS服务器里)
实践中,权威DNS服务器可能有多层。
本地DNS服务器
严格地说,不属于DNS层次结构
功能上非必须,提供代理,缓存作用
每个ISP(大学,院系,公司,小区)都拥有一台本地DNS服务器。本地DNS服务器通常在地理上临近用户主机。
当主机发出DNS请求时,请求被发往本地DNS服务器,本地DBS服务器起代理作用,它将请求转发到DNS服务器层次结构中。
递归查询 A请求B,B请求C,C返回给B,B返回给A
迭代查询 A请求B,B返回给A,A请求C,C返回给A
实践中,从主机到本地DNS的查询是递归的,从本地DNS到DNS层次结构的查询是迭代的。
DNS缓存
减少延时,减少DNS流量
在一个请求链中,当某DNS服务器接收到一个回答时,它能将该回答缓存在本地存储器中。对一个请求,它首先查看本地缓存,若无,再请求相应DNS服务器。
DNS在一定时间后(常为两天)会丢弃缓存的信息。
DNS记录
资源记录(Resource Record,RR) DNS服务器存储RR。每个DNS回答报文包含若干条RR。
资源记录 RR = (Name,Value,Type,TTL)
TTL 记录生存时间,即记录应当从缓存中移除的时间。
- Type = A Name 为主机名,Value 是该主机名对应的IP地址。 A类RR提供规范主机名到IP地址的映射
- Type = NS Name 为域,Value为知晓如何获得该域中主机IP地址的权威DNS服务器的主机名。NS类RR提供沿查询链路由DNS的信息
- Type = CNAME Name 为主机别名,Value 为规范主机名。CNAME类RR提供别名到规范主机名的映射
- Type = MX Name为邮件服务器别名,Value为规范主机名。MX类RR提供邮件服务器别名到规范主机名的映射。MX记录允许一个机构的邮件服务器和其他服务器使用相同的别名。
对某给定主机名h,h的权威DNS服务器s1,DNS请求链中s1的上游DNS服务器s0,必有:
s1中有一条主机名h的A类记录;
s0中有一条NS记录,该记录对应包含主机名h的域;
s0中有一条A类记录,该记录提供NS记录中Value值所对应的IP地址;
DNS报文
DNS有且仅有查询,回答两种报文,且两者遵照相同的格式,格式如下:
首部区域
12byte
- 标识符字段 16bit 标识一次查询,一个请求/响应对中有相同的标识符。
- 标志字段 若干标志。 查询/回答标志位 指出报文为查询报文亦或回答报文;权威标志位 指示相应服务器是否为所查询主机名的权威服务器; 递归可用标志位 指示该DNS服务器是否支持递归查询;希望递归标志位 指示客户是否希望在服务器没有记录时执行递归查询;
- 问题数字段
- 回答RR数字段
- 权威RR数字段
- 附加RR数字段
问题区域
正则进行的查询信息
- 名字字段 所查询的主机名
- 类型字段 指示所查询的主机名类型 是否为邮件服务器地址(MX记录或A记录)
回答区域
所查询主机名相关的资源记录
若干条RR
权威区域
其他权威服务器的记录
附加区域
其他有帮助的记录
例如所查询的邮件服务器的规范主机名。
向DNS数据库中插入记录
DNS注册登记机构
商业实体,验证待注册域名的唯一性,将待注册域名输入DNS数据库,并为注册服务收起少量费用。
因特网名字和地址分配机构(Internet Corporation for Assigned Names and Numbers,ICANN)
ICANN授权注册登记机构。
http://www.internic.net
向某注册登记机构注册域名h时,需要提供域名h的基本和辅助权威DNS服务器的名字和IP地址。
对所提供的每一个权威DNS服务器的名字和地址,该注册登记机构确保将相应的NS类记录,A类记录输入对应的顶级域DNS服务器。
注册者还需确保域名h的Web服务器A类记录,邮件服务器MX类记录被输入上述权威DNS服务器中。
P2P对等体系结构
对一直开启的基础设施服务器有最小程度的依赖,成对间歇连接的主机(对等方)彼此直接通信。
P2P文件分发
客户/服务器文件分发 服务器向每个客户发送文件的一个副本,服务器负担大,服务器流量消耗大
P2P文件分发 每个客户作为对等方,可重新分发它所有的文件的任何部分。
扩展性 对于变量用户规模,客户/服务器体系的总传输时间有线性的下界,而P2P体系有亚线性的上界。
BitTorrent协议
用于文件分发的流行P2P协议。
洪流(torrent) 参与一个特定文件分发的所有对等体的集合
文件块 洪流中的对等方彼此传输等长的文件块;
追踪器(tracker) 一个对等方加入洪流时,向追踪器注册自己,并周期性地通知追踪器自己仍在洪流中。追踪器维护正在参与洪流的对等方列表。
BitTorrent协议中的追踪器是分布式的,即后文中的DHT。
邻近对等方 洪流中,成功创建TCP连接的一对对等方 。
新对等方A加入洪流时,追踪器(随机地)将洪流的某个子集中所有对等方的ip地址发送给A;
A持有该对等方列表,并试图与该列表上的所有对等方创建并行的TCP连接;
A的邻近对等方不断变动,就邻近对等方可能离开,新邻近对等方可能与A成功创建TCP连接;
A周期性地询问邻近对等方所持有的块列表,并根据列表信息,对A自身当前未拥有的块发出请求;
最稀缺优先技术 对等方A在决定请求哪些块时,首先请求那些A的邻近对等方中副本最少的块,以大致均衡每个块在洪流中的副本数量。
对换算法 对等方A决定相应邻近对等方们的那个请求。A根据当前向它提供数据的邻居的速率,给出优先权。每个时间周期,A根据优先权决定它向哪些邻居传送数据;每过多个时间周期,A随机选出一个邻居并向他发送数据。
以上关于交换的激励机制常被称为一报还一报。这种激励方案能被回避。但事实上,BitTorrent的生态比较成功。
分布式P2P体系数据库,DHT
中心式数据库模型
客户/服务器体系,中心数据库存储键值对,客户可用特定键查询值。
分布式散列表(Distributed Hash Table,DHT)
分布式P2P体系,大量对等方维护一个键值对的表,每个对等方只存储该表的一个小子集。
允许任一对等方用一个特定键查询该分布式数据库。分布式数据库定位拥有该键值对的对等方,并返回该键值对。
允许任一对等方向数据库中插入新键值对。
朴素设计
在所有对等方中随机分布键值对,每个对等方维护一个所有参与对等方的表。查询时向所有其他对等方发送查询。此方案无扩展性,随对等方数量增多,数据库复杂性大大增加。
基于散列的设计
为每个对等方分配一个标识符id,id为n比特整数。
定义将键映射到n比特整数的哈希函数。
中心问题
定义为对等方分配键的规则。
对键key,为id最邻近hash(key)的对等方分配该键值对。
最邻近:键的最邻近后继
插入键值对:确定最邻近该键hash的对等方,而后向该对等方发送查询报文。
如何确定最邻近该键hash的对等方?恰当组织数据库结构
DHT结构
将DHT组织为连通图
连通度过高,每个对等方需维护的邻居数过多
连通度过低,DHT为解析一个查询而需转发的报文次数过多
环形DHT
将对等方组织为环,每个对等方仅与其直接后继和直接前驱联系。
对等方收到一个查询报文时,判断是否应有自己处理该报文,若不是,则将报文转发给后继邻居
捷径DHT
以环形DHT为基础,为每个对等方维护适量的捷径对等方。
对等方收到一个查询报文时,判断是否应有自己处理该报文,若不是,则将报文转发给最邻近该键hash的邻居
研究表明,DHT可被设计为每个对等方的邻居数和每个请求的报文转发次数都在O(logN),N为对等方总数
对等方扰动
P2P体系中,对等方可不加警示地到来或离去。
为处理对等方扰动,每个对等方应存储冗余的邻居信息。如环形DHT中每个对等方可以同时存储第一后继和第二后继。