计算机网络
参考书籍:James F.Kurose, Keith W.Ross的计算机网络-自顶向下方法第7版,机械工业出版社
2 应用层
2.1 应用层协议原理
2.1.1 网络应用程序体系结构
应用程序体系结构 (application architecture) 由应用程序研发者设计,规定了如何在各种端系统上组织该应用程序。在选择应用程序体系结构时,应用程序研发者很可能利用现代网络应用程序中所使用的两种主流体系结构之 :客户-服务器体系结构或对等 (P2P)体系结构。
客户-服务器体系结构 (cuent- server architecture):存在一直打开的主机即服务器(如Web服务器),服务器为称为客户的主机提供服务;客户之间不互相通信;服务器具有固定的,公开的IP地址;有大量主机的数据中心用来创建强大的虚拟服务器;
P2P 体系结构 (P2P architecture) :对服务器依赖不高,是对等方到对等方的通信(如下载加速器迅雷),可以不经过服务器;有自扩展性;
2.1.2 进程通信
客户client 和服务器server 进程
进程与计算机网络之间的接口:两个进程互发报文时,将报文从套接字socket(网络接口)发出和接收。应用程序开发者对套接字的运输层的控制包括:选择协议;设置有限参数
进程寻址:主机由IP地址标识,接收进程由端口号port number标识
2.1.3 应用程序使用的运输服务
从可靠性,吞吐量,定时(延迟少于某个数),安全性来选择运算协议
2.1.4 因特网使用的运输服务
运输协议:UDP和TCP
TCP:在握手后建立一个TCP连接,连接双方可以在连接上同时进行收发,报文发送结束后拆除该连接;TCP传输无差错,没有字节丢失;TCP可以进行流量控制和拥塞控制
UDP:无连接,数据传输不可靠,没有拥塞控制等
2.1.5 应用层协议
HTTP是Web的应用层协议,SMTP是电子邮件的应用层协议
2.2 Web 和 HTTP key
2.2.1 HTTP概况
Web浏览器实现了HTTP客户端,Web服务器实现了HTTP服务器
HTTP使用TCP作为支撑运输协议
HTTP是无状态协议:不保存客户的任何信息(但cookie保存)
2.2.2 非持续连接和持续连接
2.2.3 HTTP 报文格式
2.2.4 用户与服务器的交互:cookie
cookie:允许站点对用户进行跟踪(在HTTP响应报文里)
2.2.5 Web 缓存
使用web缓存器请求对象的步骤:
Web缓存器的作用:
2.2.6 条件GET方法
确保缓存器的内容是最新的
2.3 因特网中的电子邮件
2.3.1 SMTP
SMTP基本操作:
SMTP的TCP为连续连接
2.3.2 SMTP与HTTP的对比
区别1:HTTP为拉协议,SMTP为推协议
区别2:SMTP每个报文采用7比特ASCII码形式,HTTP无要求
区别3:HTTP把每个对象单独封装在响应报文中,SMTP把所有对象封装在一个报文中
2.3.3 邮件报文格式
2.3.4 邮件访问协议
通常邮件服务器不在用户主机上,而由总是保持开机的共享邮箱服务器上(由ISP维护),用户在本地运行用户代理程序
用Web收邮件的协议为HTTP
2.4 DNS:因特网的目录服务 key
2.4.1 DNS提供的服务
DNS是应用层协议,运输在UDP之上,被其他应用层协议使用(SMTP, HTTP, FTP等)
FTP是用来文件传输的应用层协议,运输在TCP上
DNS其他服务:主机别名,邮件服务器别名,负载分配(对Web服务器等进行分配)
2.4.2 DNS工作机理
一种不适用的设计:集中式设计:全世界只使用一个DNS服务器
问题:
所以实际使用了分布式设计
因为存在DNS缓存,当DNS服务器存储了主机需要查询的IP地址时,可以直接提供IP地址而不是权威服务器,所以迭代查询一般比递归查询高效
2.4.3 DNS 记录和报文
例:一个权威服务器有地址:
- 212.212.212.7.www1.a.com 对应资源文件为Type=A和Type=CNAME
- 212.212.212.3.SMTP.b.com 对应的资源文件为Type=A和Type=MX
DNS报文
DNS数据库插入记录
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/4f020b56f96040a9a7d9e0afa27fb759.png
2.5 P2P文件分发
P2P体系结构 (Peer to peer对等方) 具有扩展性 (对比客户-服务器体系结构)
客户-服务器体系结构
P2P体系结构
BitTorrent
2.6 视频流和内容分发网
2.6.1 HTTP流和DASH
2.6.2 内容分发网
2.7 套接字编程:生成网络应用(socket)
java语言
2.7.1 UDP套接字编程
2.7.2 TCP套接字编程