1、第第3章:章:互联网应用模式和互联网应用模式和API第第3.1节、客户节、客户服务器工作模式服务器工作模式第第3.2节、应用程序接口节、应用程序接口API1第第3.1节、客户节、客户服务器工作模式服务器工作模式3.1.1 C/S3.1.1 C/S的基本概念的基本概念3.1.2 C/S3.1.2 C/S关系与软件特点关系与软件特点3.1.3 C/S3.1.3 C/S工作过程与并发工作过程与并发3.1.4 3.1.4 协议端口号协议端口号谢希仁教材谢希仁教材1.6 节节2C/S模式部分的重点与难点模式部分的重点与难点1 1、C/SC/S模式的基本概念模式的基本概念2 2、C/SC/S的工作过程,以
2、及的工作过程,以及C/SC/S软件的各自特点软件的各自特点3 3、*协议端口号及应用协议端口号及应用4 4、插口地址概念、插口地址概念重点理解:重点理解:主要了解:主要了解:1 1、熟知的协议端口号与使用、熟知的协议端口号与使用2 2、互联网、互联网C/SC/S工作模式与工作模式与TCP/IPTCP/IP的关系的关系3 3、服务器并发处理、服务器并发处理3相互作用的客户相互作用的客户-服务器服务器(模型模型 在在TCP/IP互联网中,进程间相互访问的模式主要是互联网中,进程间相互访问的模式主要是客客户户服务器交互模式服务器交互模式客户和服务器分别是两个应用程序(客户和服务器分别是两个应用程序(
3、进程进程)。客户向服)。客户向服务器发出服务请求,服务器做出响应。务器发出服务请求,服务器做出响应。服务器服务器客户客户互联网互联网进程(进程(Process)就是运行中的程序。解决具体应用问题的逻辑处就是运行中的程序。解决具体应用问题的逻辑处理和通信进程总称为理和通信进程总称为“应用进程应用进程”。4为什么选择客户为什么选择客户-服务器模式服务器模式第一个原因:第一个原因:互联网中资源、运算能力和信息不均等的现实互联网中资源、运算能力和信息不均等的现实。资源、运算能力不均资源、运算能力不均:小到一个物理网络,往往是某些主机拥:小到一个物理网络,往往是某些主机拥有大容量的外存,某些主机只有很少
4、外存或没有外存,有有大容量的外存,某些主机只有很少外存或没有外存,有些主机拥有打印机,有些主机没有;大到整个互联网,少些主机拥有打印机,有些主机没有;大到整个互联网,少数网点拥有超速运算能力,而大量网点由数网点拥有超速运算能力,而大量网点由PC机构成机构成.信息分布不均信息分布不均:比如名字信息、地址信息等。这些信息往往以:比如名字信息、地址信息等。这些信息往往以数据库形式存在于少数特权主机当中,供局部或全局访问。数据库形式存在于少数特权主机当中,供局部或全局访问。这些信息一般具有公用性,为了节约整个网络的资源,没这些信息一般具有公用性,为了节约整个网络的资源,没有必要在每一台机器上都维持一个
5、拷贝。有必要在每一台机器上都维持一个拷贝。不均等现象不可避免,而客户不均等现象不可避免,而客户-服务器模式体现了这种现象并很服务器模式体现了这种现象并很好地适应了这种现象。好地适应了这种现象。5 第二个原因:是技术性的第二个原因:是技术性的。互联网进程通信与单机进程通信不同:互联网通互联网进程通信与单机进程通信不同:互联网通信完全是异步的,无法知道哪个主机会在何时发信完全是异步的,无法知道哪个主机会在何时发起通信。起通信。因此,需要一种机制,为准备通信的进程之间建因此,需要一种机制,为准备通信的进程之间建立联系,为两者的数据交换提供同步。立联系,为两者的数据交换提供同步。C/S模式是客观现实与
6、技术实现相结合的产物!模式是客观现实与技术实现相结合的产物!首先,什么是早期单机应用软件的工作方式首先,什么是早期单机应用软件的工作方式和早期单机应用软件一般只和本机资源交互,包括通信串和早期单机应用软件一般只和本机资源交互,包括通信串/并口。当并口。当出现网络应用后,应用软件需要通过网络访问资源、交互信息,寻出现网络应用后,应用软件需要通过网络访问资源、交互信息,寻找一种基于网络的信息找一种基于网络的信息交互交互/计算分布模式计算分布模式。6振铃机制振铃机制收收/发协发协调调 电话通信的呼叫模式:主叫发起通信、被叫电话通信的呼叫模式:主叫发起通信、被叫振铃和提机、开始通信振铃和提机、开始通信
7、。振铃机制实现依赖振铃机制实现依赖信令系统控制处理,协调双方通信(收信令系统控制处理,协调双方通信(收/发)发)矛盾。矛盾。在网络环境下,许多问题的解决往往是通过位于在网络环境下,许多问题的解决往往是通过位于不同不同主机中的多个进程之间的通信和协同工作主机中的多个进程之间的通信和协同工作来完成的。来完成的。7会话(呼叫)系统会话(呼叫)系统会话会话模式。模式。传统传统TCP/IP网络应用程序使用客户网络应用程序使用客户/服务器模服务器模式,式,会话模式,如会话模式,如IP电话、视频会议、多方游戏等。电话、视频会议、多方游戏等。在客户在客户-服务器模式中,服务器模式中,每次通信均由客户进程发起,
8、每次通信均由客户进程发起,服务器进程从开机起就处于等待状态。服务器进程从开机起就处于等待状态。这可保证服务这可保证服务器随时对客户请求做出响应器随时对客户请求做出响应8 C/S模式是约定客户请求(发起)通信、服务模式是约定客户请求(发起)通信、服务器响应通信(提供特定的服务),基本可以理器响应通信(提供特定的服务),基本可以理解为请求解为请求/应答的分布计算(会话)模式应答的分布计算(会话)模式。互联网将网络软件分为客户互联网将网络软件分为客户、服务器、服务器,9客户软件的特点客户软件的特点 在进行通信时临时成为客户,但它也可在本地在进行通信时临时成为客户,但它也可在本地进行其他的计算,提供用
9、户端基本应用功能框进行其他的计算,提供用户端基本应用功能框架。架。被用户调用,在用户本地计算机上运行,在需被用户调用,在用户本地计算机上运行,在需要时主动向远地服务器发起通信。要时主动向远地服务器发起通信。可与多个服务器进行通信。可与多个服务器进行通信。通常不需要特殊的硬件和很复杂的操作系统。通常不需要特殊的硬件和很复杂的操作系统。10服务器软件的特点服务器软件的特点 专门用来提供某种服务的程序,可同时处理多个远地专门用来提供某种服务的程序,可同时处理多个远地或本地客户的请求。或本地客户的请求。在共享计算机上运行。当系统启动时即自动调用并一在共享计算机上运行。当系统启动时即自动调用并一直不断地
10、运行着。直不断地运行着。被动等待并接受来自多个客户的通信请求。被动等待并接受来自多个客户的通信请求。一般需要强大的硬件和高级的操作系统支持。一般需要强大的硬件和高级的操作系统支持。11两个术语两个术语在在C/S模式中:模式中:服务器服务器:被动等待通信的:被动等待通信的程序程序。不是计算机不是计算机。服务器级计算机服务器级计算机:运行服务器软件的功能强大的:运行服务器软件的功能强大的计计算机算机。硬件厂商把具有高速硬件厂商把具有高速CPU、大容量存储器、功能强大的操作系统的计算机、大容量存储器、功能强大的操作系统的计算机称为服务器,其实应该称为服务器级计算机。称为服务器,其实应该称为服务器级计
11、算机。12数据链路层数据链路层物理层物理层运输层运输层网络层网络层数据链路层数据链路层物理层物理层运输层运输层网络层网络层 发起连接建立请求发起连接建立请求应用层应用层应用层应用层客客户户服务器服务器因特网因特网 接受连接接受请求接受连接接受请求计算机计算机A计算机计算机B1 C/S 工作建立过程工作建立过程请求、应答、数据交互请求、应答、数据交互,TCP/IP系统支持。系统支持。C/SC/S都需要都需要TCP/IPTCP/IP系统支持系统支持C/S 工作过程和并发工作过程和并发13C/S模式的传输机制模式的传输机制 面向连接传输面向连接传输:使用面向连接的传输协议时,两个应用:使用面向连接的
12、传输协议时,两个应用必须首先建立一个连接,然后在该连接上发送数据。必须首先建立一个连接,然后在该连接上发送数据。无连接传输无连接传输:应用可以利用无连接接口在任何时间向任:应用可以利用无连接接口在任何时间向任何目的发送消息。何目的发送消息。客户和服务器在通信时,既可以使用面向连接传输协议,客户和服务器在通信时,既可以使用面向连接传输协议,又可以使用无连接传输协议又可以使用无连接传输协议。当使用面向连接传输时,。当使用面向连接传输时,客户需要首先形成一个到特定服务器的连接,该连接在客户需要首先形成一个到特定服务器的连接,该连接在客户发送请求和接收响应的过程中保持不变。当客户完客户发送请求和接收响
13、应的过程中保持不变。当客户完成对服务的使用时,必须关闭这一连接。成对服务的使用时,必须关闭这一连接。14一台计算机上可以运行多种服务器:一台计算机上可以运行多种服务器:1.充分利用硬件资源充分利用硬件资源。硬件可以被多种服务所共享。硬件可以被多种服务所共享。2.减少系统管理负载减少系统管理负载。因为这种情况可以减少被管理。因为这种情况可以减少被管理3.的计算机系统的数量。的计算机系统的数量。3.如果对服务的需求比较低,那么把服务器合并到一台如果对服务的需求比较低,那么把服务器合并到一台4.计算机上计算机上能够显著地减少开销能够显著地减少开销,而且,而且并不会明显地并不会明显地降低性能降低性能。
14、152 服务器多重服务服务器多重服务:数据链路层物理层运输层网络层数据链路层物理层运输层网络层数据链路层物理层运输层网络层应用层应用层应用层计算机A计算机B计算机C客户1服务器1服务器2客户2因特网16并发性并发性 客户客户-服务器交互模型的基础服务器交互模型的基础 并发服务器可以同时为多个客户提供服务,并不需要每个并发服务器可以同时为多个客户提供服务,并不需要每个客户等待前一个客户的请求完成客户等待前一个客户的请求完成 大多数并发服务器都是动态操作的。即只有当请求到达时,大多数并发服务器都是动态操作的。即只有当请求到达时,服务器才会动态地为到来的请求创建一个新的线程。服务器才会动态地为到来的
15、请求创建一个新的线程。服务器程序由两部分组成:服务器程序由两部分组成:主线程和服务线程。主线程和服务线程。主线程主线程:负责接收请求并为请求创建一个服务线程来处理请求。并使:负责接收请求并为请求创建一个服务线程来处理请求。并使服务器保持活跃状态,主线程在创建处理请求的服务线程之后,会等服务器保持活跃状态,主线程在创建处理请求的服务线程之后,会等待另一个请求的到来。待另一个请求的到来。服务线程服务线程:负责处理每个请求,然后终止。:负责处理每个请求,然后终止。如果如果N个客户同时请求一台计算机上的给定服务,则会有个客户同时请求一台计算机上的给定服务,则会有N+1个线程个线程提供服务。主线程等待额
16、外的请求,提供服务。主线程等待额外的请求,N个服务线程与每个客户进行交个服务线程与每个客户进行交互互在互联网中,客户发起请求完全是随机的,很有可能出现多个请求同时到达服务器的情况。17数据链路层物理层运输层网络层数据链路层物理层运输层网络层数据链路层物理层运输层网络层应用层应用层应用层计算机A计算机B计算机C客户1因特网因特网客户23 服务器并发:服务器并发:服务器服务器1*副本副本一个服务器同时响应多个请求,即服务器并发执行是基本一个服务器同时响应多个请求,即服务器并发执行是基本的,而不是逐个响应。一个服务器软件包括:接收请求、的,而不是逐个响应。一个服务器软件包括:接收请求、处理单个请求和
17、生成新线程三部分;当请求到达时,服务处理单个请求和生成新线程三部分;当请求到达时,服务器将它交给一个控制线程(副本),和已有线程并发。器将它交给一个控制线程(副本),和已有线程并发。服务器服务器118复杂的复杂的C/S交互:交互:实际大型网络应用实际大型网络应用S软件系统中,软件系统中,C/S的交互可能是复的交互可能是复杂的过程。杂的过程。1、客户应用不限制访问一个服务器,客户一个应用可、客户应用不限制访问一个服务器,客户一个应用可以成为多个不同服务器(可能不同计算机上)的客户,以成为多个不同服务器(可能不同计算机上)的客户,要处理多个服务器通信。要处理多个服务器通信。2、提供某种服务的服务器
18、同时能成为另一个服务的客、提供某种服务的服务器同时能成为另一个服务的客户,如文件服务器在进行文件服务处理时需要记录时间,户,如文件服务器在进行文件服务处理时需要记录时间,可能又要访问时间服务器。可能又要访问时间服务器。3、可能发生服务器的循环依懒,在两个服务器间,或、可能发生服务器的循环依懒,在两个服务器间,或多服务器之间的依懒环。多服务器之间的依懒环。19数据链路层数据链路层物理层物理层运输层运输层网络层网络层数据链路层数据链路层物理层物理层运输层运输层网络层网络层N N个服务器个服务器因特网因特网计算机计算机A计算机计算机BN N个客个客户户协议协议端口号端口号C与与S之间怎样准确之间怎样
19、准确识别特定服务?识别特定服务?20一台运行多种服务器的计算机上,每种服务一台运行多种服务器的计算机上,每种服务器如何识别发给自己的请求?器如何识别发给自己的请求?解决方法解决方法:传输协议为每种服务分配一个惟一的传输协议为每种服务分配一个惟一的标识符标识符,服务器和,服务器和客户必须使用这一标识符客户必须使用这一标识符。服务器服务器开始运行时,它向开始运行时,它向本地协议软件注册本地协议软件注册它使用的服务标识它使用的服务标识符。客户访问远程服务器时,需要符。客户访问远程服务器时,需要指定指定对应的服务标识符。对应的服务标识符。客户计算机客户计算机上的传输协议软件在发送请求时,向服务器计算机
20、上的传输协议软件在发送请求时,向服务器计算机发送发送这一标识符,服务器计算机上的传输协议软件使用这一标这一标识符,服务器计算机上的传输协议软件使用这一标识符决定处理这一请求的服务器程序。识符决定处理这一请求的服务器程序。21端口端口 端口就是运输层服务访问点端口就是运输层服务访问点 TSAP 端口的端口的作用作用就是让应用层的各种应用进程都能将就是让应用层的各种应用进程都能将其数据通过端口向下交付给运输层,以及让运输其数据通过端口向下交付给运输层,以及让运输层知道应当将其报文段中的数据向上通过端口交层知道应当将其报文段中的数据向上通过端口交付给应用层相应的进程。付给应用层相应的进程。从这个意义
21、上讲,从这个意义上讲,端口是用来标志应用层的进程端口是用来标志应用层的进程。服务器通过它明确所提供的服务服务器通过它明确所提供的服务22FTPTELNETSMTPDNSTFTPSNMP TCP UDP2123255369161应用层传输层端口层23102823.源端口目的端口TELNETB目的端口号=23把包发送到我的TELNET应用中AB24端口端口 端口用一个端口用一个 16 bit 端口号进行标志。端口号进行标志。端口号只具有本地意义,即端口号只是端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程为了标志本计算机应用层中的各进程。在因特网中不同计算机的相同端口号是在因特网
22、中不同计算机的相同端口号是没有联系的。没有联系的。25两类端口两类端口 一类是一类是熟知端口熟知端口,其数值一般为,其数值一般为 01023。当一种新的应用程序出现时,必须为它指派当一种新的应用程序出现时,必须为它指派一个熟知端口。一个熟知端口。另一类则是另一类则是一般端口一般端口,用来随时分配给请求,用来随时分配给请求通信的客户进程。通信的客户进程。26TCP/IP定义的应用程序熟知端口:定义的应用程序熟知端口:FTP:21,Telnet:23,SMTP:25,DNS:53,TFTP:69,HTTP:80,SNMP:161,协议协议端口号定义端口号定义而一般端口,是可以由系统开发人员随时定而
23、一般端口,是可以由系统开发人员随时定义分配的。义分配的。27名称名称TCP端口号端口号TCP端口号端口号描述描述EchoDiscardDaytimeChargenTime7913193779131937服务器返回客户发送的所有内容服务器返回客户发送的所有内容服务器丢弃客户发送的所有内容服务器丢弃客户发送的所有内容服务器以可读形式返回日期与时间服务器以可读形式返回日期与时间当客户发一个数据报时,服务器发送一连续字符流,当客户发一个数据报时,服务器发送一连续字符流,直至客户中断连接;直至客户中断连接;UDP发一随机长度的数据报发一随机长度的数据报从服务器返回一个从服务器返回一个32bit数,表示数
24、,表示UTC时间时间1900.1.1午夜至今的秒数午夜至今的秒数通常通常TCP/IP的主要端口号:的主要端口号:1225之间,之间,端口号端口号2561023由由Unix系统占用,系统占用,端口号端口号10245000作为临时端口分配,作为临时端口分配,5000以上(作为其他服务器)不常出现。以上(作为其他服务器)不常出现。标准简单服务标准简单服务端口号端口号28为什么服务器端口号一定是唯一定义的,而客户端的为什么服务器端口号一定是唯一定义的,而客户端的端口号可以是按定义的,也可以临时自指定的,只具端口号可以是按定义的,也可以临时自指定的,只具有本地意义?有本地意义?一计算机可以有多个应用进程
25、,通过不同的端口号一计算机可以有多个应用进程,通过不同的端口号(源不同(源不同/目的相同,源同目的相同,源同/目的不同,均不同),同目的不同,均不同),同时进行多任务处理,此时时进行多任务处理,此时TCP/UDP、IP完成复用与完成复用与分用。分用。协议端口号解决是协议端口号解决是C/S交互过程中服务器定交互过程中服务器定位问题,使所有客户都能正确找到需要的服位问题,使所有客户都能正确找到需要的服务,所以服务器端口一定唯一确定的,而客务,所以服务器端口一定唯一确定的,而客户源端口号只对客户自己有效。户源端口号只对客户自己有效。29实际通过实际通过TCP应用,除端口外,还必须有应用,除端口外,还
26、必须有IP地址。地址。TCP连接的两个端点(端与端通信),是由端点地址连接的两个端点(端与端通信),是由端点地址(IP地址,端口号)确定,地址,端口号)确定,(IP地址,端口号)也被地址,端口号)也被称为插口(称为插口(Socket),或者端地址(),或者端地址(Endpoint Address)。)。实际通过实际通过TCP通信,除端口外,为什么必须有通信,除端口外,为什么必须有IP地址?地址?30TCP/UDP协议插口协议插口0 4 10 16 31 源端口源端口 目的端口目的端口 TCP/UDP头部头部 数据数据其它字段 TCP/UDP头部头部 数据数据 IP头部头部32bit源地址源地址
27、 32bit目的地址目的地址其它字段其它字段从从IP包结构看,网络应用进程通信需要端地址(包结构看,网络应用进程通信需要端地址(IP地址,端口号)地址,端口号)31第第3.1 3.1 总结总结1、什么是、什么是C/S工作模式工作模式?2、网络应用为什么需要、网络应用为什么需要C/S模式模式?3、为什么通常服务器软件复杂为什么通常服务器软件复杂?4、应用进程通信端口地址,为什么还要、应用进程通信端口地址,为什么还要IP地地址?是否需要物理网地址?址?是否需要物理网地址?32第第3.13.1章章 作业作业1、客户软件和服务器软件主要特点。、客户软件和服务器软件主要特点。2、一个服务器软件通常需要包
28、括哪些主要的功能部分。一个服务器软件通常需要包括哪些主要的功能部分。3、为什么通常服务器端口号是唯一定义的,而客户端为什么通常服务器端口号是唯一定义的,而客户端的端口号可以临时指定?的端口号可以临时指定?33第第3.2节、应用程序接口节、应用程序接口API3.2.1 3.2.1 应用程序接口概述应用程序接口概述3.2.2 3.2.2 套接字套接字APIAPI基本结构基本结构3.2.3 3.2.3 实现套接字实现套接字APIAPI的过程的过程3.2.4 3.2.4 套接字套接字APIAPI的其它问题的其它问题3.2.5 3.2.5 套接字套接字APIAPI实现实例实现实例34第第3.2节:重点与
29、难点节:重点与难点1 1、应用编程接口的概念与重要性、应用编程接口的概念与重要性2 2、套接字、套接字APIAPI的特点的特点/函数函数/参数参数3 3、SocketSocket套接字套接字APIAPI实现的基本过程实现的基本过程重点理解:重点理解:主要了解:主要了解:1 1、套接字套接字APIAPI主要过程的作用主要过程的作用2 2、套接字继承与服务器并发、套接字继承与服务器并发353.2.1 应用程序接口概述应用程序接口概述互联网应用程序怎样和互联网应用程序怎样和TCP/IPTCP/IP协议通信接口?协议通信接口?即即C C、S S编程怎样使用编程怎样使用TCP/IPTCP/IP协议进行通
30、信与数协议进行通信与数据交互。据交互。传统通过网络(传统通过网络(DDNDDN、FRFR、ATMATM)的交互,使用)的交互,使用计算机串行接口或计算机串行接口或LANLAN仿真,通信网把数据传仿真,通信网把数据传递到对方计算机,其余需要计算机应用处理。递到对方计算机,其余需要计算机应用处理。3.2.1.1 网络编程接口发展网络编程接口发展背景背景存在问题:存在问题:1、计算机应用和网络两层皮;、计算机应用和网络两层皮;2、计算机应用必须和底层硬件(接口)打交道;计算机应用必须和底层硬件(接口)打交道;严重阻碍网络应用发展。严重阻碍网络应用发展。36数据链路层数据链路层物理层物理层运输层运输层
31、网络层网络层数据链路层数据链路层物理层物理层运输层运输层网络层网络层N N个服务器个服务器因特网因特网计算机计算机A计算机计算机BN N个客个客户户应用进程通过端地址建立可靠双工通信连接和应用进程通过端地址建立可靠双工通信连接和收发数据,应用程序或编程人员怎样处理各种收发数据,应用程序或编程人员怎样处理各种协议(协议(TCP/IP/IGMPTCP/IP/IGMP)的具体报格式?)的具体报格式?需要逐一包文内容填写?需要逐一包文内容填写?37实际互联网应用程序只需要通过实际互联网应用程序只需要通过API完成通信和数据完成通信和数据交互的调用,从而不需要处理网络的细节,是网络交互的调用,从而不需要
32、处理网络的细节,是网络应用发展的一大进步。应用发展的一大进步。API体现了现代网络又一个体现了现代网络又一个重要思想重要思想应用程序与应用程序与网络网络“一体一体”又又“分离分离”。一体一体:把网络通信对上抽象:把网络通信对上抽象API成为计算机体系组成成为计算机体系组成部分,网络部分,网络API定义与设计已成为所有处理网络应用定义与设计已成为所有处理网络应用与网络通信底层接口的实际方法,在与网络通信底层接口的实际方法,在3G/4G,NGN网网络中最大标准组就是解决其络中最大标准组就是解决其API的问题。的问题。分离分离:实现高效、简捷:实现高效、简捷API,就意味着实现应用与网,就意味着实现
33、应用与网络通信底层络通信底层“分离分离”,就可不关心通信实现的细节,就可不关心通信实现的细节,大大降低了网络应用开发难度,促进应用发展。大大降低了网络应用开发难度,促进应用发展。38应用程序接口应用程序接口APIAPI是应用程序通过是应用程序通过TCP/IPTCP/IP协议软协议软件进行通信交互的接口,它是一组定义的操作件进行通信交互的接口,它是一组定义的操作(非硬件),(非硬件),APIAPI决定了网络应用所能达到功能决定了网络应用所能达到功能和这些功能编程开发的难度和这些功能编程开发的难度。应用程序接口应用程序接口APIAPI是一般是一般由操作系统(或编由操作系统(或编程系统)程系统)提供
34、,是由应用程序调用的一个过提供,是由应用程序调用的一个过程及过程所需的参数。通常一个程及过程所需的参数。通常一个APIAPI基本操基本操作是独立过程,如作是独立过程,如APIAPI一个过程完成建立通一个过程完成建立通信,另一个过程完成数据接收。信,另一个过程完成数据接收。应用程序接口应用程序接口API概念概念API:Application Program Interface,应用应用程序接口或应用编程接口程序接口或应用编程接口39 通信协议只是规定协议应该提供的操作,通信协议只是规定协议应该提供的操作,并不指定应用程序与协议进行交互时的并不指定应用程序与协议进行交互时的API。协议协议端口与端
35、口与API接口有什么区别?接口有什么区别?协议端口是服务器软件的标识,协议端口是服务器软件的标识,16位整数;位整数;API是一个执行过程。是一个执行过程。40套接字套接字API(Socket API)互联网互联网APIAPI主要有两类:主要有两类:1、伯克利版、伯克利版API(Socket API,称为套接字,称为套接字API),从),从BSD UnixUnix版发展而来。版发展而来。2、A&AT版版TLI 运输层接口运输层接口 Transport Lay Interface尽管互联网允许尽管互联网允许OSOS系统选择系统选择APIAPI,但目前,但目前WindowsWindows(WinS
36、ocWinSoc)、)、UnixUnix、LinuxLinux主流主流OSOS系系统广泛接受统广泛接受套接字套接字API,所以成为事实上标准。,所以成为事实上标准。套接字套接字API是操作系统的一个组成部分是操作系统的一个组成部分。41Socket API:应用程序与应用程序与TCP/IP协议之间的接口,它协议之间的接口,它作作为一种通用的通信编程接口而设计。为一种通用的通信编程接口而设计。42Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的
37、接口就是全部,让Socket去组织数据,以符合指定的协议。43套接字套接字API的基本结构的基本结构套接字套接字API是是Unix操作系统的发展而来的,套操作系统的发展而来的,套接字接字API网络通信描述基本保持网络通信描述基本保持Unix对设备、对设备、文件的操作风格。如文件的操作风格。如 Unix文件操作采用文件操作采用“openreadwriteclose”过程模式,首先过程模式,首先产生一个操作的描述符,然后每个过程由函数产生一个操作的描述符,然后每个过程由函数+参数具体组成。参数具体组成。套接字套接字API同样用描述符的方法,在同样用描述符的方法,在使用通信使用通信协议前必须申请操作
38、系统生成一个套接字协议前必须申请操作系统生成一个套接字,系,系统返回一个小整型数(如统返回一个小整型数(如3、5)作为描述符来)作为描述符来识别这个套接字,以后通信过程中这个套接字识别这个套接字,以后通信过程中这个套接字作为参数,而不必每次传输时指明细节。作为参数,而不必每次传输时指明细节。44API过程中应用程序选择的端口、通信地址、过程中应用程序选择的端口、通信地址、客户或服务器、使用协议等怎么表达呢?客户或服务器、使用协议等怎么表达呢?套接字套接字API通过定义多个函数(通过定义多个函数(而不是单个,而不是单个,为什么?为什么?),来确定参数和选项;既当创建套),来确定参数和选项;既当创
39、建套接字描述符后,调用多个函数过程说明套接字接字描述符后,调用多个函数过程说明套接字使用的具体细节。使用的具体细节。总结:套接字总结:套接字API的使用是通过首先创建套接的使用是通过首先创建套接字(返回整型描述符),然后调用多个包含具字(返回整型描述符),然后调用多个包含具体参数和选项的函数过程,完成应用程序和协体参数和选项的函数过程,完成应用程序和协议通信的接口。议通信的接口。为什么是多个而不是单个,单个绝对不行吗?为什么是多个而不是单个,单个绝对不行吗?45实现套接字实现套接字API的过程的过程 Socket过程过程 该过程创建一个套接字并返回一个整数描该过程创建一个套接字并返回一个整数描
40、述字。述字。descriptor=socket(protofamily,type,protocol)close过程过程 该过程告诉系统终止对套接字的使用。该过程告诉系统终止对套接字的使用。close(socket)bind过程过程 服务器使用该过程来提供服务器所使用的、用服务器使用该过程来提供服务器所使用的、用于等待连接的协议端口号。于等待连接的协议端口号。bind(socket,localaddr,addrlen)46 listen过程过程 服务器调用该过程来等待来自客户的连接。服务器调用该过程来等待来自客户的连接。listen(socket,queuesize)accept过程过程 面向连
41、接的服务器必须调用面向连接的服务器必须调用accept过程才能接过程才能接收下一个连接请求。收下一个连接请求。newsock=accept(socket,caddress,caddresslen)connect过程过程 客户调用该过程建立与特定服务器之间的连接。客户调用该过程建立与特定服务器之间的连接。connect(socket,saddress,saddresslen)47 send过程过程 如果套接字被连接,可以利用该过程发送数据。如果套接字被连接,可以利用该过程发送数据。send(socket,data,length,flags)sendto过程过程 和和sendmsg 过程过程 允许
42、客户或服务器使用无连允许客户或服务器使用无连接套接字发送数据。接套接字发送数据。sendto(socket,data,length,flags,destaddress,addresslen)sendmsg(socket,msgstruct,flags)是一个结构,该结构包含了关于目的地址,目的地址的长度,发送的消息,以及消息的长度等信息。48 recv过程过程 应用可以调用该过程从连接套接字中接收数据。应用可以调用该过程从连接套接字中接收数据。recv(socket,buffer,length,flags)recvfrom过程过程 和和recvmsg过程过程 如果套接字并没有被连接,如果套接字
43、并没有被连接,应用可以用于接收来自任意发送者的消息应用可以用于接收来自任意发送者的消息 recvfrom(socket,buffer,length,flags,sndraddr,saddrlen)recvmsg(socket,msgstruct,flags)是一个结构,该结构含有接收消息的地址和发送者的IP地址。49实现套接字实现套接字API的过程的过程1、创建一个套接字并返回一个创建一个套接字并返回一个返回整型描述符返回整型描述符 DescriAptor=socket(pf,type,protocol)Pf:协议栈协议栈TCP/IP/Apple Talk,type:连接连接/无连接,无连接,
44、protocol:具体协议:具体协议tcp/udp2、Bind过程过程 Bind(socket,locaaddr,addrlen)服务器服务器使用使用Bind过程赋予套接字特定的过程赋予套接字特定的端地址端地址,实现,实现socket 和端地址联编,使用无连接协议时已准备好接和端地址联编,使用无连接协议时已准备好接收信息。收信息。Locaaddr是本地端地址的一般是本地端地址的一般socket地址描述结构,地址描述结构,TCP/IP地址和协议端口号将按地址和协议端口号将按socket地址结构表达。地址结构表达。504、Listen过程过程 Listen(socket,queuesize)如服务
45、器是面向连接的,需要使用如服务器是面向连接的,需要使用Listen 过程将套接字过程将套接字设置为被动模式,然后必须接受一个连接请求。设置为被动模式,然后必须接受一个连接请求。Queuesize:客户请求队列的长度,开始为空。:客户请求队列的长度,开始为空。3、Close过程过程 close(socket)close过程的调用告诉系统终止对一个套接字过程的调用告诉系统终止对一个套接字socket的的使用,系统对套接字进行释放,应用程序与传输协议间使用,系统对套接字进行释放,应用程序与传输协议间停止数据交互。如果套接字在使用面向连接的传输时,停止数据交互。如果套接字在使用面向连接的传输时,在关闭
46、套接字前先关闭连接。在关闭套接字前先关闭连接。515、Accept过程过程 newsock=accept(caddress,caddresslen)使用面向连接通信时,使用面向连接通信时,Accept过程在套接字中确定了过程在套接字中确定了连接客户的地址,服务器通过调用连接客户的地址,服务器通过调用Accept过程接受下过程接受下一个连接。然后一个连接。然后Accept为该连接创建一个新套接字为该连接创建一个新套接字newsock 返回调用者,服务器将用这个新套接字和客返回调用者,服务器将用这个新套接字和客户通信,直至与该客户通信结束。户通信,直至与该客户通信结束。caddress:按照:按照
47、socket地址结构表达的客户端地址结构表达的客户端IP地址。地址。4-5步骤是面向连接通信时服务器必须的过程调用,完步骤是面向连接通信时服务器必须的过程调用,完成被动地接受一个连接请求,然后创建一个服务器与特成被动地接受一个连接请求,然后创建一个服务器与特定客户定客户TCP连接的新的套接字,依次通信,同时原套接连接的新的套接字,依次通信,同时原套接字仍保持不变;当该客户连接结束后,使用原套接字接字仍保持不变;当该客户连接结束后,使用原套接字接受来自下一个客户的连接。受来自下一个客户的连接。526、客户端、客户端Connect过程过程 Connect(socket,saddress,saddr
48、esslen)当使用面向连接的当使用面向连接的TCP,Connect过程启动一个指定过程启动一个指定服务器的运输层连接,本质上说服务器的运输层连接,本质上说Connect是客户与已是客户与已经调用了经调用了Accept过程的服务器进行连接的过程。过程的服务器进行连接的过程。saddress是按一般是按一般socket地址结构表达的服务器地址结构表达的服务器IP地地址和协议端口号。址和协议端口号。非常有意思的是,当客户使用无连接的非常有意思的是,当客户使用无连接的UDP协议时,协议时,也可以使用也可以使用 Connect过程,此时并不启动一个连接,过程,此时并不启动一个连接,而仅仅使得而仅仅使得
49、 socket与与服务器端地址联编。服务器端地址联编。通常对无连接的传输一般每一个通常对无连接的传输一般每一个IP报指明目的地址,报指明目的地址,但许多应用客户只和一个服务器通信,也即具有同但许多应用客户只和一个服务器通信,也即具有同样的端目的地址。此时客户可以通过套接字的地址样的端目的地址。此时客户可以通过套接字的地址记录,发送多条信息,而不必每条指明地址。记录,发送多条信息,而不必每条指明地址。无连接传输的无连接传输的Connect过程过程调用,建立连调用,建立连续无地址的续无地址的IP包传输,实际包传输,实际上理解为客户上理解为客户 程序不需要给程序不需要给API指明端地指明端地址,而使
50、用址,而使用API默认地址。默认地址。537、Send过程过程 send(socket,data,length,flags)当套接字连接建立后,当套接字连接建立后,客户与服务器就需要发送信息,客户与服客户与服务器就需要发送信息,客户与服务器使用务器使用Send 过程完成数据发送。过程完成数据发送。data 是内存待发数据的地址,是内存待发数据的地址,length是数据字节数是数据字节数,flags 特殊特殊选项位(常用于系统调试)。选项位(常用于系统调试)。sendto(socket,data,length,flags,destaddress,addresslen)sendto过程是客户或服务