1) 网络应用层概述
网络结构是符合TCP/IP的技术栈的,它是由应用层->传输层->网络层->链路层->物理层组成
在这一章将会学习,特定网络应用以及协议:
HTTP -> web
SMTP, POP, IMAP -> Email
DNS -> 一种典型的在应用层实现网络核心的协议
P2P应用
还有socket编程,它可以帮助我们实现开发网络应用。
2) 网络应用层基本原理
2.1 网络应用的体系结构
直观的感觉:网络应用与单机应用的区别-网络应用运行在有网络的环境下,一部分的应用在本机,比如用户的浏览器,一部分运行在服务器上,比如百度的搜索应用,两者之间相互交互,完成互联网的应用。
网络应用采用如下的三种体系结构:
1.客户机/服务器结构(Client-Server, C/S)
服务器
7*24小时提供服务
利用大量服务器实现可扩展性--->[并发用户多]
永久性访问地址/域名--->[用户能可靠的找到你]客户机(用户)
与服务器通信,使用服务器提供的服务
间歇性接入网络--->[有需求才使用]
可能使用动态IP地址
不会与其他客户机直接通信--->[并不需要为别人提供服务]web就是一种最典型的c/s结构的应用,个人pc端运行的IE浏览器,向服务器发送http请求,服务器收到请求后,把网页封装好,作为http相应发送会客户机上。
2.点对点结构(Peer-to-peer, P2P)
- 特点
没有永远在线的服务器
任意端系统/节点之间可以直接通讯
节点间歇性接入网络
节点可能改变IP地址 - 优点:高度可伸缩 / 缺点: 难于管理
- BT文件共享服务就是典型的P2P结构
3.混合结构(Hybrid)
能够利用两者的优点,同时规避缺点。
曾经的音乐分享软件:Napster 采用了混合结构
- 文件传输使用P2P结构
- 文件的搜索采用C/S结构——集中式
每个节点向中央服务器登记自己的内容
每个节点向中央服务器提交查询请求, 查找感兴趣的内容
4.扩展思考
微信采用的是混合框架,在语音通话服务时采用p2p(用户和用户直连,减小服务器负担),发送文字消息采用c/s框架(可以接收离线消息)
2.2 网络应用进程通信
1. 进程间的通信
-网络应用中,运行在本机上的进程和运行在服务器上的进程如何通行?也就是说,如何解决不同主机上的不同进程间的网络通信?
我们通过操作系统的知识直到,主机上运行的程序就是一个进程。同一主机上的运行的进程之间如何通信?这是属于操作系统中,进程通信机制的内容。
我们在本小节要解决的是,不同主机上运行的程序如何通信? 采用消息/报文交换!
2. Socket套接字
利用Socket发送/接受消息,来实现不同进程间的通信。
Socket是一种抽象的概念,它是(网络)操作系统给我们提供的一种网络API,是一种网络传输的基础设施(图中浅绿色部分)向进程提供的API,通过它我们可以对底层的传输协议进行选择,并进行参数设置。
观察下图可以类比与寄信,socket就像门一样,门外就是传输基础设施,发消息就是把消息放到门外的信箱,接收消息就是从门外信箱取到门内。
3. 如何寻址进程?
接下来思考,如何保证能能准确的找到不同主机不同进程,底层的传输设施是怎么正确无误的发送消息到它想去的地方?---> 寻址!
第一步,就是寻址主机;通过IP地址
Q: 主机有了IP地址后,是否足以定位进程?
A: 否。同一主机上可能同时有多个进程需要通信,比如同时有QQ,网络音乐等多个网络应用。
为了确保不同主机的进程间的通信,每个进程必须拥有标识符!
端口号/Port number就是他们本机的标识符
为主机上每个需要通信的进程分配一个端口号
HTTP Server: 80
Mail Server:25
所以说进程的标识符:IP地址 + 端口号。
4. 应用层协议
网络应用要遵循应用层协议,协议保证了标准化,促进了互联网的发展。
协议的内容可以概括为:
- 消息的类型(type) [一共有几种消息的类型]
请求消息
响应消息 - 消息的语法(syntax)/格式
消息中有哪些字段(field)?
每个字段如何描述 - 字段的语义(semantics)
字段中信息的含义 - 规则(rules)
进程何时发送/响应消息
进程如何发送/响应消息
5. 小结
- 网络应用不同进程间依靠消息交换进行通信,同时要进行寻址,就要用到IP+端口号
- 消息的具体交换要遵循应用层协议(http1.1/2.0),协议主要是:消息的类型,消息的结构,消息的含义,如何响应消息?