- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
网络软件设计13服务与协议
* * * * * * * * * * * * * * * * * * 作为铺垫,需先测试发现connect函数有正确的返回,因此认为似乎可以建立“连接” * * * * * * * * 段景山 网络软件设计 面向连接与无连接服务 服务与协议 制作 主讲 段景山 * 引入 回到基本流程 申请套接字资源时,需要指明套接字类型 SOCK_STREAM SOCK_DGRAM 指明了套接字类型后,究竟产生了哪些影响? 程序流程的不同 数据传输服务的不同! * 面向连接程序流程 Server s = socket( SOCK_STREAM); bind(s,…); listen(s,5); while(1){ ns = accept(s,…); recv(ns,…); send(ns,…); closesocket(ns); } closesocket(s); Client s = socket(SOCK_STREAM ); connect(s,server,…); send(s,…); recv(s,…); closesocket(s); * 无连接程序流程 Server Client s = socket( ); bind(s,…); while(1){ recvfrom(s,remote,…) sendto(s,remote,…) } closesocket(s); s = socket( ); sendto(s, remote,…); recvfrom(s,remote,…); closesocket(s); * 流程比较 Server s = socket( SOCK_STREAM); bind(s,…); listen(s,5); while(1){ ns = accept(s,…); recv(ns,…); send(ns,…); closesocket(ns); } closesocket(s); Server s = socket( ); bind(s,…); while(1){ recvfrom(s,remote,…) sendto(s,remote,…) } closesocket(s); * 流程比较 Client s = socket( ); sendto(s, remote,…); recvfrom(s,remote,…); closesocket(s); Client s = socket(SOCK_STREAM ); connect(s,server,…); send(s,…); recv(s,…); closesocket(s); * 流程比较 无连接的流程 打开套接字 通信 关闭套接字 面向连接的流程 打开套接字 建立连接 通信 关闭连接 关闭套接字 问题:除了流程不同这样的表观现象外,面向连接和无连接究竟有哪些关键的、本质的差别? 三个阶段 * 数据报与字节流服务 数据报服务 由无连接协议--UDP提供 发送:以报文为单位 如果报文超过最大可发送长度,将拒绝发送 每次用户交付的数据,都将封装在一个UDP报文发送 接收:以报文为单位 如果接收缓冲区小于接收的报文长度,将无法得到全部接收数据,剩余丢失 即便接收缓冲区足够大,每次也只能接收一个UDP报文 --类似信件超重 --类似取包裹时,包裹太大 实验验证 * 数据报与字节流服务 字节流服务 由面向连接协议--TCP提供 对字节流的理解:对用户交付的数据以流的形式,不加限制 发送: 用户可发送“任意”长度的报文, TCP实体可根据通信的需要分拆用户一次交付的数据为多个TCP报文,发送; 或组合用户多次交付的数据为单个TCP报文。 接收: 用户得到的数据并不受到TCP报文大小限制,接收缓冲小时,可得到TCP报文的一部分 接收缓冲大时,可一次得到多个TCP报文 实验验证1.1 * 可靠服务与不保证可靠服务 面向连接提供可靠的通信质量 当通信中丢失报文时,TCP层可在不通知用户的情况下得到恢复 当通信中出现重复报文时,不会交给用户,而引起误会 无连接不保证通信可靠性 当通信中丢失报文时,UDP并不进行差错恢复 当通信中出现重复报文时,也会交给用户,是否引起误会由用户自行负责 实验设计1.2 * 源和目的的限定 “连接”与通信源和目的 连接由源和目的确定,在通信过程中,不能改变 在已建立连接的套接字,不能向另外的目的发送数据 不能接收非连接对端送来的数据 在通信过程中,用户不再(不能)指定源和目的 “无连接”与通信源和目的 在通信过程中,可向任意目的发送数据 在通信过程中,可收到任意源送来的数据 实验验证2.1 * 多路复用方面的表现 多路复用 程序可同时与多个对等实体通信 多路复用是否因“面向连接”或“无连接”而不同? “连接”与多路复用 每个套接字对应
文档评论(0)