




免费预览已结束,剩余35页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机网络与通信 课程设计指导书 哈尔滨工业大学 威海 计算机学院 前 言 计算机网络与通信 课程是信息安全专业的重要专业课程之一 随着计算机网络技术的迅 速发展和在当今信息社会中的广泛应用 给 计算机网络与通信 课程的教学提出了新的更高的 要求 由于计算机网络是一门实践性较强的技术 课堂教学应该与实践环节紧密结合 将 计算机 网络与通信 课程建设成一流的课程 是近期 计算机网络与通信 课程努力的方向 希望同学们在使用本实验指导书及进行实验的过程中 能够帮助我们不断地发现问题 并提 出建议 使 计算机网络与通信 课程设计真正成为课堂教学的有益补充 同时也希望同学们能 够充分利用实验条件 认真完成实验 从实验中得到应有的锻炼和培养 目 录 一 一 计算机网络与通信计算机网络与通信 实验教学大纲实验教学大纲 1 1 1 学时安排 1 1 2 实验内容 1 1 3 试验要求 2 1 4 验收 2 二 实验一 二 实验一 PING 程序设计 选做实验 程序设计 选做实验 2 2 1 实验目的 2 2 2 实验内容 3 2 3 实验步骤和注意事项 3 三 实验二 文件传输协议的简单设计与实现 选做实验 三 实验二 文件传输协议的简单设计与实现 选做实验 4 3 1 实验目的 4 3 2 实验内容和要求 4 3 3 注意事项 4 四 实验三 局域网截包程序设计 选做实验 四 实验三 局域网截包程序设计 选做实验 5 4 1 实验目的 5 4 2 实验内容 5 4 3 实验步骤和注意事项 5 五 实验四 数据链路层协议的设计与实现 选做实验 五 实验四 数据链路层协议的设计与实现 选做实验 6 5 1 实验目的 6 5 2 实验内容 6 5 3 模拟实现环境 6 5 4 实验步骤和注意事项 7 六 实验五 网络协议六 实验五 网络协议 报文分析实验 必做实验 报文分析实验 必做实验 7 6 1 实验目的 7 6 2 实验内容 7 6 3 模拟实现环境 7 6 4 实验步骤和注意事项 7 附录一 参考文献附录一 参考文献 9 附录二 附录二 SNIFFER 工具介绍工具介绍 10 1 安装 SNIFFER 10 2 捕捉数据包 13 3 分析捕获的数据包 16 附录三 附录三 SOCKET 编程编程 21 1 SOCKET 规范概述 21 2 WINDOWS 环境下 SOCKET 基本函数 22 3 RAW 模式的 SOCKET 编程 26 一 计算机网络与通信 实验教学大纲 1 1 学时安排 本课程设计安排 40 个学时的上机时间 每次 8 学时 1 2 实验内容 计算机网络是现代信息社会最重要的基础设施之一 在过去十几年里得到了迅速的发展和应 用 计算机网络与通信 课程实验的目的是为了使学生在课程学习的同时 通过在一个计算机 网络环境中的实际操作 对现代计算机网络的基本功能有一个初步的了解 通过一个简单的 PING 程序的设计和实现 理解 TCP IP 协议的工作机制和编程方法 通过实现一个文件传输协议 掌握 计算机网络应用层协议的基本实现技术 同时还提供了一些选做实验以供有余力有兴趣的同学进 一步提高 总之 通过上述实验环节 使学生加深了解和更好地掌握 计算机网络与通信 课程 教学大纲要求的内容 计算机网络与通信 课程设计共提供了 5 个实验 实验一 实验一 PINGPING 程序的设计与实现 选做实验 程序的设计与实现 选做实验 该实验的主要目的是使同学们掌握基于 TCP IP 网络编程的基本方法和思路 同时进一步熟悉 计算机网络与通信 课程中基于 IP 层协议的工作机制 实验二 实验二 文件传输协议的简单设计与实现 选做实验 文件传输协议的简单设计与实现 选做实验 文件传输是应用层中的一个主要协议 负责将主机中的文件从一台机器传送到另一台机器 文件传输协议 FTP 采用客户 服务器的工作模式 由客户端产生操作要求 服务器接收到该请求后 返回响应 该实验的目的是使同学们掌握应用层协议的实现方法 加深对客户 服务器的工作模式 的认识 本实验可以两个同学合作完成 需要在实验报告封面注明合作同学姓名 学号 本实验可以两个同学合作完成 需要在实验报告封面注明合作同学姓名 学号 实验三 局域网截包程序设计 选做实验 实验三 局域网截包程序设计 选做实验 局域网采用广播方式完成包的发送 因此任何机器发送的包 均可被局域网上的其它机器截 获 只要将以太网卡设置为 混杂模式 即可 该实验的主要目的是对 计算机网络与通信 课 程的局域网以及 IP 等相关知识巩固和复习 实验四 实验四 数据链路层协议的设计与实现 选做实验 数据链路层协议的设计与实现 选做实验 计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输 是计算机网络各层协议中通信控制功能最典型的一种协议 用于保证数据的可靠传输 进行流量 控制等基本功能 本实验实现一个数据链路层协议的数据传送部分 目的在于使学生更好地理解数据链路层协 议中的 滑动窗口 技术的基本工作原理 掌握计算机网络协议的基本实现技术 实验五 网络协议报文分析实验 必做实验 实验五 网络协议报文分析实验 必做实验 通过使用网络分析工具 如Sniffer Wireshark 或基于libpcap Winpcap等开发的专用工 具 分析网络信息通信过程 有助于帮助同学了解网络协议工作原理 也有助于提高网络安全 意识 本实验通过使用Sniffer Pro等工具分析网络数据 目的在于是学生掌握TCP IP协议的分级结 构 了解网络通信过程 1 3 试验要求 在 计算机网络与通信 的课程实验过程中 要求学生做到 1 预习实验指导书有关部分 认真做好实验内容的准备 就实验可能出现的情况提前作出思考 和分析 2 仔细观察上机和上网操作时出现的各种现象 记录主要情况 作出必要说明和分析 3 认真书写实验报告 实验报告包括实验目的和要求 实验环境及实验结果分析 对需编程的 实验 写出程序设计说明 给出源程序框图和清单 4 遵守机房纪律 服从辅导教师指挥 爱护实验设备 5 实验课程不迟到 如有事不能出席 所缺实验一般不补 1 4 验收 实验的验收将分为两个部分 第一部分是上机操作 包括检查程序运行和即时提问 第二部分是提交书面的实验报告 此外 针对以前教学中出现的问题 网络实验将采用阶段检查阶段检查方式 每个实验都将应当在规 定的时间内完成并检查通过 过期视为未完成该实验 不计成绩 以避免集中检查方式产生的诸 多不良问题 希望同学们抓紧时间 合理安排 认真完成 二 实验一 PING 程序设计 选做实验 2 1 实验目的 PING 程序是我们使用的比较多的用于测试网络连通性的程序 PING 程序基于 ICMP 使用 ICMP 的回送请求和回送应答来工作 由计算机网络课程知道 ICMP 是基于 IP 的一个协议 ICMP 包通过 IP 的封装之后传递 课程设计中选取 PING 程序的设计 其目的是希望同学们通过 PING 程序的设计 能初步掌握 TCP IP 网络协议的基本实现方法 对网络的实现机制有进一步的认识 2 2 实验内容 1 RAW 模式的 SOCKET 编程 PING 程序是面向用户的应用程序 该程序使用 ICMP 的封装机制 通过 IP 协议来工作 为了 实现直接对 IP 和 ICMP 包进行操作 实验中使用 RAW 模式的 SOCKET 编程 熟悉 SOCKET 的编程 包括基本的系统调用如 SOCKET BIND 等 参考附录二 2 具体内容 1 定义数据结构 需要定义好 IP 数据报 ICMP 包等相关的数据结构 2 程序实现 在 WINDOWS 环境下实现 PING 程序 3 程序要求 在命令提示符下输入 PING 其中 为目的主机的 IP 地址 不要求支持域名 对是否带有开关变量也不做要求 不 带开关变量时 要求返回 4 次响应 返回信息的格式 REPLY FROM 或 REQUEST TimeOut 无法 PING 通的情况 2 3 实验步骤和注意事项 实验按下述步骤进行 1 熟悉IP以及ICMP协议的工作机制 2 熟悉RAW模式的SOCKET编程 3 编写PING的实现程序 4 编译环境中需要包括SOCKET库 WS2 32 lib 5 在模拟实现环境下调试并运行自己编写的PIGN程序 6 最后提交源程序 撰写实验报告 三 实验二 文件传输协议的简单设计与实现 选做实验 3 1 实验目的 文件传送是各种计算机网络都实现的基本功能 文件传送协议是一种最基本的应用层协议按 照客户 服务器的模式进行工作 提供交互式的访问 是INTERNET使用最广泛的协议之一 本实验的目的是 学会利用已有网络环境设计并实现简单应用层协议 掌握TCP IP 网络应用 程序基本的设计方法和实现技巧 3 2 实验内容和要求 1 实验内容 我们的计算机网络实验环境建立在TCP IP 网络体系结构之上 各计算机除了安装TCP IP 软 件外 还安装了TCP IP 开发系统 实验室各计算机具备Windows环境中套接字socket 的编程接口 功能 可为用户提供全网范围的进程通信功能 本实验要求学生利用这些功能 设计和实现一个 简单的文件传送协议 2 具体要求 用socket 编程接口编写两个程序 分别为客户程序 client c 和服务器程序 server c 该程序应能实现下述命令功能 get 取远方的一个文件 put 传给远方一个文件 pwd 显示远主当前目录 dir 列出远方当前目录 cd 改变远方当前目录 显示你提供的命令 quit 退出返回 这此命令的具体工作方式 指给出结果的形式 可以参照FTP 的相应命令 有余力的同学可 以多实现几个命令 最后 写出实验报告 3 3 注意事项 1 关于端口号 假设用SERV PORT 来表示 的设定 原则上2000 至5000都可用 为避免冲突 建议取你学号后三位数加上2000 比如学号为971234 则可定义 define SERV PORT 2234 2 客户和服务程序中要有相应的include 文件 参考所给例子程序 3 有些同学的server 方程序支持多连接 为了不占用更多的系统资源 并发连接数限制在3 个 以内 4 最后提交源程序 撰写实验报告 在实验报告中说明设计的思路 四 实验三 局域网截包程序设计 选做实验 4 1 实验目的 目前的局域网基本上都采用以广播为技术基础的以太网 任何两个节点之间的通信数据包 不仅为这两个节点的网卡所接收 也同时为处在同一以太网上的任何一个节点的网卡所截取 因 此 黑客只要接入以太网上的任一节点进行侦听 就可以捕获发生在这个以太网上的所有数据包 对其进行解包分析 从而窃取关键信息 这就是以太网所固有的安全隐患 网上主要的免费黑客 攻击工具如 SATAN ISS NETCAT 等均将以太网侦听作为基本的手段 本实验实现一个局域网截包程序 目的在于使学生能更好地理解网络的工作机制 包括封包 机制 协议分析等 该实验是对 计算机网络与通信 课程一个有益的补充 4 2 实验内容 在一个局域网环境中 用C 语言实现下面的基本功能 1 确定截包的方法 包括RAW 模式SOCKET PACKET32以及直接作为驱动程序挂在NDIS上 2 要求截获以下包的类型并分析 以太网帧格式 IP包 ICMP包 TCP报文段 UDP报文等 相关字段进行描述 4 3 实验步骤和注意事项 实验按下述步骤进行 1 熟悉RAW模式的SOCKET编程 2 熟悉PACKET32的工作机制 3 熟悉WINDOWS 2000环境下NDIS驱动程序的编写方法 4 编写基于上述某一机制的局域网截包的实现程序 5 在模拟实现环境下调试并运行自己编写的协议实现程序 6 如出现异常情况 在实验报告中记录并分析可能的原因 7 最后提交源程序 撰写实验报告 五 实验四 数据链路层协议的设计与实现 选做实验 5 1 实验目的 计算机网络的数据链路层协议保证通信双方在有差错的通信线路上进行无差错的数据传输 是计算机网络各层协议中通信控制功能最典型的一种协议 本实验实现一个数据链路层协议的数据传送部分 目的在于使学生更好地理解数据链路层协 议中的 滑动窗口 技术的基本工作原理 掌握计算机网络协议的基本实现技术 5 2 实验内容 在一个数据链路层的模拟实现环境中 用C 语言实现下面两个数据链路层协议 1 退回到N 重发 的滑动窗口协议 参考文献 1 第四章的协议5 2 选择重发 的滑动滑动窗口协议 参考文献 1 第四章的协议6 5 3 模拟实现环境 数据链路层协议位于物理层之上 网络层之下 它使用物理层提供的服务 并且向网络层的 分组数据传输提供可靠的服务 由于构造实际的工作环境需要系统提供支持 难度较大 因此 实现一个数据链路层协议必 须要有一个模拟实现环境 在本实验中 我们仍然采用基于SOCKET的模拟通信环境 这个模拟系统由以下几部分组成 两个代码文件sim c 和worker c 一个通用的头文件common h 包含类型预定义 常量定义等 协议文件使用的头文件potocol h 包含支撑函数的函数声明等 模拟系统使用三个进程 main 控制整个模拟系统 MO 协议2 和协议3 的发送方 machine 0 M1 协议2 和协议3 的接收方 machine 1 文件sim c 中包含着主程序 它首先分析命令行并且将参数保存起来 接着创建六个管道使 得三个进程之间能够进行通信 所创建的文件描述字以如下方式命名 MO 和M1 的通信 w1 r1 MO 到M1 的帧传递 w2 r2 M1 到MO 的帧传递 Main 和MO 的通信 W3 r3 main 通知MO go ahead w4 r4 MO 通知main MO 已准备好 Main 和M1 通信 w5 r5 main 通知Mgo ahead w6 r6 M1 通知main M1 已准备好 5 4 实验步骤和注意事项 实验按下述步骤进行 1 熟悉已给出的数据链路层协议模拟实现环境的功能 2 编写两个数据链路层协议的实现程序 3 在模拟实现环境下调试并运行自己编写的协议实现程序 4 了解协议的工作轨迹 如出现异常情况 在实验报告中写出原因分析 5 最后提交源程序 撰写实验报告 六 实验五 网络协议 报文分析实验 必做实验 6 1 实验目的 通过实验掌握 Sniffer 工具的安装及使用 1 实现捕捉 ICMP TCP UDP 等协议的网络报文 2 理解 TCP IP 协议中数据报文的结构 会话连接建立和终止的过程 TCP 序列号 应答序号的 变化规律 了解网络中各种协议的运行状况 3 建立安全意识 防止明文密码传输造成的泄密 6 2 实验内容 1 了解 Sniffer 安装和基本使用方法 监测网络中的传输状态 2 定义过滤规则 进行广义的数据捕获 分析数据包结构 3 定义以下指定的捕获规则 出发并进行特定数据的捕获 并进行分析 Ping IP Address Ping IP Address l 2000 Ping HostName 分析当前主机执行此命令后网络所有交互过程 在 IE 中输入 分析相应 TCP 连接的前 10 个报文的 TCP 头 IP 头 通过 IE 或 Foxmail 等登录邮箱收发邮件 分析 SMTP POP3 协议交互过程 6 3 模拟实现环境 一台可以连上公网的 PC 机 6 4 实验步骤和注意事项 1 由于主机连接的是交换机 PC 机终端只能捕捉到自己发出的报文 无法接收到其他主机的网络 报文 所以所有事件需要学生在自己主机上触发 2 如果不设定规则 可能会捕获到很多冗余报文 影响分析 3 如果规则设定错误 则无法正确捕获报文 4 可以使用 Wireshark 等其他软件做本实验 但需要进行说明 5 实验报告中可以以贴图 但要加简短文字说明 附录一 参考文献 参考文献 1 Computer Networks Third Edition Andrew S Tanenbaum Prentice Hall 清华大学出版社影印 1996 中译本 计算机网络与通信 熊桂喜等译 清华大学出版社 1998 参考文献 2 TCP IP 网络原理与技术 周明天 汪文勇编著 清华大学出版社 1993 参考文献 3 计算机网络与通信 第5版 谢希仁编著 大连理工大学出版社 2010 附录二 SNIFFER 工具介绍 1 安装 Sniffer 1 1 Sniffer技术简介 Sniffer 嗅探器 就是利用计算机的网络接口截获目的地为其他计算机的数据报文的一种技术 该技术被广泛应用于网络维护和管理方面 它接收着来自网络的各种信息 通过对这些数据的分 析 网络管理员可以深入了解网络当前的运行状况 以便找出所关心的网络中潜在的问题 在正 常情况下 网络接口卡读入一帧并进行检查 如果帧中携带的目的地址 这里的目的地址是指物理 地址而非IP地址 该地址是网络设备的唯一性标志 和自己的物理地址一致或者是广播地址 就是被 设定为一次性发送到网络所有主机的特殊地址 当目标地址为该地址时 所有的网络接口卡都会 接收该帧 网络接口卡通过产生一个硬件中断引起操作系统注意 然后将帧中所包含的数据传送 给系统进一步处理 否则就将这个帧丢弃 如果网络中某个网络接口卡设置成 混杂 状态 网络接口卡会如何处理收到的帧呢 实际的情 况是该网络接口卡将接收所有在网络中传输的帧 无论该帧是广播的还是发向某一指定地址的 这就形成了监听 如果某一台主机被设置成这种监听模式 它就成了一个Sniffer 鉴于Sniffer的工作原理 如果一个数据帧没有发送到你的网络接口卡上 那么你将无法监听到 该帧 所以Sniffer所能监听到的信息仅限于在同一物理网络内传送的数据 在使用了交换 路由 设 备的网络中 由于其数据是根据目的地址进行分发的 单个的网络接口卡将无法监听到所有正在 传输的信息 1 2 双击安装的可执行程序 开始运行安装程序 1 3 安装过程中 要填写一些注册信息 可以简要的填写 注意软件的序列号要填写正确 图1 填写注册信息 图2 填写注册信息 1 4 安装块结束时 会让你选择接入Internet的方式 可以根据实际情况选取 图3 选择接入Internet的方式 图4 完成安装 1 5 安装成功后 重新启动机器 重新启动机器后 就可以程序菜单启动Sniffer 进入软件的开始界面 此时从File 菜单选择 Log on 此时sniffer开始工作 图5 启动 Sniffer Pro 2 捕捉数据包 2 1选中Monitor 菜单下的Matrix 此时可以看到网络中的Traffic Map 视图 图6 选择Matrix 视图 下图显示了网络中的Traffic Map 视图 在左下图可以通过点击MAC IP或IPX使Traffic Map 视图显示相应主机的MAC IP或IPX 地址 图7中显示的是网络中主机的IP地址 每条连线表明两 台主机间的通信 图7 查看Matrix 视图 2 2 在Capture 菜单中选中 Define Filter 图 8 定义捕捉数据的过滤器 弹出 Define Filter 选项框后 在 Advanced 选项中 选中 IP 从而定义了要捕捉的数据包类型 图 9 过滤器选项 2 3 回到Traffic Map 视图中 用鼠标选中要捕捉的主机的IP地址 选中后 主机地址会以白底高 亮显示 此时 点击鼠标右键 选中 Capture Sniffer 则开始捕捉指定IP地址的主机的数据 包 图 10 捕捉指定 IP 主机的数据包 2 4 开始捕捉后 通过点击工具栏中的 Capture Panel 如下图 看到捉包的情况 图中显示出 packet的数量 图 11 capture panel 窗口 2 5 从Capture Panel 中看到捕获的数据包已达到一定数量后 停止捕捉 点击 stop and Display 按钮 就可以停止抓包 图 12 停止捕捉并显示数据 2 6 点击窗口左下角的 Decode 选项 窗口中会显示所捕捉的数据 如下图 图 13 decode 窗口 3 分析捕获的数据包 如下图 可以看到 3 个窗口 窗口 1 中列出了捕捉到的数据 选中某一条数据后 窗口 2 和 3 中 分别显示相应的数据分析和原始的数据包 原始的数据是以 16 进制编码显示 图14 decode 窗口介绍 3 1 窗口2中显示出数据的封包情况 从图中可以看到 数据包封装后的情况与图15 图16所讲的 封包一致 图15 数据封包 TCP数据在IP数据报中的封装 图16 TCP数据在IP数据报中的封装 3 2 单击窗口2中的某一条 可以在窗口3中看到相应的原始数据的背景成灰色 表明这些数据与 之对应 单击窗口2中IP左边的 号 可以看到数据包的具体解释 图17 解释数据包 上图中 在窗口1中选中第一个数据包 窗口2中会展开该数据包中的IP数据部分 选中的部分 以蓝色背景显示 相应的在窗口3中 45 以灰色背景显示 这表明IP 数据包中表示IP Version 和 Header Length 的部分在原始数据中用16进制编码的 45 表示 同理 每在窗口 2 中选中一项 在窗口 3 中都会有相应的数据与之对应 仔细观察 会发现 每一字段都与图 18 中的 IPv4 包头结构一致 图18 IP包首部 3 3 在窗口2中展开TCP的首部 窗口3中会加亮显示相应的数据 图 19 数据包与解释的对应关系 仔细与图 20 中的 TCP 包头结构比较 会发现它们也是一一对应的 图20 TCP包首部 3 4 对ICMP数据包的捕获 同对TCP和IP数据包捕获的过程类似 一点区别是在Capture 菜单中选择Define Filter 然后在 Advance选项中选中IP中的ICMP 3 5 此时 可以选中一台机器 开始对其抓包 可以抓自己的数据包 开始抓包后 被抓包的机器 进入DOS界面 使用Ping 命令ping网络中的任意一台主机 完成后 停止抓包 这时 回到 decode 界面 可以看到刚才使用ping 命令中的ICMP数据包 从下图中可以看到捕获了 Echo 和 Echo Reply 数据包 图 21 ICMP 数据包 附录三 SOCKET 编程 1 SOCKET 规范概述 Windows Sockets 规范以 U C Berkeley 大学 BSD UNIX 中流行的 Socket 接口为范例定义了一 套 Micosoft Windows 下网络编程接口 它不仅包含了人们所熟悉的 Berkeley Socket 风格的库函 数 也包含了一组针对 Windows 的扩展库函数 以使程序员能充分地利用 Windows 消息驱动机制 进行编程 Windows Sockets 规范本意在于提供给应用程序开发者一套简单的 API 并让各家网络软件供 应商共同遵守 此外 在一个特定版本 Windows 的基础上 Windows Sockets 也定义了一个二进制 接口 ABI 以此来保证应用 Windows Sockets API 的应用程序能够在任何网络软件供应商的符 合 Windows Sockets 协议的实现上工作 因此这份规范定义了应用程序开发者能够使用 并且网 络软件供应商能够实现的一套库函数调用和相关语义 遵守这套 Windows Sockets 规范的网络软件 我们称之为 Windows Sockets 兼容的 而 Windows Sockets 兼容实现的提供者 我们称之为 Windows Sockets 提供者 一个网络软件供应商 必须百分之百地实现 Windows Sockets 规范才能做到现 Windows Sockets 兼容 任何能够与 Windows Sockets 兼容实现协同工作的应用程序就被认为是具有 Windows Sockets 接口 我们称这种应用程序为 Windows Sockets 应用程序 Windows Sockets 规范定义并记录了如何使用 API 与 Internet 协议族 IPS 通常我们指的是 TCP IP 连接 尤其要指出的是所有的 Windows Sockets 实现都支持流套接口和数据报套接口 应用程序调用 Windows Sockets 的 API 实现相互之间的通讯 Windows Sockets 又利用下层的 网络通讯协议功能和操作系统调用实现实际的通讯工作 它们之间的关系如下图 图 22 Socket 通讯协议关系图 应用程序 1应用程序 N 网络编程截面 如 WINDOWS SOCKET 网络通信协议服务截面 如 TCP IP 操作系统 如 WINDOWS 物理通信介质 2 WINDOWS 环境下 SOCKET 基本函数 1 WSAStartup 函数 int WSAStartup WORD wVersionRequested LPWSADATA lpWSAData 使用 Socket 的程序在使用 Socket 之前必须调用 WSAStartup 函数 该函数的第一个参数指明 程序请求使用的 Socket 版本 其中高位字节指明副版本 低位字节指明主版本 操作系统利用第 二个参数返回请求的 Socket 的版本信息 当一个应用程序调用 WSAStartup 函数时 操作系统根 据请求的 Socket 版本来搜索相应的 Socket 库 然后绑定找到的 Socket 库到该应用程序中 以后 应用程序就可以调用所请求的 Socket 库中的其它 Socket 函数了 该函数执行成功后返回 0 例 假如一个程序要使用 2 1 版本的 Socket 那么程序代码如下 wVersionRequested MAKEWORD 2 1 err WSAStartup wVersionRequested 2 WSACleanup 函数 int WSACleanup void 应用程序在完成对请求的 Socket 库的使用后 要调用 WSACleanup 函数来解除与 Socket 库的 绑定并且释放 Socket 库所占用的系统资源 3 socket 函数 SOCKET socket int af int type int protocol 应用程序调用 socket 函数来创建一个能够进行网络通信的套接字 第一个参数指定应用程序 使用的通信协议的协议族 对于 TCP IP 协议族 该参数置 PF INET 第二个参数指定要创建的套接 字类型 流套接字类型为 SOCK STREAM 数据报套接字类型为 SOCK DGRAM 第三个参数指定应用 程序所使用的通信协议 该函数如果调用成功就返回新创建的套接字的描述符 如果失败就返回 INVALID SOCKET 套接字描述符是一个整数类型的值 每个进程的进程空间里都有一个套接字描 述符表 该表中存放着套接字描述符和套接字数据结构的对应关系 该表中有一个字段存放新创 建的套接字的描述符 另一个字段存放套接字数据结构的地址 因此根据套接字描述符就可以找 到其对应的套接字数据结构 每个进程在自己的进程空间里都有一个套接字描述符表但是套接字 数据结构都是在操作系统的内核缓冲里 下面是一个创建流套接字的例子 struct protoent ppe ppe getprotobyname tcp SOCKET ListenSocket socket PF INET SOCK STREAM ppe p proto 4 closesocket 函数 int closesocket SOCKET s closesocket 函数用来关闭一个描述符为 s 套接字 由于每个进程中都有一个套接字描述符 表 表中的每个套接字描述符都对应了一个位于操作系统缓冲区中的套接字数据结构 因此有可 能有几个套接字描述符指向同一个套接字数据结构 套接字数据结构中专门有一个字段存放该结 构的被引用次数 即有多少个套接字描述符指向该结构 当调用 closesocket 函数时 操作系统 先检查套接字数据结构中的该字段的值 如果为 1 就表明只有一个套接字描述符指向它 因此操 作系统就先把 s 在套接字描述符表中对应的那条表项清除 并且释放 s 对应的套接字数据结构 如果该字段大于 1 那么操作系统仅仅清除 s 在套接字描述符表中的对应表项 并且把 s 对应的套 接字数据结构的引用次数减 1 closesocket 函数如果执行成功就返回 0 否则返回 SOCKET ERROR 5 send 函数 int send SOCKET s const char FAR buf int len int flags 不论是客户还是服务器应用程序都用 send 函数来向 TCP 连接的另一端发送数据 客户程序一 般用 send 函数向服务器发送请求 而服务器则通常用 send 函数来向客户程序发送应答 该函数 的第一个参数指定发送端套接字描述符 第二个参数指明一个存放应用程序要发送数据的缓冲区 第三个参数指明实际要发送的数据的字节数 第四个参数一般置 0 这里只描述同步 Socket 的 send 函数的执行流程 当调用该函数时 send 先比较待发送数据的长度 len 和套接字 s 的发送缓 冲区的长度 如果 len 大于 s 的发送缓冲区的长度 该函数返回 SOCKET ERROR 如果 len 小于或 者等于 s 的发送缓冲区的长度 那么 send 先检查协议是否正在发送 s 的发送缓冲中的数据 如果 是就等待协议把数据发送完 如果协议还没有开始发送 s 的发送缓冲中的数据或者 s 的发送缓冲 中没有数据 那么 send 就比较 s 的发送缓冲区的剩余空间和 len 如果 len 大于剩余空间大小 send 就一直等待协议把 s 的发送缓冲中的数据发送完 如果 len 小于剩余空间大小 send 就仅仅把 buf 中的数据 copy 到剩余空间里 注意并不是 send 把 s 的发送缓冲中的数据传到连接的另一端的 而是协议传的 send 仅仅是把 buf 中的数据 copy 到 s 的发送缓冲区的剩余空间里 如果 send 函数 copy 数据成功 就返回实际 copy 的字节数 如果 send 在 copy 数据时出现错误 那么 send 就返回 SOCKET ERROR 如果 send 在等待协议传送数据时网络断开的话 那么 send 函数也返回 SOCKET ERROR 要注意 send 函数把 buf 中的数据成功 copy 到 s 的发送缓冲的剩余空间里后它就 返回了 但是此时这些数据并不一定马上被传到连接的另一端 如果协议在后续的传送过程中出 现网络错误的话 那么下一个 Socket 函数就会返回 SOCKET ERROR 每一个除 send 外的 Socket 函数在执行的最开始总要先等待套接字的发送缓冲中的数据被协议传送完毕才能继续 如果在等 待时出现网络错误 那么该 Socket 函数就返回 SOCKET ERROR 注意 在 Unix 系统下 如果 send 在等待协议传送数据时网络断开的话 调用 send 的进程会 接收到一个 SIGPIPE 信号 进程对该信号的默认处理是进程终止 6 recv 函数 int recv SOCKET s char FAR buf int len int flags 不论是客户还是服务器应用程序都用 recv 函数从 TCP 连接的另一端接收数据 该函数的第一 个参数指定接收端套接字描述符 第二个参数指明一个缓冲区 该缓冲区用来存放 recv 函数接收 到的数据 第三个参数指明 buf 的长度 第四个参数一般置 0 这里只描述同步 Socket 的 recv 函 数的执行流程 当应用程序调用 recv 函数时 recv 先等待 s 的发送缓冲中的数据被协议传送完毕 如果协议在传送 s 的发送缓冲中的数据时出现网络错误 那么 recv 函数返回 SOCKET ERROR 如果 s 的发送缓冲中没有数据或者数据被协议成功发送完毕后 recv 先检查套接字 s 的接收缓冲区 如果 s 接收缓冲区中没有数据或者协议正在接收数据 那么 recv 就一直等待 只到协议把数据接 收完毕 当协议把数据接收完毕 recv 函数就把 s 的接收缓冲中的数据 copy 到 buf 中 注意协议 接收到的数据可能大于 buf 的长度 所以在这种情况下要调用几次 recv 函数才能把 s 的接收缓冲 中的数据 copy 完 recv 函数仅仅是 copy 数据 真正的接收数据是协议来完成的 recv 函数返 回其实际 copy 的字节数 如果 recv 在 copy 时出错 那么它返回 SOCKET ERROR 如果 recv 函数 在等待协议接收数据时网络中断了 那么它返回 0 注意 在 Unix 系统下 如果 recv 函数在等待协议接收数据时网络断开了 那么调用 recv 的 进程会接收到一个 SIGPIPE 信号 进程对该信号的默认处理是进程终止 7 bind 函数 int bind SOCKET s const struct sockaddr FAR name int namelen 当创建了一个 Socket 以后 套接字数据结构中有一个默认的 IP 地址和默认的端口号 一个 服务程序必须调用 bind 函数来给其绑定一个 IP 地址和一个特定的端口号 客户程序一般不必调 用 bind 函数来为其 Socket 绑定 IP 地址和断口号 该函数的第一个参数指定待绑定的 Socket 描 述符 第二个参数指定一个 sockaddr 结构 该结构是这样定义的 struct sockaddr u short sa family char sa data 14 sa family 指定地址族 对于 TCP IP 协议族的套接字 给其置 AF INET 当对 TCP IP 协议族 的套接字进行绑定时 我们通常使用另一个地址结构 struct sockaddr in short sin family u short sin port struct in addr sin addr char sin zero 8 其中 sin family 置 AF INET sin port 指明端口号 sin addr 结构体中只有一个唯一的字段 s addr 表示 IP 地址 该字段是一个整数 一般用函数 inet addr 把字符串形式的 IP 地址转 换成 unsigned long 型的整数值后再置给 s addr 有的服务器是多宿主机 至少有两个网卡 那 么运行在这样的服务器上的服务程序在为其 Socket 绑定 IP 地址时可以把 htonl INADDR ANY 置给 s addr 这样做的好处是不论哪个网段上的客户程序都能与该服务程序通信 如果只给运行在多 宿主机上的服务程序的 Socket 绑定一个固定的 IP 地址 那么就只有与该 IP 地址处于同一个网段 上的客户程序才能与该服务程序通信 我们用 0 来填充 sin zero 数组 目的是让 sockaddr in 结 构的大小与 sockaddr 结构的大小一致 下面是一个 bind 函数调用的例子 struct sockaddr in saddr saddr sin family AF INET saddr sin port htons 8888 saddr sin addr s addr htonl INADDR ANY bind ListenSocket struct sockaddr 服务程序可以调用 listen 函数使其流套接字 s 处于监听状态 处于监听状态的流套接字 s 将 维护一个客户连接请求队列 该队列最多容纳 backlog 个客户连接请求 假如该函数执行成功 则返回 0 如果执行失败 则返回 SOCKET ERROR 9 accept 函数 SOCKET accept SOCKET s struct sockaddr FAR addr int FAR addrlen 服务程序调用 accept 函数从处于监听状态的流套接字 s 的客户连接请求队列中取出排在最前 的一个客户请求 并且创建一个新的套接字来与客户套接字创建连接通道 如果连接成功 就返 回新创建的套接字的描述符 以后与客户套接字交换数据的是新创建的套接字 如果失败就返回 INVALID SOCKET 该函数的第一个参数指定处于监听状态的流套接字 操作系统利用第二个参数 来返回新创建的套接字的地址结构 操作系统利用第三个参数来返回新创建的套接字的地址结构 的长度 下面是一个调用 accept 的例子 struct sockaddr in ServerSocketAddr int addrlen addrlen sizeof ServerSocketAddr ServerSocket accept ListenSocket struct sockaddr 10 connect 函数 int connect SOCKET s const struct sockaddr FAR name int namelen 客户程序调用 connect 函数来使客户 Socket s 与监听于 name 所指定的计算机的特定端口上 的服务 Socket 进行连接 如果连接成功 connect 返回 0 如果失败则返回 SOCKET ERROR 下面 是一个例子 struct sockaddr in daddr memset void daddr sin family AF INET daddr sin port htons 8888 daddr sin addr s addr inet addr 133 197 22 4 connect ClientSocket struct sockaddr sock socket AF INET SOCK RAW IPPROTO IP 或者 s WSASoccket AF INET SOCK RAW IPPROTO IP NULL 0 WSA FLAG OVERLAPPED 这里 我们设置了 SOCK RAW 标志 表示我们声明的是一个原始套接字类型 创建原始套接 字后 IP 头就会包含在接收的数据中 如果我们设定 IP HDRINCL 选项 那么 就需要自 己来构造 IP 头 注意 如果设置 IP HDRINCL 选项 那么必须具有 administrator 权限 要不就必须修改 注册表 HKEY LOCAL MACHINE System CurrentControlSet Services Afd Parameter 修改键 DisableRawSecurity 类型为 DWORD 把值修改为 1 如果没有 就添加 BOOL blnFlag TRUE setsockopt sock IPPROTO IP IP HDRINCL char 对于原始套接字在接收数据报的时候 要注意这么几点 如果接收的数据报中协议类型和定义的原始套接字匹配 那么 接收的所有数据就拷 贝到套接字中 如果绑定了本地地址 那么只有接收数据 IP 头中对应的远端地址匹配 接收的数据就 拷贝到套接字中 如果定义的是外部地址 比如使用 connect 那么 只有接收数据
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 河南医师面试实战模拟题题库
- 职场精英必 备:竞赛队伍面试问题及答案分析
- 不限职业类型数据统计岗位面试题目及答案分享
- 高校校园环境建设规划与实施策略面试题库
- 学校安全知识培训课件通知
- 学校化妆基本知识培训课件
- 六年级数学上册第六单元《百分数(一)》重难点题型练习(含答案)
- 汽车行业供应链风险管理与供应链金融风险管理策略研究报告
- 金融行业数据治理与隐私保护体系构建及实施指南报告
- 不良资产处置行业市场格局分析:2025年创新模式与市场潜力报告
- 2025年贵州省中考英语真题含答案
- T/CBMCA 039-2023陶瓷大板岩板装修镶贴应用规范
- 华为财务管理(6版)-华为经营管理丛书
- 《Excel函数教程》课件
- 铁路工程建设标准体系及验收标准主要内容简介
- 国家中长期科技发展规划纲要2021-2035
- 中医健康养生知识宣教课件
- 幼儿园集团化办园实施方案
- GB/T 7759-1996硫化橡胶、热塑性橡胶常温、高温和低温下压缩永久变形测定
- 一体机使用培训-课件
- GB 18613-2020 电动机能效限定值及能效等级
评论
0/150
提交评论