1 网络应用的基础:进程间通信
进程:主机上运行的程序。
同一主机上运行的进程之间如何通信?
- 进程间通信机制
- 操作系统提供
不同主机上运行的进程间如何通信?
- 消息交换
客户机进程: 发起通信的进程。
服务器进程: 等待通信请求的进程。
采用P2P架构的应用是否存在客户机进程/服务器进程之分?当然存在。
2 套接字:Socket
进程间通信利用socket发送/接收消息实现
类似于寄信
- 发送方将消息送到门外邮箱
- 发送方依赖(门外的)传输基础设施将消息传到接收方所在主机,并送到接收方的门外
- 接收方从门外获取消息
传输基础设施向进程提供API
- 传输协议的选择
- 参数的设置
3 如何寻址进程?
不同主机上的进程间通信,那么每个进程必须拥有标识符。
如何寻址主机? ——IP地址。
Q: 主机有了IP地址后,是否足以定位进程?
A: 否。同一主机上可能同时有多个进程需要通信。
端口号/Port number
- 为主机上每个需要通信的进程分配一个端口号
- HTTP Server: 80
- Mail Server:25
进程的标识符
- IP地址+端口号
可以使用netstat -ano查看当前已经建立TCP或者UDP连接。
4 应用层协议
网络应用需遵循应用层协议。
公开协议
- 由RFC(Request For Comments)定义
- 允许互操作
- HTTP, SMTP, ……
私有协议
- 多数P2P文件共享应用
5 应用层协议的内容
消息的类型(type)
- 请求消息
- 响应消息
消息的语法(syntax)/格式
- 消息中有哪些字段(field)?
- 每个字段如何描述
字段的语义(semantics)
- 字段中信息的含义
规则(rules)
- 进程何时发送/响应消息
- 进程如何发送/响应消息