ch3_补充1_Socket编程_UDP.pdf

上传人:asd****56 文档编号:70322531 上传时间:2023-01-19 格式:PDF 页数:47 大小:9.25MB
返回 下载 相关 举报
ch3_补充1_Socket编程_UDP.pdf_第1页
第1页 / 共47页
ch3_补充1_Socket编程_UDP.pdf_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《ch3_补充1_Socket编程_UDP.pdf》由会员分享,可在线阅读,更多相关《ch3_补充1_Socket编程_UDP.pdf(47页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第3章 传输层(Transport Layer)计算机网络(计算机网络(Computer Networks)3.1 传输层的功能和协议传输层的功能和协议 3.2 网络环境中进程通信的原理和实现方法网络环境中进程通信的原理和实现方法 3.3 用户数据报协议用户数据报协议UDP 3.4 可靠数据传输原理可靠数据传输原理 3.5 传输控制协议传输控制协议TCP 3.1 传输层的功能和协议传输层的功能和协议 物理层 网络层 传输层 应用层 数据链路层 面向信息处理 面向通信 用户功能 网络功能 提供主机通信 提供进程通信 提供应用服务 传输层为相互通信的应用进程提供了逻辑通信传输层为相互通信的应用进程

2、提供了逻辑通信 5 4 3 2 1 传输层提供应用进程间的逻辑通信 主机 A 主机 B 应用进程 应用进程 路由器 1 路由器 2 AP1 LAN2 WAN AP2 AP3 AP4 IP 层 LAN1 AP1 AP2 AP4 端口 端口 5 4 3 2 1 IP 协议的作用范围(提供主机间的逻辑通信)TCP 和 UDP 的作用范围(提供进程之间的逻辑通信)AP3 传输层中的两个协议传输层中的两个协议(1)用户数据报协议用户数据报协议 UDP (User Datagram Protocol)UDP 提供无连接的服务,虽然 UDP 不提供可靠交付,但在某些情况下 UDP 是一种最有效的工作方式。(

3、首部?字节)(2)传输控制协议传输控制协议 TCP(Transmission Control Protocol)TCP 则提供面向连接的服务。由于 TCP 要提供可靠的、面向连接的传输服务,因此不可避免地增加了许多的开销。这不仅使协议数据单元的首部(?字节)增大很多,还要占用许多的处理机资源。*传输协议数据单元传输协议数据单元TPDU(Transport Protocol Data Unit)*TCP报文段报文段(segment),UDP报文报文(datagram)传输层向上提供可靠的和不可靠的逻辑通信信道传输层向上提供可靠的和不可靠的逻辑通信信道(即使用(即使用TCP和和UDP协议)协议)?

4、应 用 层 传 输 层 发 送 进 程 接 收 进 程 接 收 进 程 数据 数据 全双工可靠信道 数据 数据 使用 TCP 协议 使用 UDP 协议 不可靠信道 发 送 进 程 传输层的主要功能传输层的主要功能 为应用进程之间提供端到端的逻辑通信为应用进程之间提供端到端的逻辑通信(即实即实现分布式进程通信现分布式进程通信)。提供两种不同的传输协议提供两种不同的传输协议,即面向连接的即面向连接的 TCP 和无连接的和无连接的 UDP。对收到的报文进行差错检测对收到的报文进行差错检测。3.2 网络环境中进程通信 的原理和实现方法 3.2.1 网络中进程通信必须解决的几个主要问题网络中进程通信必须

5、解决的几个主要问题 进程命名与寻址方法;多重协议的识别;进程间相互作用模型 端口在进程之间的通信中所起的作用端口在进程之间的通信中所起的作用 应应 用用 层层 传传 输输 层层 网网 络络 层层 TCP 报文段 UDP 报文 应用进程 TCP 复用 IP 复用 UDP 复用 TCP 报文段 UDP 报文 应用进程 端口 端口 TCP 分用 UDP 分用 IP 分用 IP 数据报 IP 数据报 发送方 接收方 端口就是应用进程与传输层实体(端口就是应用进程与传输层实体(TCP和和UDP)交互的访)交互的访问点问点。端口可用来标识应用进程端口可用来标识应用进程 端口用一个端口用一个16 bit 二

6、进制数二进制数,即端口号即端口号(port number)来标来标识识;熟知端口(熟知端口(well-known port),其数值一般为),其数值一般为 01023。-应用程序应用程序 FTP HTTP SMTP TELNET DNS TFTP SNMP 熟知端口熟知端口 21 80 25 23 53 69 161-另一类则是一般端口,用来随时分配给请求通信的应用进另一类则是一般端口,用来随时分配给请求通信的应用进程。程。端口号只具有本地意义端口号只具有本地意义;端口(端口(Port)的概念)的概念 网络环境中进程的唯一标识网络环境中进程的唯一标识 网络环境中全局唯一地标识一个进程需要一个

7、三元组表示(协议类型,IP地址,端口号)一个完整的通信需要一个五元组(协议类型,本地地址,本地端口号,远地地址,远地端口号)TCP130.42.85.1525 TCP 130.42.85.15 25协议类型协议类型IP地址地址端口号端口号3.2.1 网络中进程通信必须解决的几个主要问题 进程命名与寻址方法;多重协议的识别;进程间相互作用模型 3.2.2 客户客户/服务器服务器(Client/Server)模型模型 数据链路层 物理层 运输层 网络层 数据链路层 物理层 运输层 网络层 客户发起连接建立请求 服务器接受连接建立请求 应用层 应用层 因特网 客户 服务器 以后就逐级使用下层 提供的

8、服务(使用 TCP 和 IP)1.客户客户/服务器模型的基本概念服务器模型的基本概念 2.采用客户、服务器模型的主要原因采用客户、服务器模型的主要原因 网络资源分布的不均匀性网络资源分布的不均匀性 硬件、软件和数据资源的不均匀性客观存在,能力强、硬件、软件和数据资源的不均匀性客观存在,能力强、资源丰富的充当服务器,能力弱或需要某种资源的成为客资源丰富的充当服务器,能力弱或需要某种资源的成为客户。户。网络环境中进程通信的异步性网络环境中进程通信的异步性 分布在不同主机系统中的进程,进程什么时间发出通分布在不同主机系统中的进程,进程什么时间发出通信请求,希望和哪台主机的哪一个进程通信,以及对方进信

9、请求,希望和哪台主机的哪一个进程通信,以及对方进程之间是否接受通信请求,全然不知程之间是否接受通信请求,全然不知,不存在一个高层操不存在一个高层操作系统的调度与控制。作系统的调度与控制。功能较强的计算机可同时运行多个服务器进程功能较强的计算机可同时运行多个服务器进程 数据链路层 物理层 运输层 网络层 应用层 计算机 3 服务器 1 服务器 2 数据链路层 物理层 运输层 网络层 应用层 计算机 1 客户 1 数据链路层 物理层 运输层 网络层 应用层 计算机 2 客户 2 因特网 客户软件的特点客户软件的特点 在进行通信时临时成为客户,但它也可在本地在进行通信时临时成为客户,但它也可在本地进

10、行其他的计算。进行其他的计算。主动向远地服务器发起通信。主动向远地服务器发起通信。可与多个服务器进行通信。可与多个服务器进行通信。不需要特殊的硬件和很复杂的操作系统。不需要特殊的硬件和很复杂的操作系统。服务器软件的特点服务器软件的特点 专门用来提供某种服务的程序专门用来提供某种服务的程序.被动等待并接受来自多个客户的通信请求被动等待并接受来自多个客户的通信请求,当系统当系统启动时即自动调用并一直不断地运行着启动时即自动调用并一直不断地运行着.可同时处理多个远地或本地客户的请求。可同时处理多个远地或本地客户的请求。一般需要强大的硬件和高级的操作系统支持。一般需要强大的硬件和高级的操作系统支持。3

11、.2.3 客户客户/服务器模型中服务器模型中 服务器的实现方法服务器的实现方法 1.并发服务器(并发服务器(Concurrent server)使用面向连接的使用面向连接的TCP服务器通常工作在并发方式。服务器通常工作在并发方式。2.循环服务器(循环服务器(Iterative server)使用无连接的使用无连接的UDP的服务器通常工作在循环方式的服务器通常工作在循环方式 1.并发服务器并发服务器 TCP TCP 客户 临时端口 临 时 端 口 TCP 客户 临时端口 TCP 客户 临时端口 主服务器 TCP 连接 熟知端口仅用于 接受服务请求 创建 从属服务器 主服务器有时又称为父服务器,而

12、从属服务器又称为子服务器。并发服务器的特点并发服务器的特点 通常用于使用面向连接的通常用于使用面向连接的TCP服务器。服务器。主服务器在熟知端口等待客户发出的请求。一旦收到客主服务器在熟知端口等待客户发出的请求。一旦收到客户的请求,就立即创建一个从属服务器,并指明从属服户的请求,就立即创建一个从属服务器,并指明从属服务器使用临时端口和该客户建立务器使用临时端口和该客户建立 TCP 连接,然后主服务连接,然后主服务器继续在原来的熟知端口等待向其他客户提供服务。器继续在原来的熟知端口等待向其他客户提供服务。在服务器和多个客户之间必须建立多条在服务器和多个客户之间必须建立多条 TCP 连接,而每连接

13、,而每一条一条 TCP 连接要在其数据传送完毕后才能释放。连接要在其数据传送完毕后才能释放。服务器在同一时间可向多个客户提供服务。服务器在同一时间可向多个客户提供服务。2.循环服务器循环服务器 服务器只使用一个熟知端口。每一个客户则使用自己创建的临时端口(端口号自己设定)。UDP 服务器 UDP 客户 临时端口 熟知端口 UDP 客户 临时端口 UDP 客户 临时端口 队列,一次 一个客户 循环服务器的特点循环服务器的特点 使用无连接的使用无连接的UDP的服务器通常工作在循环方式的服务器通常工作在循环方式 循环服务器内含一个请求队列,客户请求到达后,循环服务器内含一个请求队列,客户请求到达后,

14、首先进入对列之中,服务器按首先进入对列之中,服务器按FIFO原则一一做出原则一一做出响应响应 一个服务器在同一时间只能向一个客户提供服务一个服务器在同一时间只能向一个客户提供服务 3.2.4 客户客户/服务器模型的服务器模型的 Socket实现框架实现框架 系统调用和应用编程接口系统调用和应用编程接口 应用程序 1 应用程序 2 应用程序 n 系统调用(包括Socket编程接口)系统调用接口 操作系统内核(包括 TCP/IP 协议)应用编程接口应用编程接口 API(Application Programming Interface)当某个应用进程启动系统调用时,控制权就从应用进当某个应用进程启

15、动系统调用时,控制权就从应用进程传递给了系统调用接口。程传递给了系统调用接口。此接口再将控制权传递给计算机的操作系统。操作系此接口再将控制权传递给计算机的操作系统。操作系统将此调用转给某个内部过程,并执行所请求的操作。统将此调用转给某个内部过程,并执行所请求的操作。内部过程一旦执行完毕,控制权就又通过系统调用接内部过程一旦执行完毕,控制权就又通过系统调用接口返回给应用进程。口返回给应用进程。系统调用接口实际上就是应用进程的控制权和操作系系统调用接口实际上就是应用进程的控制权和操作系统的控制权进行转换的一个接口,即应用编程接口统的控制权进行转换的一个接口,即应用编程接口 API。几种几种Sock

16、et 应用编程接口应用编程接口 Berkeley UNIX 操作系统定义了一种操作系统定义了一种 API,它,它又称为又称为socket接口接口(socket interface)。微软公司在其操作系统中采用了微软公司在其操作系统中采用了socket接口接口 API,形成了一个稍有不同的,形成了一个稍有不同的 API,并称之为,并称之为 Windows Socket。AT&T 为其为其 UNIX 系统系统 V 定义了另一种定义了另一种 API,简写为简写为 TLI(Transport Layer Interface)。Socket(套接字套接字)Socket实质提供了进程通信的端点实质提供了进

17、程通信的端点 在网络内部在网络内部,每个每个Socket用一个三元组来描述;用一个三元组来描述;(协议类型协议类型,IP地址地址,端口号端口号)一个完整的一个完整的Socket连接用一个五元组来描述连接用一个五元组来描述 (协议类型协议类型,本地地址本地地址,本地端口号本地端口号,远地地址远地地址,远地端口号远地端口号)应用进程通过应用进程通过Socket接入到网络接入到网络 TCP TCP 由应用程序控制 因特网 由操作系统控制 Socket Socket 应用进程 应用进程 基本Socket系统调用(1)创建)创建socket:socket()socketid=socket(af,type

18、,protocol)Socketid是一个整数是一个整数,即即socket号;号;af,address family,地址族地址族,Unix支持的地址族有支持的地址族有AF_UNIX,AF_INET,AF_NS等等,Windows只支持只支持 AF_INET。type,描述建立描述建立Socket的类型的类型,protocol,指出本指出本socket请求所希望的协议请求所希望的协议 总之总之,socket()系统调用实际上指定了相关五元组中的系统调用实际上指定了相关五元组中的“协协议议”这一元这一元。(2)指定本地地址:指定本地地址:bind()/绑定绑定 bind(socket,local

19、_address,address_lengh)此调用将本地地址此调用将本地地址(IP,端口号端口号)和和socket号相联系号相联系,形成一个三元组形成一个三元组,其中其中 socket,socket号号 local_address,是本地地址是本地地址,其长度可变其长度可变,结构结构随协议不同而不同随协议不同而不同。address_lengh,地址长度地址长度 TCP/IP协议地址结构协议地址结构 Struct sockaddr_in short sin_family;/AF_INET u_short sin_port;/16bit 端口端口 struct in_addr sin_addr;

20、/32bit IP地址地址 char sin_zero8;/保留保留 (3)建立建立socket连接:连接:connect()与与accept()这两个调用用来建立完整的五元组这两个调用用来建立完整的五元组 connect()用于用于client进程进程,accept()用于用于server进程进程 connect(socket,destination_address,address_lengh)socket:本地:本地socket号号 destination_address:目的地址:目的地址(IP,port)address_lengh:目的地址长度目的地址长度 newsockid=acce

21、pt(socket,clientaddr,paddrlen)socket:本地本地socket号号 clientaddr:指向一个初值为空的结构指向一个初值为空的结构 paddrlen:初值为:初值为0(4)服务器侦听)服务器侦听listen()()用于面向连接的服务器,在用于面向连接的服务器,在accept()()之前调用,表明它愿意接收连接之前调用,表明它愿意接收连接 listen(socket,queue_length)Socket:本地公认:本地公认socket号号 queue_length:请求调用队列的长度:请求调用队列的长度 (5)发送数据:)发送数据:send(),write(

22、),writev()与与 sendto()(),sendmsgq 前三个用于面向连接的数据传输前三个用于面向连接的数据传输 后两个用于无连接的数据传输后两个用于无连接的数据传输 send(socket,buffer,buffer_length,flags)sendto(socket,buffer,buffer_length,flags,dstadd,addrlen)(6)接收数据:接收数据:recv(),(),read(),readv()与与 recvfrom()(),recvmsg()与发送数据一一对应与发送数据一一对应 客户客户/服务器模型的服务器模型的Socket实现框架实现框架 1.并

23、发服务器并发服务器 2.循环服务器循环服务器 1.并发服务器并发服务器 服务器 read()socket()bind()accept()无限制重复 socket()若需要就重复 write()进程 close()接受 close()客户 listen()fork()connect()write()read()close()监听 若需要就重复 主服务器 close()接受 从属服务器 2.循环服务器循环服务器 服务器 recvfrom()socket()bind()recvfrom()无限制重复 socket()若需要就重复 sendto()进程 sendto()close()客户 客户/服务器

24、程序举例 见运行程序和程序清单 3.3 用户数据报协议 UDP 3.3.1 UDP 概述 UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能。虽然 UDP 用户数据报只能提供不可靠的交付,但 UDP 在某些方面有其特殊的优点。发送数据之前不需要建立连接 UDP 的主机不需要维持复杂的连接状态表。UDP 用户数据报只有8个字节的首部开销。网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。3.3.2 UDP 用户数据报的 首部格式 伪首部 源端口 目的端口 长 度 检验和 数 据 首 部 UDP长度 源 IP 地址 目的 IP 地址 0 17

25、 IP 数据报 字节 4 4 1 1 2 12 2 2 2 2 字节 发送在前 数 据 首 部 UDP 用户数据报 伪首部 源端口 目的端口 长 度 检验和 数 据 首 部 UDP长度 源 IP 地址 目的 IP 地址 0 17 IP 数据报 字节 4 4 1 1 2 12 2 2 2 2 字节 发送在前 数 据 首 部 UDP 用户数据报 用户数据报 UDP 有两个字段:数据字段和首部字段。首部字段有 8 个字节,由 4 个字段组成,每个字段都是两个字节。伪首部 源端口 目的端口 长 度 检验和 数 据 首 部 UDP长度 源 IP 地址 目的 IP 地址 0 17 IP 数据报 字节 4

26、4 1 1 2 12 2 2 2 2 字节 发送在前 数 据 首 部 UDP 用户数据报 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。计算UDP的检验和 二进制反码运算求和 当最高位有进位时,需将该进位加到结果上 例:两个16位整数相加。1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 1 1 1 0 1 1 1 0 1 1 1 1 0 0 1 0 1 0 0 0 1 0 0 0

27、1 0 0 0 0 1 1 wraparound sum checksum 计算 UDP 检验和的例子 10011001 00010011 153.19 00001000 01101000 8.104 10101011 00000011 171.3 00001110 00001011 14.11 00000000 00010001 0 和 17 00000000 00001111 15 00000100 00111111 1087 00000000 00001101 13 00000000 00001111 15 00000000 00000000 0(检验和)01010100 01000101 数据 01010011 01010100 数据 01001001 01001110 数据 01000111 00000000 数据和 0(填充)10010110 11101011 求和得出的结果 01101001 00010100 检验和 153.19.8.104 171.3.14.11 12 字节 伪首部 8 字节 UDP 首部 7 字节 数据 填充 按二进制反码运算求和 将得出的结果求反码 全 0 17 15 1087 13 15 全 0 数据 数据 数据 数据 数据 数据 数据 全 0 Thank you!Thank you!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁