Computer Networks and Internets

Download Report

Transcript Computer Networks and Internets

Part XV
网络应用软件
第一讲
(客户-服务器 概念,
协议端口的使用, 套接字API)
应用层的功能

传输层及其以下层
–
–

通讯基础
可靠性
应用层
–
抽象



–
2
文件
各种服务
数据库
定义了标识网络上物理的和抽象的资源的符号名称。
2015/7/20
二重性

网络
–
–

由应用程序的决定
–
–
–
–
3
传输位
在应用程序请求下工作
发送什么?
何时发送?
发送至何处?
每个位的含义
2015/7/20
要点
Although an internet system provides a basic
communication service, the protocol software cannot
initiate contact with, or accept contact from, a remote
computer. Instead, two application programs must
participate in any communication: one application
initiates communication and the other accepts it.
虽然因特网提供了基本的通讯服务, 但是协议软件并不能
初始化连接,或是接收来自远程计算机的连接请求。而
是在任何通信中,必须要有两个应用程序共同参与: 一个
发出连接请求,另外一个接受请求.
4
从这个角度看,internet更象一个电话系统。
2015/7/20
两个应用程序如何联系

一个应用程序
–
–

另一个应用程序
–
–

5
首先开始执行
在预先设定的位置等待
随后开始执行
主动联系低一个程序
称为: client-server interaction
2015/7/20
客户-服务器 模式



6
应用于所有的网络应用程序
等待被访问的程序叫做服务器
主动连接的程序叫做客户端
2015/7/20
网络通讯
All network applications use a form of communication
known as the client-server paradigm. A server
application waits passively for contact, while a client
application initiates communication actively.
网络应用所使用的通信形式称为客户-服务器模式。服
务器应用被动地等待连接,而客户端软件则主动地初始
化通讯.
7
2015/7/20
客户端的特征







8
任意应用程序
临时成为客户
也可进行其他的计算
由用户直接触发
在本地机运行
动态连接到服务器端
一次只能连接一个服务器端
2015/7/20
服务器特征








9
有一定功能和权限的程序
专用于提供某种服务
可同时处理多个远程客户端连接
系统启动后自动运行
永远运行
需要高性能的计算机和操作系统支持.
被动等待客户连接
接收任意客户端的请求
2015/7/20
术语

服务器
–

服务器级计算机
–
10
接收网络客户端连接请求的程序
运行服务程序的硬件设备
2015/7/20
数据流

数据流的方向
–
–
–


应用程序协议决定流向
标准通信模型
–
–
11
仅仅从客户端到服务器
仅仅从服务器到客户端
双向流动
客户端发请求
服务端响应
2015/7/20
主要思想
信息可以单向或双向地在客户和服务器之间流动。
虽然许多服务是由客户发送一个或更多请求,然后
服务器返回响应,但是其它的交互也是可能的.
12
2015/7/20
客户端,服务端及通信协议

13
客户端和服务端均为应用程序
2015/7/20
服务端 CPU 的使用情况

事实
–
服务器的操作类似于其他应用程序


–

等待数据在网络间传输不需要 CPU时间
结果
–
14
用CPU 处理
使用I/O 操作
服务器程序只有在需要服务一个请求时才使用 CPU
2015/7/20
多种服务



15
在一台计算机上可以提供多种服务
服务器仅在被请求时才会使用处理器
同时提供多个服务需要功能强大的硬件
2015/7/20
多种服务图例

16

每个服务器可提供一个服务
一个服务器可处理多个客户端
2015/7/20
标识服务



使用协议端口号
每个服务给定唯一的端口号, P
服务器
–
–

客户端
–
–
17
通知 OS 它正在使用端口 P
等待请求
提出请求
提交请求到服务器的端口 P
2015/7/20
关于端口的要点
Transport protocols assign each service a unique port
identifier. A server must specify the identifier when it
begins execution. A client must specify the identifier
when it requests transport protocol software to contact a
server. Protocol software on the server computer uses
the identifier to direct an incoming request to the correct
server.
18
传输协议分配给每个服务一个唯一的端口标识符. 服务器
开始执行的时候必须指明标识符. 客户请求时也要指明标
识符.服务器上的协议软件利用标识符将到来的请求定向到
相应的服务器.
2015/7/20
理论上


19
端口号仅仅是数字
任何一个服务器都可以使用任何一个端口号
2015/7/20
实际上


协议端口号用来做服务的唯一标识符
需要统一的编号方式
–
–

端口号
–
–
20
允许任意的客户端在任意机器上连接到服务器
避免“服务目录帮助”的需要
整个因特网统一
由标准规定
2015/7/20
术语

顺序程序
–
–

并发程序
–
–
–
21
绝大部分程序属于此类
单路控制
多路控制
并行完成
建立较困难
2015/7/20
服务器和并发

顺序服务器
–
–

并发服务器
–
–
22
也被称为循环式服务
每次只能处理一个请求
一次可以处理多个请求
无需等待
2015/7/20
服务器的延迟

并发服务器
–
–

顺序服务器
–
–
23
服务器为每个请求建立新线程来处理
客户端只需等待请求被处理
客户端只能等待前面的请求被应答之后才能得到应
答
如果长请求阻塞了短请求,用户将无法得到应答
2015/7/20
服务器上的并发性
并发执行是服务器的基础.因为并发性允许多个客
户同时得到特定的服务,而不需要等待服务器完
成前面的请求.
在并发服务器上,主服务线程创建一个新的服务线
程来处理每一个客户请求.
24
2015/7/20
协议端口和并发服务器

明显的问题
–
–
–
–
25
一个端口号只能标记一个服务
并发服务器同时有多个服务在运行
客户端和服务器间可能交互
传送到到同一服务器端口的信息必须进一步正确转交
给相应的线程
2015/7/20
协议端口和并发服务器(续)


问题解决方案: 同时利用客户端信息和服务器来
标识数据包
TCP 用四项信息来确认连接
–
–
–
–
26
服务器的IP地址
服务器的协议端口号
客户端的IP地址
客户端的协议端口号
2015/7/20
Demultiplexing in a Concurrent
Server
传输协议给每个客户和服务器分配一个标识符.服
务器计算机上的协议软件通过使用客户、服务器
标识符的合并来选择正确的并发服务器的副本.
27
2015/7/20
多协议均可到达的服务

服务器可能使用
–
–
–

同一种服务可以使用多种不同的传输协议
–
–
28
无连接传输协议 (UDP)
有连接的传输协议 (TCP)
对某个服务同时使用两种通信形式
增加了服务的灵活性
服务器可以同时拥有多个端口号
2015/7/20
复杂的服务

服务器可以
–
–
–
–
29
与客户端的交互持续几小时甚至几天
发送短应答,然后结束交互
使用本地机的 I/O
作为客户端连接其他服务器 (潜在循环问题)
2015/7/20
循环问题举例

时间服务器
–

文件服务器
–
–

30
返还该天当时的时间
允许客户端读写文件
当文件需要时间标识时,可访问时间服务器
假设程序员修改时间服务器,记录文件请求的日
志,会发生什么?
2015/7/20
协议软件的交互




客户端和服务器都使用传输协议
传输协议在OS内部
应用程序在 OS外部
两者之间需要连接
–
31
称为 应用程序接口 (API)
2015/7/20
应用程序接口(API)



操作系统的一部分
允许应用程序使用协议
定义
–
–
32
允许的操作
每次操作的参数
2015/7/20
Socket API

初始设计
–
–

现况
–
–
33
为 BSD UNIX设计
与 TCP/IP 同时使用
成为工业标准
被许多操作系统支持
2015/7/20
套接字和套接字库
在没有提供本地套接字的计算机系统上,套接字
库能够为应用程序提供套接字API。
当应用调用某个套接字过程时,控制转向库例程,
这些库例程调用一个或多个底层操作系统的功能
来实现套接字功能.
34
2015/7/20
Socket





35
一种OS 抽象 (而非硬件的)
动态生成
仅在应用程序运行时启用
用描述符来标识一个套接字
当应用调用底层过程通过网络传输数据时,应用
会把该描述字作为一个参数,这样就无需知道远
程目标的细节。
2015/7/20
描述符Descriptor






36
小的整数
每个激活的 socket 一个
在所有的 socket操作中运用
当 socket 建立后由OS产生
只对拥有该socket的应用程序有意义
在 UNIX 下, 与文件描述符集成
2015/7/20
创建一个 Socket

应用程序调用 socket 函数
desc = socket(protofamily,type,proto);




37
OS 返回 socket 的描述符
描述符有效至应用程序关闭或退出socket
一般: protofamily = PF_INET, 表示TCP/IP协
议族
type = SOCK_STREAM or流
SOCK_DGRAM报文
2015/7/20
Socket 的功能


Socket 具有广泛的普遍性
可以被以下对象使用
–
–
–
–
–

38
客户端
服务器
CO 传输协议
CL 传输协议
用于发送/接收数据
具有大量的操作
2015/7/20
Socket 的操作

关闭
–
–
停止使用 socket
永久性的
close(socket);
39
2015/7/20
Socket 的操作

捆绑
–
–
–
为socket指定端口
为 socket 指定一个本地IP地址
对任意IP地址可以使用 INADDR_ANY
bind(socket,localaddr,addrlen);
40
2015/7/20
通用地址格式
struct sockaddr
{
u_char sa_len;
/*length of address*/
u_char sa_family; /*family of address*/
char sa_data[14];
/*address itself*/
}
41
2015/7/20
TCP/IP 地址形式
struct sockaddr_in
{
u_char sin_len;
/*length of address*/
u_char sin_family;
/*family of address*/
u_short sin_port; /*protocol port number*/
struct in_addr sin_addr;
/*IP address*/
char sin_zero[8]; /*not used(set to zero)*/
}
42
2015/7/20
Socket 操作(续)

监听
–
–

供服务器使用
准备socket来接收到来的连接
listen(socket,queuesize);
接收
–
–
供服务器使用
等待下一次连接并返回一新的 socket
newsock = accept(socket,caddr,caddrlen);
43
2015/7/20
Socket操作(续)

连接
–
–
供客户端使用
完成以下其中任一个
 完成一个 TCP 连接
 为 UDP指明地址
connect(socket,saddr,saddrlen);
44
2015/7/20
Connect函数的两个用途
Connet过程是由客户端调用的,它有两个用
途. 当使用面向连接传输, connect 复杂与指
定的服务器建立一个传输连接. 当使用无连接、
传输时, connect 负责在套接字中记录服务器
地址。这样,客户不需要为每条消息指定目
的地址,就可向同一服务器发送多个消息。
45
2015/7/20
SOCKET操作(续)

Send, sendto,和sndmsg
–
从应用程序传出数据
send(socket,data,length,flags);
sendto(socket,data,length,flags,
destaddr,addrlen);
sendmsg(socket,msgstruct,flags);
46
2015/7/20
Msgstruct的结构
struct msgstruct
{
struct sockaddr *m_saddr;
/*dest address*/
struct datavec *m_dvec; /*message (vector)*/
int mdvlength;
/*size of vector*/
struct access *m_rights;
/*access rights*/
int m_alength;
/*size of access rights*/
}
47
2015/7/20
SOKET操作(续)

Recv, recvfrom, 和recvmsg
–
将接收数据转给应用程序
recv(socket,buffer,length,flags);
recvfrom(socket,buffer,length,flags,
senderaddr,saddrlen);
recvmsg(socket,msgstruct,flags);
48
2015/7/20
SOKET操作(续)

其它的许多附加功能
–
–
49
提供支持和额外服务功能
一些由库实现
2015/7/20
Socket 支持功能举例

Gethostbyname
–
–
把域名镜像成IP地址
举例
www.nuaa.edu.cn

Getprotobyname
–
–
50
根据协议名得到主机代码
参数常取 “tcp” or “udp”
2015/7/20
服务举例

目的
–
–


51
记录访问它的客户的数目
返回可打印的ASCII码信息
面向连接协议
顺序执行 (非并发)
2015/7/20
客户端


打开 TCP 连接到服务器
重复直到文件结束:
–
–


52
接收正文
打印收到的字符
关闭连接
退出
2015/7/20
服务器举例


建立socket并进入被动模式
无限重复:
–
–
–

注意
–
–
53
接收连接,得到新的socket
计数增加并送出文本信息
关闭连接的 socket
主socket一直存在
服务器永不退出
2015/7/20
服务器和客户端的调用


54
客户端用后关闭 socket
服务器永不关闭初始的 socket
2015/7/20
客户端代码

程序参数
–
–
–


细节
克服不同版本Socket的不同
–
–
–

55
主机
协议口
以上均可选
Unix
Microsoft
Use C language #ifdef
客户端代码列表
2015/7/20
客户端代码
56
2015/7/20
57
2015/7/20
58
2015/7/20
59
2015/7/20
60
2015/7/20
服务器代码

程序参数
–
61
协议口

C language #ifdefs for socket variants

服务器代码列表
2015/7/20
62
2015/7/20
63
2015/7/20
64
2015/7/20
65
2015/7/20
流接口

发送方
–
–

TCP
–

把流分割为segments
接收方
–
–
–
–
66
Calls send repeatedly
指出每次调用的字节数
Calls recv repeatedly
每次调用接收一个或多个字节
零字节意味文件结束
接收的长度与发送的长度无关
2015/7/20
总结


应用程序总是采用客户端/服务器模式交互
客户端
–
–
–
任意应用程序
主动开始通信
必需知道服务器的


67
IP 地址
协议端口号
2015/7/20
总结(续)

服务器
–
–
–
–
–
68
专用程序
永远运行不停止
一般提供一个服务
消极等待客户端请求
可以同时处理多个客户端
2015/7/20
总结(续)

Socket API
–
–

Socket
–
–
–
69
标准化的
介于应用程序和协议软件之间
操作系统抽象
动态建立
由客户端和服务器使用
2015/7/20