您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 管理学资料 > 网络软件设计1——套接字概述
网络软件设计套接字基本原理制作主讲段景山段景山2网络软件类型SocketBSDsockets--基于CWindowssockets1.0/2.0MFCCsocket类其它语言环境JAVAC++,Boost库,asioC#与网络通信有关的Asp--动态网页制作Restful,WebService数据库段景山3套接字服务的基本原理套接字、端口、服务方式编写简单的通信程序内容段景山4套接字编程的基本原理1、引入1.1网络通信是一个复杂的过程功能的层次性协议的多样性“套接字”(socket)提供给用户需要的通信服务?应用层表示层会晤层传输层网络层数据连路层物理层应用层表示层会晤层传输层网络层数据连路层物理层网络层数据连路层物理层通信介质传输层协议会晤层协议表示层协议应用层协议端系统A端系统B中继系统通信介质段景山5引入1.1网络通信是一个复杂的过程功能的层次性协议的多样性应用的多样性LANIPTCPUDPSMTPFTPTPTELNETDNSSNMPWANICMPARP段景山6引入1.2用户需要的服务不喜欢复杂不过也不喜欢太简单1.2.1简单的服务不关心通信系统的细节不关心中介节点的参与直接面向源和目的的服务用户需要怎样的通信服务?端到端的通信服务分布式的环境,用户甚至无需知道数据在本地或远方段景山7引入1.2.2用户希望有足够的选择和控制服务类型可靠(但复杂)与不可靠(但简单)服务方式阻塞(死等)与非阻塞(并行)特殊处理带外数据、原始套接字、源路由控制……差错控制报错、检错、恢复至少先要知道是否出错、出了什么错,然后进行恢复。段景山8套接字的位置和作用“套接字”(socket)提供给用户需要的通信服务2.1套接字的位置直接面向用户用户进程端到端(endtoend)传输层之上2.2套接字的作用端到端简单的通信服务较多的套接字服务选择段景山9套接字的位置和作用2.2.1端到端通信服务套接字的使用过程中不涉及低层协议细节不涉及中介节点socket,就如同墙上的插口一样方便段景山10套接字的位置和作用2.2.2较多的选择服务类型面向连接:SOCK_STREAMTCP无连接:SOCK_DGRAMUDP服务方式阻塞:FIONBIO非阻塞:特殊处理带外数据:FD_OOB原始数据服务:SOCK_RAW检错差错定义:error.h得到差错类型:WSAGetLastError()段景山11套接字(socket)3、套接字是一个标识是一种结构是服务访问点(数据+服务)3.1套接字变量(套接字描述符)SOCKETs;获得一个套接字类型变量,可通过它得到通信服务SOCKETs1,s2;代表两个不同的通信--标识作用SOCKET类型就是整型是一个起标识作用的数值段景山12套接字(socket)3.2套接字的操作以套接字为标识,通信服务都是围绕套接字进行的例:一个简单的通信流程,通过调试观察SOCKETs;s=socket(。。。)send(s,。。。);recv(s,。。。);ioctlsocket(s,。。。);setsockopt(s,。。。);获得套接字资源发送数据接收数据控制套接字工作参数段景山13端口、端点4、端口、端点(endpoint)4.1端口(port)传输层实体用来区分应用进程的通信的标识SourcePortDest.PortSequenceNumberACKNumberHLen(4)Rsv(6)Code(6)WindowCheckSumUrgentPointerOptionPadUrgentData(DataOutOfBand)Data200021。。。。。。300023。。。。。。303080。。。。。。(21)(23)(80)应用进程1应用进程2应用进程3TCP层实体IP层实体段景山14端口、端点端口号的分配全局分配(固定分配)由公认的机构统一分配--“知名”端口1024端口号关键字服务7ECHO回送20FTP-DATA文件传输21FTP文件传输23TELNET远终端连接25SMTP邮件传输53DOMAIN域名服务80端口、端点端口号的分配全局分配(固定分配)本地分配(动态分配)在本地非知名,未使用的端口中任意选择每次得到不同的端口号,保证唯一性思考:为什么有这两种分配(全局分配和动态分配),各有什么作用,是相互配合还是相互抵触?段景山17端口、端点4.2端点在网络上唯一确定一个通信应用进程需要?确定网络确定网络上的节点确定节点上的端口确定通信应用进程=(网络号+主机号+端口号)IP地址+协议传输层有两种协议,需要确定协议种类半相关(谁)段景山18端口、端点在网络上确定一次通信需要?确定通信两端的端点本地(源)端点远(目的)端点协议+本地IP地址+本地端口远IP地址+远端口++协议全相关(谁和谁在通信)段景山19端口、端点4.3端点地址结构又叫套接字地址端点结构要素:IP地址,端口号注意:协议类型不在结构中记录4.3.1sockaddr_in结构structsockaddr_in{u_shortsin_family;协议族类型u_shortsin_port;端口号structin_addrsin_addr;IP地址charsin_zero[8];保留,没有使用}区分以下概念:套接字描述符、套接字地址、端口地址、本地地址、远方地址段景山20端口、端点Sin_family协议族类型Internet使用AF_INET表示此外,还使用AF_XXXPF_XXX的方式定义了多种协议族IPv4AF_INET16位端口号32位IP地址IPv6AF_INET616位端口号32位流标128位IPv6地址Data_LinkAF_LINK接口索引。。。段景山21sin_addr:IP地址结构--structin_addrstructin_addr{union{struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b;struct{u_shorts_w1,s_w2;}S_un_w;u_longS_addr;}S_un;}如此定义一个本质为长整数类形的IP地址,目的何在?方便使用端口、端点段景山22套接字地址例:给端点赋值IP地址为202.115.12.1structsockaddr_inaddr;addr.sin_addr.S_un.s_b1=202;addr.sin_addr.S_un.s_b2=115;addr.sin_addr.S_un.s_b3=12;addr.sin_addr.S_un.s_b4=1;或addr.sin_addr.S_un.s_addr=0xca730c01.s_un_b.s_un_b.s_un_b.s_un_b段景山23套接字地址4.3.2sockaddr结构通用的套接字地址结构与Internet地址结构sockaddr没有具体定义端点中的端口及地址的详细内容两种结构间可以进行强制类型转换前提:大小基本一样(占用的空间大小一样)基本结构一样structsockaddr{u_shortsa_family;charsa_data[14];}structsockaddr_in{u_shortsin_family;u_shortsin_port;structin_addrsin_addr;charsin_zero[8];}段景山24套接字与端口5、套接字与端口套接字描述符是一个整数标识,端口号也是一个整数标识SOCKETs;unsignedshortport;共同点:它们都是对通信的标识不同:端口号的使用还要配合IP地址等套接字标识符在套接字函数中使用似乎不需要其它参数的配合问题:这两种标识是怎样的不同?可不可以只用一种?段景山理论:套接字描述符用来获得系统通信服务,标识不同的通信服务端口用来标识不同应用进程,以便为它们提供服务不同使用者不同:套接字描述符由应用进程使用端口号由TCP实体使用管理者不同套接字标识符局限于一个进程内端口号是整个系统统一管理25段景山26套接字与端口它们有共同的作用,从理论的角度可以合二为一。但是在实际实现中,它们是相互独立的、不同的资源在网络上标识一个进程,仅端口号是不够的,还需要IP地址,协议等而在一个进程里,标识不同的通信服务,套接字标识符就够了它们之间应建立相互对应的关系即某个套接字工作在某个端点上段景山5.1套接字与端点的关系用户通过套接字取得系统通信资源和服务寻找系统通信资源通过在套接字上绑定端点地址来指定在哪里取得服务绑定:建立套接字与端点地址之间的映射关系bind(s,addr,)27段景山28套接字与端点5.2建立关系的方法bind(s,sock_addr);又称显示绑定还有隐式绑定利用某些套接字调用来建立映射关系段景山296、服务方式6.1TCP/IP的传输层服务TCP:面相连接的可靠协议UDP:面向无连接协议6.2指明服务类型的方法在申请socket时,指定服务类型s=socket(intaf,,intprotocol);inttypetype:SOCK_STREAMSOCK_DGRAMSOCK_RAW面向连接TCP面向无连接UDP原始服务服务方式例:s=socket(AF_INET,SOCK_DGRAM,0);段景山306.3服务方式对软件设计的影响1)字节流服务与数据报服务2)流程不同3)使用的socket调用不同,参数不同4)可靠性不同对象不同套接字端点过程不同环境不同结果不同段景山317、客户/服务器模式7.1什么是客户/服务器模式通信双方,要求一方先在确定的端口等待,另一方才发起通信的模式等待的一方:服务器,被动发起方:客户机,主动网络客户服务器SC服务请求服务响应后续通信客户/服务器模式段景山327.2为什么采用客户服务器模式7.2.1从应用的模型角度文件下载上传、网络数据库访问、信息获取远程终端、远程控制邮件通信终端对话、IP电话网络广播、点播网络A方:启动应用,向对方发出请求B方:对请求应答,提供服务…后续通信客户/服务器模式段景山337.2.2从一次通信的正确过程的角度聚集的原理(rendezvous):如何使双方“走”到一起?SOCKETs;connect(对方)s=socket(…)连接上?是否SOCKETs;connect(对方)s=socket(…)连接上?是否要同时启动连接才可能连接上客户/服务器模式推理段景山34聚集的原理实验方案测试两个服务进程都等待对方连接,是否能够成功测试两个客户进程不断尝试与对方连接,是否能够成功实验结论应该很难获得成功验证客户/服务器模式段景山35聚集的原理服务器等待客户机发起连接是通信成功的先决条件C/S模式是网络通信软件实现的基本模式反思客户/服务器模式段景山367.2.3C/S的基本特点服务器长期运行,持续准备提供服务客户机:提出及中止服务的随意性强突出优点随机的通信请求(客户机)随时的通信畅通(服务器)客户/服务器模式段景山37客户/服务器模式7.3客户/服务器模式对软件设计的影响通信双方的软件不同--客户端软件,服务器端软件各有不同的流程各有不同的要求再结合网络通信的特点面向连接的通信无连接的通信段景山38服务方式面向连接面向无连接软件模式服务器客户机综合服务方式和软件模式对软件设计的影响得到四种基本类型软件:面向连接的服务器面向无连接的服务器面向连接的客户机面向无连接的客户机客户/服务器模式段景山397.4面向连接的服务器流程:申请套接字确定本地端点,填写端点地址建立套接字与端点关系设置为监听模式(服务器模式)接受一个连接完成通信过程关闭连接的套接字s=socket(…);bind(s,addres
本文标题:网络软件设计1——套接字概述
链接地址:https://www.777doc.com/doc-6317661 .html