网络软件设计2——深入套接字

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

网络软件设计深入套接字制作主讲段景山段景山2套接口结构套接字是一个标识符套接字是一个结构套接字是一个包含标识、数据和操作的复合体,是服务访问点段景山3套接字是一个标识符套接字是一个标识符变量类型:SOCKETSOCKETs;本质:在winsock.h中typedefunsignedintu_int;typedefu_intSOCKET;一个整型变量--记录一个标识符通过这个标识符,用户就能获得系统通信服务但是一个简单的整数,怎么能够实现复杂的通信功能呢?段景山4structsocket{shortso_type;shortso_option;shortso_linger;//?shortso_state;caddr_tso_pcb;//?structprotosw*so_proto;structsocket*so_head;structsocket*so_q0;structsocket*so_q;shortso_q0len;shortso_qlen;shortso_qlimit;shortso_timeo;u_shurtso_errorpid_tso_pgid;套接口结构UNIX通过标识符在系统中找寻的就是这个结构段景山5structsockbuf{u_longsb_cc;u_longsb_hiwat;u_longsb_mbcnt;u_longsb_mbmax;longsb_lowatstructmbuf*sb_mb;structselinfosb_sel;shortsb_flags;shortsb_timeo;}u_longso_oobmark;structsockbufso_rcv,so_snd;caddr_tso_tpcb;void(*so_upcall)(structsocket*so,caddr_targ,intwaitf);caddr_tso_upcallarg;}套接口结构套接口结构中包含了为用户提供通信服务的各种信息状态控制数据so_typeso_stateso_pcbso_rcv接收数据队列so_snd待发数据队列段景山6套接口中饱含为一次通信服务的丰富资源,系统通过套接字标识符(描述符、socketid)来找到对应套接口结构从两个层次理解:用户角度:只需给出标识符就能找到透明性、方便性:用户不需掌握找寻的方法系统的角度:系统如何根据标识符找到套接口这是一个系统设计问题:我们可以从中学习设计的技巧套接口结构与套接字描述符段景山7利用索引表的形式套接字描述符是表的索引号码表中记录套接口结构的地址socketid索引id关系映射进程符号表套接口结构与套接字描述符套接口结构段景山8套接字描述符套接字描述符的分配套接字描述符可以认为是套接口资源的编号全局分配:系统所有的套接口资源均统一编号局部分配:套接口资源仅在一个进程内部统一编号结果:全局分配:系统各进程得到的套接字描述符全不相同局部分配:各进程的套接字描述符可能相同优缺点:全局分配:便于统一管理,进程间的独立性差局部分配:维持进程间的独立性,可能造成管理的混乱设计段景山9套接字描述符全局分配套接字描述符统一分配套接字描述符有一定难度在socket()调用时由系统想办法实现进程间的相关性太强套接字描述符的取值范围,在进程中有禁区。局部分配套接字描述符进程间独立性强管理难度低推理段景山10套接字描述符套接字描述符的实验实验方案观察两个进程是否可能获得相同值的套接字描述符测试如果两个进程使用相同值的套接字描述符是否能同时不受干扰地完成各自的通信实验结论两个进程的套接字描述符可以获得相同的值(局部分配)两个进程的套接字对应不同的通信服务--不同的套接口资源(有自己的索引表)验证段景山11TCP实体进程1进程2进程3123456781234512345套接口与套接字描述符套接字标识符套接口结构从套接字描述符的分配问题深入系统设计原理如何实现局部的标识符与全局管理的资源之间的映射技巧及优点反思保存套接口所在地址,实现查找段景山12端口与套接口当我们了解了从上至下(从套接字描述符到套接口资源)的映射方式后,进一步探索从下至上(从端口到套接口资源)的映射方式。从而完成整个接口系统的上下对应关系整个关系是围绕者套接字的段景山13TCP进程1进程2进程3套接口结构本地端点远端点源端口目的端口。。。接收队列端口与套接口TCP实体依据什么信息处理接收的报文?TCP实体如何处理报文?用户进程如何获取报文?本地端点远端点接收队列recv(s,buf…)s套接口结构目的端口设计段景山14端口与套接口TCP实体依据什么处理接收的报文?TCP实体如何处理报文?用户进程如何获取报文?报文中的端口信息,根据端口找到对应的套接口结构将报文挂在与端口绑定的套接口接收队列中从套接口的接收队列中取得报文段景山15套接字描述符、端口与套接口TCP进程1进程2进程3套接口结构本地端点远端点源端口目的端口。。。接收队列本地端点远端点接收队列recv(s,buf…)s套接字描述符、套接口结构和端口是相对独立的三个概念一般是一一对应的。ss套接口结构一个套接字标识符在调用socket()后对应一个套接口结构,该套接口结构在bind以后工作在确定的端口上,在connect后,对方端点也确定下来了段景山16套接字描述符、端口与套接口应用进程通过套接字描述符找到套接口(结构)传输层实体通过端口找到套接口结构套接字描述符与套接口之间的映射关系是通过socket()函数建立的端口是在bind()函数中填写到套接口中的套接字描述符套接口(结构)端口段景山17套接字描述符、端口与套接口从理论探讨这三者的映射关系对实践进行指导一个套接字描述符多个套接字描述符一个套接口多个套接口一个端口多个端口设计段景山18套接字描述符、端口与套接口多个套接字描述符对应一个套接口一个套接字描述符对应于多个套接口进程1s进程1s1进程2s2在一个进程内可提供通信资源的共享但在数据的归属上会出现混乱标识符的意义被颠覆在不同进程内进程1s1进程2s1推理段景山19多个套接口工作在一个端口上本地端口1远端口2接收队列本地端口1远端口3接收队列多个端口对应于一个套接口本地端口1、2、3……远端口1接收队列套接字描述符、端口与套接口本地端口1远端口2接收队列本地端口2远端口2接收队列只要两个端点之一不一样,就是两个不同的通信关系服务器就是通过在一个端口上同时有多个套接字活动来提供多用户同时接入功能的本地端口1远端口1、2、3……接收队列一点对多点,特殊的场合可能有用推理段景山20套接字描述符、端口与套接口结论:一个全相关包含五个要素,以确定一次通信A的端口号+A的IP地址+B的端口号+B的IP地址+协议两个不同的通信只要任一参数不同就可以区分在套接字结构里,记录了全相关的全部信息,因此通过两个套接字就可以确定一次通信。对于其中一方,一个套接字描述符对应于一个套接字结构,就能对应于一次通信。表现在recv()和send()等函数中不再需要目的地址信息反思

1 / 20
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功