通信软件设计方法-第四讲-基于TCP-IP的主机到主机通信.ppt_第1页
通信软件设计方法-第四讲-基于TCP-IP的主机到主机通信.ppt_第2页
通信软件设计方法-第四讲-基于TCP-IP的主机到主机通信.ppt_第3页
通信软件设计方法-第四讲-基于TCP-IP的主机到主机通信.ppt_第4页
通信软件设计方法-第四讲-基于TCP-IP的主机到主机通信.ppt_第5页
已阅读5页,还剩72页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信软件设计方法杨雄编著 二零零九年四月 1 讲授内容 1 LINUX概况2 LINUX下C语言程序编译和调试2 1 LINUX开发环境学习 实验 3 通信系统和通信软件4 基于TCP IP的主机到主机通信软件示例4 1 SOCKET程序设计 实验 5 无状态通信协议程序设计6 LINUX内核程序设计7 低层232接口通信程序设计8 设计一个简单链路层以及程序8 1 IP软件和链路层软件设计 实验 2 本章重点问题 如何编写C语言程序如何在TCP上传输数据 3 LINUX下的HELLO程序 第四讲基于TCP SOCKET的通信程序 4 LINUX操作系统 Hello 李阳 第四讲基于TCP SOCKET的通信程序 5 本地文件拷贝程序 第四讲基于TCP SOCKET的通信程序 6 文件拷贝实例 文件系统的多级树状目录结构 7 文件拷贝实例 示例3 将文件A拷贝到目录 home zhongshan下 8 文件拷贝实例 示例3 将文件A拷贝到目录 home zhongshan下 A A 内存buffer 9 打开文件A 生成文件 home zhongshan A 读取文件A的N个字节放入s buffer实际读取字节数放入s len s len 0 将s buffer的s len字节写入 home zhongshan A 开始 结束 关闭所有文件 main defineN2048ints fd r fd ints len chars buffer N s fd open home liyang A O RDWR r fd open home zhongshan A O RDWR O CREAT wihile s len read s fd 1 N s buffer 0 r write r fd 1 s len s buffer if r 1 log error break close s fd close r fd 文件拷贝实例 Y N 示例3 将文件A拷贝到目录 home zhongshan下 10 文件拷贝实例 N为每次读取的字节数也是缓冲区的大小 字节 s fd是源文件的文件描述字r fd是目标文件的文件描述字s buffer是内存缓冲区分别打开和生成文件循环读取源文件每次读取一块 然后写入目标文件直到源文件读取完毕出现错误要日志关闭文件 main defineN2048ints fd r fd ints len chars buffer N s fd open home liyang A O RDWR r fd open home zhongshan A O RDWR O CREAT wihile s len read s fd 1 N s buffer 0 r write r fd 1 s len s buffer if r 1 log error break close s fd close r fd 11 主机到主机的文件拷贝程序 第四讲基于TCP SOCKET的通信程序 12 主机到主机的通信软件主机之间的文件拷贝需求TCP协议分层结构TCP上进程通信模式TCP SOCKET函数主机之间文件拷贝示例程序 第四讲基于TCP SOCKET的通信程序 13 文件传送实例 将主机A的文件A拷贝到主机B的目录 home zhongshan下 A B 传输网 14 主机到主机的通信软件主机之间的文件拷贝TCP协议分层结构TCP上进程通信模式TCP SOCKET函数主机之间文件拷贝示例程序 第四讲基于TCP SOCKET的通信程序 15 通信网络体系分层 ISO的分层 OSI参考模型层典型执行方式名称主要功能举例软件应用层网络界面和用户应用Email软件表示层数据格式及转换NFS软件会晤层对话和同步管理检查点协议软件 硬件传输层端到端传输协议UDP TCP软件 硬件网络层目的地址寻找和传送IP硬件 软件数据链路层点到点帧转换和发送EthernetMAC ADSL1硬件物理层介质及发送方式RS 232 Ethernet ADSL 数据传送文件传送文件内容传送文件段数据段数据包数据帧数据位 16 通信网络体系分层 TCP IP的分层是怎样的 17 什么是主机到主机的通信软件 典型的主机 主机通信 有那些通信 什么是主机 可以独立运行的计算机 由于历史的原因有时分配IP地址的网络设备也称为主机 18 典型的主机 主机通信 什么是主机到主机的通信软件 HTTP会话WEB服务 INTERNET WEB服务器 LINUX工作站 进程1 浏览器 进程2 进程3 进程4 用户空间 内核空间 TCP IP核心模块 系统调用接口 网络设备驱动程序 网络设备驱动程序 网络设备驱动程序 19 LINUX内核结构 Linux设备管理结构 用户空间 内核空间 20 主机网络软件注重功能 为了功能性不是为了性能把性能敏感的功能移动到核心空间而保留其它功能在用户空间 主机到主机通信软件 21 典型的主机 主机通信 什么是主机到主机的通信软件 HTTP会话WEB服务 INTERNET WEB服务器 LINUX工作站 进程1 浏览器 进程2 进程3 进程4 用户空间 内核空间 TCP IP核心模块 网络设备驱动程序 网络设备驱动程序 网络设备驱动程序 应用层和网络层 TCP UDP 之间的接口 SOCKET有时也称API 系统调用接口 22 主机到主机的通信软件主机之间的文件拷贝TCP协议分层结构TCP上进程通信模式TCP SOCKET函数主机之间文件拷贝示例程序 第四讲基于TCP SOCKET的通信程序 23 应用举例 在两个主机之间拷贝二进制文件 文件名相同 文件拷贝 非常基本的应用层通信软件 复杂的网络应用软件基本原理也如此 第四讲基于TCP SOCKET的通信程序 24 SOCKET模型 服务者进程 2层设备层 3 4层协议层 SOCKET层 以太网驱动程序 TCPIP 1层物理层 第四讲基于TCP SOCKET的通信程序 25 基于主机的通信 TCP TCP连接 熟知端口仅用于接受服务请求 主服务器有时又称为父服务器 而从服务器又称为子服务器 客户 服务器模型 26 基于主机的通信 服务者进程 SOCKET层 SOCKET层 服务者进程A 复制创建 A主机 C主机 服务者进程B TCP TCP TCP对等协议 168 56 124 100 6666 6666 客户 服务器模型 27 LINUX进程和程序 进程创建 fork clone vfork父子进程共享资源的形式a 不共享 fork时缺省 b 部分共享c 完全共享 线程 进程的创建 28 LINUX进程和程序 示例4 fork实例 includeIntmyvar 0 voidmain intpid pid fork systemcallif pid 0 erroroccurredprintf forkfailed exit 1 systemcall elseif pid 0 childprocessprintf childprocessexecuting n myvar 1 else parentprocesswait systemcall waitforchildrencompletionprintf childcomplete myvar printf father myvar d myvar exit 0 29 主机到主机的通信软件主机之间的文件拷贝TCP协议分层结构TCP上进程通信模式TCP SOCKET函数主机之间文件拷贝示例程序 第四讲基于TCP SOCKET的通信程序 30 SOCKET系统调用 系统调用功能使用者Socket format type protocol 获得一个SOCKET客户 服务者bind sd address length SOCKET和address绑定服务者listen sd qlength 设置倾听服务者accept sd address addrlen 接受SOCKET请求服务者connect sd address length 请求一个SOCKET连接客户send sd msg length flags 向SOCKET发送数据客户 服务者recv sd buf length flags 从SOCKET接收数据客户 服务者write sd buf len 向SOCKET写数据客户 服务者read sd buf len 从SOCKET读数据客户 服务者shutdown sd mode 关闭SOCKET客户 服务者close sd 释放SOCKET客户 服务者 第四讲基于TCP SOCKET的通信程序 31 read socket 若需要就重复 write close 客户 connect 基于主机的通信 挂机 32 socket bind accept 无限制重复 进程 close listen fork write read close 若需要就重复 主服务器 close 接受 从属服务器 基于主机的通信 服务器 挂机服务员退出 33 read socket bind accept 无限制重复 socket 若需要就重复 write 进程 close 接受 close 客户 请求 响应 listen fork connect write read close 监听 若需要就重复 连接请求 主服务器 close 接受 从属服务器 基于主机的通信 服务器 34 上节课讲了什么 TCP IP的地址 IP地址 主机地址 网络地址端口号 端口号码 端口地址 35 上节课讲了什么 TCP IP的通信模型 客户 服务器 TCP TCP连接 熟知端口仅用于接受服务请求 36 上节课讲了什么 TCP IP接口API库 socket socket 系统调用socket 来获得套接字描述符 即读写数据的接口 intsocket intdomain inttype intprotocol 第一个参数domain设置为 AF INET 表示互联网络协议TCP IP 第二个参数是套接口的类型 SOCK STREAM或SOCK DGRAM 第三个参数设置为0 系统调用socket 只返回一个套接口描述符 如果出错 则返回 1 37 上节课讲了什么 TCP IP接口API库 socket bind 读写接口绑定到本地计算机的某一个端口号码上 即设置这个读写接口的应用类型 Intbind intsockfd structsockaddr my addr intaddrlen 第一个参数sockfd是由socket 调用返回的套接口描述符 第二个参数my addr是指向数据结构sockaddr的指针 数据结构sockaddr中包括了关于地址类型 端口和IP地址的信息 第三个参数addrlen可以设置成sizeof structsockaddr structsockaddr shortintsin family 地址族 unsignedshortintsin port 端口号 structin addrsin addr IP地址 my addr 38 上节课讲了什么 TCP IP接口API库 socket connect 通过读写接口希望和某个远端进程联系 即呼叫通信的对方 intconnect intsockfd structsockaddr serv addr intaddrlen 第一个参数还是套接口文件描述符 它是由系统调用socket 返回的 第二个参数是serv addr是指向数据结构sockaddr的指针 其中包括目的端口和IP地址 第三个参数可以使用sizeof structsockaddr 而获得 39 上节课讲了什么 TCP IP接口API库 socket listen 设置某个读写接口等待的请求数量 然后再调用accept 来取得这些请求 Intlisten intsockfd intbacklog 第一个参数是系统调用socket 返回的套接口文件描述符 第二个参数是进入队列中允许的连接的个数 大多数系统的缺省设置为20 你可以设置为5或者10或者更多 当出错时 listen 将会返回 1值 40 上节课讲了什么 TCP IP接口API库 socket accept 远程的主机试图使用connect 来呼叫你 你用listenI 来设置等待请求队列 即一个套接字上表识了这个队列调用accept 从等待队列取得某个请求 系统生成一个接口套接口描述符 读写接口 给你 accept 的返回值 原来的接口套接字描述符继续用于等待队列 这个新的描述符可以读写数据 即调用send 和recv 41 上节课讲了什么 TCP IP接口API库 socket accept 远方connect socket 获得一个读写接口 bind 将这个读写接口和特定端口号绑定 s 特定端口 accept 从s标记的队列取得一个请求 accept 返回一个新的读写接口s1 s1 s继续用于等待队列 s1用户这次请求的数据读写 42 主机到主机的通信软件主机之间的文件拷贝TCP协议分层结构TCP上进程通信模式TCP SOCKET函数主机之间文件拷贝示例程序 第四讲基于TCP SOCKET的通信程序 43 SOCKET通信程序实例 服务者 main intsd ns structsockaddr insocketaddr new socketaddr intfromlen structprotoent ppe ppe getprotobyname tcp sd socket AF INET SOCK STREAM 0 saddr sin family AF INET saddr sin port htons SERVPORT saddr sin addr s addr INADDR ANY bind sd structsockaddr include include include defineFILENAMELEN100filecopy intsd structfilehead charfilename FILENAMELEN longfilesize filehead charfn FILENAMELEN intcnt cnt read sd 基于主机的通信 示例5 44 datacopy intfd intsd longfl char filebuffer longfilelen 0 intfilebuffersize 1024 cnt if filebuffer malloc filebuffersize NULL return 1 while cnt read sd filebuffer filebuffersize 0 write fd filebuffer cnt filelen cnt if filelen fl break free filebuffer return1 SOCKET通信程序实例 服务者 基于主机的通信 45 SOCKET通信程序实例 服务者 main intsd ns structsockaddr insocketaddr new socketaddr intfromlen structprotoent ppe ppe getprotobyname tcp sd socket AF INET SOCK STREAM 0 saddr sin family AF INET saddr sin port htons SERVPORT saddr sin addr s addr INADDR ANY bind sd structsockaddr include include include defineFILENAMELEN100filecopy intsd structfilehead charfilename FILENAMELEN longfilesize filehead charfn FILENAMELEN intcnt cnt read sd 基于主机的通信 示例5 46 SOCKET通信程序实例 基于主机的通信 文件 fd open 文件描述字 buffer socket描述字 文件 文件 文件 端口号 端口号 socket描述字 buffer 网络 sd socket 本地套接字描述字 connect 用什么IP地址 用什么端口号 sd socket 远程本机套接字描述字 bind 绑定描述字和本机端口号 fd creat 文件描述字 本地的IP地址和端口号呢 IP地址IPa IP地址IPb 47 SOCKET通信程序实例 客户 main intargc char argv intsd fd structsockaddr insocketaddr char rhosyname argv 0 char filename argv 1 if fd open filename 0 1 printf 文件不能打开 exit ppe getprotobyname tcp sd socket AF INET SOCK STREAM ppe p proto memset void include include include defineFILENAMELEN100filesend intsd intfd char fn structfilehead charfilename FILENAMELEN longfilesize filehead intcnt filehead filesize filesize fd strcpy filehead filename fn cnt write sd 基于主机的通信 48 datasend intsd intfd longfl char filebuffer longfilelen 0 intfilebuffersize 1024 cnt if filebuffer malloc filebuffersize NULL return 1 while cnt read fd filebuffer filebuffersize 0 write sd filebuffer cnt filelen cnt if filelen fl break free filebuffer return1 SOCKET通信程序实例 客户 基于主机的通信 49 会议层 应用层 约定文件传送的格式 服务者进程 SOCKET层 TCP 客户进程 SOCKET层 TCP structfilehead charfilename FILENAMELEN longfilesize filehead 对等协议 简单说明原理 文件头 文件内容 有些应用是双虚电路 流 来完成 一条用于协议或命令 另一条用户数据 基于主机的通信 50 如何编辑和编译 基于主机的通信 1 命名源代码 源程序 名称1 服务器 端 程序 server c2 客户 端 程序 client c2 用vi分别编辑server c和client c文件3 用vi编辑makefile文件s server cgcc osserver cc client cgcc occlient c4 执行命令make5 查找语法和逻辑错误 直到编译成功6 分别执行 s和 c 验证程序的正确性 51 交换设备软件分割 第四讲基于TCP SOCKET的通信程序 52 控制和数据面 分割系统功能的高级方法是分离功能到各个功能平台 所有正统的网络体系模式使用这分割方式去分离通信功能成为三个清楚的面板控制面 OSPF SS7数据面 根据OSPF建立的表 转发数据管理面 控制和配置系统 家务管理 CLI SNMP HTTP数据面是基本操作发生的地方 控制和管理面是保证数据面操作正确 控制面负责对等通信和建立表 为数据面正确操作 嵌入式通信软件的大模块组成 53 控制和数据面 管理面 控制面 数据面 RTOS 实时操作系统 嵌入式通信软件的大模块组成 54 交换设备需要解决的一些问题 第四讲基于TCP SOCKET的通信程序 55 嵌入式通信软件的主要问题 内存问题1 56 嵌入式通信软件的主要问题 内存问题2 交换控制 内存 一般存储 高速存储 卡内存储等等内存机制 如何将有限的内存分割成不同队列 以便高速交换 57 控制界面问题 通信设备是没有键盘的 怎样配置设备 嵌入式通信软件的主要问题 58 设备问题 什么才可以称网络设备 网络接口呢 什么是驱动程序 嵌入式通信软件的主要问题 59 对高层调用来说以下系统调用成为形式上的标准 沿用了文件操作的命令调用方式 但是实际的区别在于驱动程序不一样 核心是通过设备名称 或号码 来区别调用 需要什么设备功能 就在调用时候指明相应设备名称即可 核心自然调用不同的驱动或控制程序 open 引起设备活动状态close 将活动设备变成非活动状态read 从设备中读取接收动的数据write 写数据到设备中ioctl 对设备进行配置和控制这几个调用接口是标准的 一个应用从一个系统平台移植到另外一个系统平台无需修改应用程序 设备问题 嵌入式通信软件的主要问题 60 打开文件 fd open 工资 激活设备 fd open dev print 申请Socket fd socket 实际上也是open 的变种设备配置 ioctl fd Open Close Read Write Ioctl 文件操作驱动程序 打印机操作驱动程序 TCP程序 以太网络初始化程序 系统启动进程 应用1进程 应用2进程 SOCKET 设备1 设备2 设备3 设备4 驱动程序都放在核心里面 设备问题 调用 嵌入式通信软件的主要问题 61 嵌入式通信软件的模块分割 硬件和软件分割问题 驻留软件 主板软件 核心处理硬件 网络功能 硬件 软件 62 大小 性能的权衡计算机科学的学生和嵌入系统的学生肯定遇到关于大小和性能的问题的时候 他们相互争论 对于嵌入式通信空间缓存是另一种大小 性能权衡 一个查找表要放在存储器中缓存以便于快速查找 但不是缓存整个表 而是最近使用的 它可以改良系统性能 依照附加存储器的使用和缓存算法的复杂性来综合成本 存储器以不同的方式使用来适应应用和系统需求 例如EEPROM用在保持启动系统时的配置 ROM或FLASH保留启动代码 DRAM典型地用于驻留可执行代码 也可以用于存储数据包和数据缓冲 接收和发送数据 SRAM典型的用于表的缓存 因为缓存需要快速查找 SRAM往往是比较贵的和相同的字节数情况下要比DRAM占据更多空间 硬件和软件分割问题 嵌入式通信软件的模块分割 63 大小 性能的权衡在使用共享内存的交换机环境中高速内存被使用 在控制器件中双口存储器被用于接收和传送缓冲区描述符 如果导致高性能的话 对成本敏感系统增加的内存成本可以不调整 类似地 当性能是关键的时候 使用SRAM于作缓存 增加设计的复杂性可以被调整 硬件和软件分割问题 功能 性能 大小 成本 设计复杂性 哪个重要 没有合适的答案 嵌入式通信软件的模块分割 64 硬件加速问题 关于网络软件最早的描述所有信息都假定它运行在单一的一般目的的处理机 GPP 上 这些是象在工作站上使用一样的处理机 他们包括MIPS和POWERPC处理机线 有强壮的RISC 虽然这些处理机是强壮的 但是总存在一个用软件执行时获得性能的限制 对于设备 带小数量的低速接口 象10或100M以太网络 这些处理机可以足够了 当数据速率增加时候 或者存在大量的接口需要支持 软件就不能够保持增加性能 网络装置经常包含硬件加速来支持特定的功能 为了增加性能 网络装置常常包括支持特定功能的硬件加速 这种加速典型地发生在快速路径功能 考虑一个2层交换机 需要MAC幀转移功能的加速 一个带有24口的G级以太交换机 能够用从供应商那里的以太交换硅片建造 嵌入式通信软件的模块分割 65 ASICs不是所有的硅片供应商的硬件加速设备都可以利用 一些装置供应商相信硅片供应商不关注所有的性能要求或支持要求的端口数量 例如 设计要求为具有48个G级以太网络端口的一个单线卡上支持MAC和交换功能 硅片供应商不能够满足这些要求 于是一个应用特别集成电路 ASIC 需要被开发 当设计这个芯片时候 工程师能够增加功能规程到他们的系统中去 在我们的例子中 对3层和4层交换而言这是包括附加的功能 硬件加速问题 如市场上没有合适功能和性能的硬件硅片 怎么吧 嵌入式通信软件的模块分割 66 网络处理器网络处理器NP是另一类型的从供应商哪里得到的可以利用的网络加速硬件 网络处理器简单地是 可编程ASIC 它优化地履行网络功能 NP的性能接近ASIC 它比较大的灵活性 因为 microcode 能够被下载到NP里面完成特定功能 可编程硬件是重要的 因为网络协议发展需要改变 硬件需要分析许多域 包中的 和执行相应的动作 根据域 例如对象NAT这样的应用 有包中的一些域需要巧妙地处理以便反映地址的改变 NAT是很好地应用NP的例子 硬件加

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论