网络软件设计2.ppt
网络软件设计深入套接字制作主讲段景山
2套接口结构套接字是一个标识符套接字是一个结构套接字是一个包含标识、数据和操作的复合体,是效劳访问点
3套接字是一个标识符套接字是一个标识符变量类型:SOCKETSOCKETs;本质: 在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_error pid_tso_pgid;套接口结构UNIX通过标识符在系统中找寻的就是这个结构
5structsockbuf{ u_longsb_cc; u_longsb_hiwat; u_longsb_mbcnt; u_longsb_mbmax; longsb_lowat structmbuf*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实体如何