计算机网络(3)-应用层(part2)
主要为上一次没有写道的应用层应用,包括Email、DNS、P2P,以及Socket编程。
Email应用
Email应用的构成
邮件客户端:读、写Email消息
邮件服务器:提供邮箱,存储发给该用户的Email;消息队列,存储等待发送的Email
SMTP协议
邮件服务器之间传递消息所使用的协议。
使用TCP协议,端口25。
三个阶段:握手、消息的传输、关闭
命令/响应交互模式:
命令(command):ASCII文本
响应(response):状态代码和语句

特点:使用持久性连接、要求消息必须由7位ASCII码构成、利用CRLF.CRLF确定消息的结束。
HTTP为拉式,SMTP为推式。都使用命令/响应交互模式,命令和状态码都为ASCII码,HTTP将每个对象封装在独立的响应消息中,SMTP将多个对象在由多个部分构成的消息中发送。
Email消息格式
头部行(header):To,From,Subject (与SMTP命令不同)
消息体:消息本身,只能是ASCII字符
MIME(多媒体邮件扩展):通过在邮件头部增加额外的行以声明MIME的内容类型

将多媒体数据按照规定的编码方式编码为ASCII码放到消息体中。
邮件访问协议

POP(Post Office Protocol)协议:
认证和下载,无状态协议
IMAP(Internet Mail Access Protocol):
更多的功能,能够操纵服务器上存储的信息,允许用户利用文件夹组织消息,支持跨会话的用户状态
HTTP:
163,QQ等
DNS(Domain Name System)
目的:解决互联网上的主机/路由器识别问题,域名和IP地址之间的映射。
DNS:由多层命名服务器构成的分布式数据库,完成名字的解析。
功能:域名向IP地址的翻译、主机别名、邮件服务器别名、负载均衡(提供多个映射,轮流访问)。
集中式DNS的缺点:单点失败问题、流量问题、距离问题、维护性问题。
DNS服务器结构


根域名服务器:本地域名服务器无法解析时,访问根域名服务器
顶级域名服务器(TLD):负责com,org,net等顶级域名和国家顶级域名
权威域名服务区:组织的域名解析服务器,提供组织内部服务器的解析服务
本地域名解析服务器:不严格属于层次体系,每一个ISP有一个本地域名服务器,当主机进行DNS查询时,将查询发送出去,功能类似于proxy
查询时采用迭代查询或递归查询
迭代查询:

递归查询:

DNS记录缓存与更新
只要域名解析服务器获得域名——IP映射,就缓存信息。
DNS记录和消息格式
DNS记录
资源记录(RR,resource records):name,value,type,ttl
Type=A:(主机到IP的映射) name:主机域名 value:IP地址
Type=NS:(域到解析服务器的映射)name:域 Value:该域权威域名解析服务器的主机域名
Type=CNAME (别名)name:别名 value:真实域名
Type=MX (用于邮件服务)value是与name相对应的邮件服务器
DNS协议
查询(query)/回复(reply)协议,消息格式相同

P2P应用
特点:没有服务器和客户的概念,任意端系统之间直接通信,结点间断性接入,IP地址可能改变。
BitTorrnt
torrent:交换同一个文件快的结点组
tracker:跟踪参与torrent的结点
文件被划分为256KB的chunk,结点加入torrent后,向tracker注册以获得节点清单,与某些邻居建立连接,下载的同时,结点需要向其他结点上传chunk,一旦结点获取完整文件,可以离开或留下。
任意时刻,不同的结点持有不同chunk集合,结点定期查询每个邻居持有的chunk列表,结点优先请求稀缺的chunk。同时,有“一报还一报”的机制激励结点向其他结点上传。
索引技术
P2P系统的索引:信息到结点位置(IP+端口号)的映射。
文件共享中,利用索引动态跟踪结点共享的文件的位置;在即时消息软件中,索引负责将用户名映射到位置。
集中式索引
拥有一个中央服务器,任意一个结点加入时,需要通知中央服务器,查找时需要请求中央服务器获取信息。
缺点:单点失效问题(类比集中式DNS的缺点)、性能瓶颈、版权问题。
洪泛式查询
完全分布式架构,每个结点对它共享的文件进行索引,且只对它共享的文件进行索引。
结点X与Y之间如果有TCP连接,就构成图中的一个边,所有的结点和边形成覆盖网络。查询消息通过已有的TCP连接发送。收到查询的结点会继续转发查询消息,如果查询命中,则利用反向路径发回查询结点。这样的查询方式称为洪泛式查询。

洪泛式查询会导致消息泛滥,引起网络拥堵。
层次式覆盖网络
介于集中式索引和洪泛查询之间。每个结点或者是一个超级结点,或者被分配一个超级结点。结点与超级结点之间维持TCP连接,某些超级结点对之间维持TCP连接。超级结点负责跟踪子节点的内容。

Socket编程
网络程序可能的设计方式:
直接网卡编程:硬件相关
基于Packet Driver编程:屏蔽网卡细节
基于NDIS网络编程:Windows
基于一些函数库
NetBIOS编程:Windows
socket编程:在应用层和传输层之间
Web/RPC/中间件编程:应用层之上
Socket对外通过IP地址和端口号来标识通信端点,在操作系统内通过套接字描述符管理。类似于文件的抽象,当应用进程创建套接字时,操作系统分配一个数据结构存储套接字的相关信息,同时返回套接字描述符,指向对于的Socket数据结构。
Original author: 马旭
Original link: https://bhmaxu.github.io/2020/01/28/计算机网络(3)-应用层(part2)/
Copyright Notice: Please indicate the source of the reprint (must retain the author's signature and link)