




已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 14 1 基本概念基本概念 1 1 什么是协议 计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则 1 2 TCP IP 协议的四层体系结构 应用层 Telnet FTP HTTP DNS SNMP SMTP 传输层 TCP UDP 网络层 IP ICMP IGMP 链路层 以太网 令牌环网 FDDI IEEE802 3 1 3 IP 地址的结构 分类 多播 或称组播 目前使用的 IP 协议为 ipv4 即 IP 协议的第四版 使用 32 位二进制表示 结构 网络号主机号 分类 A B C D E 等五类地址 见下表 类别类标识地址范围第一字节网络地址长度最大网络数最大主机数选用范围 A 类 0 1 1261 字节 12616777214 大型网络 B 类 10 128 1912 字节 1638265534 中型网络 C 类 110 192 2233 字节 2097150254 小型网络 D 类 1110 224 0 0 0 239 25 5 255 255 224 239多点播送 E 类 11110 240 247保留地址 直接广播地址 主机号为全 1 的 IP 地址 多播 1 一对多的通信 一个源点发送到多个终点 2 标识一个多播的标识符即为一个 D 类地址 3 使用 IGMP 网际组管理协议 协议 首部的协议字段值为 2 4 多播地址只能用于目的地址 不能用于源地址 5 对多播数据报不产生 ICMP 差错报文 多播分两种 局域网范围的硬件多播 因特网范围的多播 因为大部分主机是通 过局域网接入到因特网的 因此在多播的最后阶段 还是要在局域网范围内进行 硬件多播 1 4 多播 或称组播 IP 地址 如何映射到 MAC 地址 组播 IP 地址 即 D 类地址 范围是 224 0 0 0 239 255 255 255 MAC 地址的前 25 位是固定的 后 23 位与 IP 地址的后 23 位相同 IP 地址 1110 yyyyyxxx xxxxxxxx xxxxxxxx xxxx MAC 地址 0000 00010000 00000101 11100 xxx xxxxxxxx xxxxxxxx xxxx 16 进制 0 10 05 e 1 5 标识网络中的两个通信的进程或一条连接 2 14 五元组 协议 本地 IP 地址 本地端口号 远程 IP 地址 远程端口号 1 6 socket 套接字 的三种协议类型及其应用场合 socket int af int type int protocol 函数中 当第二个参数为 AF INET 时 第三个参数 type 的值可以为 SOCK STREAM 流式套接字 SOCK DGRAM 数据报套接字 SOCK RAW 原始套接字 详情见下表 协议类型应用场合socket 函数中的 protocol 值 SOCK STREAMTCPIPPROTO TCP SOCK DGRAMUDPIPPROTO UDP SOCK RAWraw socketsIPPROTO ICMP 1 7 写代码 创建 socket 1 TCP SOCKET tcpSocket socket AF INET SOCK STREAM IPPROTO TCP 2 UDP SOCKET udpSocket socket AF INET SOCK DGRAM IPPROTO UDP 3 原始套接字 SOCKET icmpSocket socket AF INET SOCK RAM IPPROTO ICMP 1 8 TCP 的 C S 通信模型 WSAStartup socket bind listen accept send recv closesocket WSACleanup WSAStartup socket connect closesocket WSACleanup ServerClient 初始化 winsock 创建 socket socket 与本地 ip 端口绑定 监听客户端的连接 接受客户端的连接 关闭 socket 释放 winsock 资源 建立与服务器的连接 send recv 1 9 UDP 的 C S 通信模型 3 14 WSAStartup socket bind sendto recvfrom closesocket WSACleanup WSAStartup socket closesocket WSACleanup ServerClient 初始化 winsock 创建 socket socket 与本地 ip 端口绑定 关闭 socket 释放 winsock 资源 sendto recvfrom bind 1 10 服务器端的两种绑定方式的区别 IP 地址端口参数 方式 1 INADDR ANY 非 0 值 所有网卡都可接收连接 所有人都 可连接 方式 2IP 地址非 0 值某网卡接收 指定人群连接 函数 bind 原型为 int bind SOCKET s const struct sockaddr name int namelen 代码如下 SOCKET listenSocket struct sockaddr in service listenSocket socket AF INET SOCK STREAM IPPROTO TCP 绑定方式 1 service sin port htons 9999 service sin addr s addr inet addr INADDR ANY 绑定方式 2 service sin port htons 9999 service sin addr s addr inet addr 127 0 0 1 bind listenSocket SOCKADDR 1 11 函数 listen 中第二个参数的含义 函数原型为 int listen SOCKET s int backlog 第二个参数 backlog 设置等待连接队列的最大长度 若设置为 SOMAXCONN 则表 示可用的最大长度 1 12 在网络通信中 怎样传输一个字符串 可能含有汉字 4 14 统一字符编码为 UTF 8 传输时 先传输字符串的长度 再传输字符串内容 2 程序设计程序设计 2 1 写代码 两个线程 交替打印数字 步骤 步骤 WSAStartup 初始化winsock socket 创建TCP型的socket bind 绑定服务器的IP PORT listen 监听socket while continue accept 接收客户端的连接 创建新线程 传入通信用的socket 与客户端进行通信 closesocket 关闭socket WSACleanup 释放winsock资源 代码 代码 main cpp 多线程程序 两个线程 分别打印线程号 数字 include include include unsigned int CALLBACK myThread void p int main HANDLE handles 2 handles 0 HANDLE beginthreadex NULL 0 myThread NULL 0 NULL handles 1 HANDLE beginthreadex NULL 0 myThread NULL 0 NULL WaitForMultipleObjects 2 handles true INFINITE CloseHandle handles 0 CloseHandle handles 1 return 0 unsigned int CALLBACK myThread void p 5 14 for int i 1 i 10 i printf Thread u 打印 d n GetCurrentThreadId i Sleep 2000 return 0 程序截图 程序截图 2 2 程序设计步骤 多线程 TCP 服务器端程序 步骤 步骤 WSAStartup 初始化winsock socket 创建TCP型的socket bind 绑定服务器的IP PORT listen 监听socket while continue accept 接收客户端的连接 创建新线程 传入通信用的socket 与客户端进行通信 closesocket 关闭socket WSACleanup 释放winsock资源 代码 代码 多线程TCP服务器端程序 6 14 include include include pragma comment lib ws2 32 线程 处理一个客户机的网络通信 unsigned int CALLBACK tcpThread void p int main int iResult WORD wVersionRequested WSADATA wsaData SOCKET listenSocket SOCKET acceptSocket struct sockaddr in service HANDLE handles 10 wVersionRequested MAKEWORD 2 2 Initializing Winsock iResult WSAStartup wVersionRequested if iResult 0 printf WSAStartup failed with error d n iResult return 1 create a tcp socket listenSocket socket AF INET SOCK STREAM IPPROTO TCP if listenSocket INVALID SOCKET printf create socket falied with error d n WSAGetLastError WSACleanup return 1 bind the socket service sin family AF INET service sin port htons 9999 service sin addr s addr inet addr 127 0 0 1 iResult bind listenSocket SOCKADDR if iResult SOCKET ERROR printf bind failed with error d n WSAGetLastError 7 14 closesocket listenSocket WSACleanup return 1 listen for incoming connection requests iResult listen listenSocket SOMAXCONN if iResult SOCKET ERROR printf listen failed with error d n WSAGetLastError closesocket listenSocket WSACleanup return 1 printf listening on socket n accept new incoming connections int again 0 while again 10 struct sockaddr in client addr int client addr size sizeof client addr SOCKET clientSock accept listenSocket struct sockaddr if clientSock INVALID SOCKET closesocket listenSocket WSACleanup return 1 handles again HANDLE beginthreadex NULL 0 tcpThread void clientSock 0 NULL again WaitForMultipleObjects 10 handles TRUE INFINITE for int i 0 i 10 i CloseHandle handles i closesocket listenSocket WSACleanup return 0 8 14 线程 处理一个客户机的网络通信 unsigned int CALLBACK tcpThread void p SOCKET client SOCKET p do something recv send return 0 2 3 程序设计步骤 UDP 多循环服务器程序 步骤 步骤 WSAStartup 初始化winsock socket 创建UDP型的socket bind 绑定服务器的IP PORT while continue recvfrom 接收UDP包 sendto 发送UDP包 closesocket 关闭socket WSACleanup 释放winsock资源 代码 代码 UDP Server include include pragma comment lib ws2 32 int main WSAData wsaData WORD wVersionRequested int iResult struct sockaddr in service SOCKET listenSocket wVersionRequested MAKEWORD 2 2 iResult WSAStartup wVersionRequested if iResult 0 printf WSAStartup failed with error d n iResult return 1 listenSocket socket AF INET SOCK DGRAM IPPROTO UDP 9 14 if listenSocket INVALID SOCKET printf create socket failed with error d n WSAGetLastError WSACleanup service sin family AF INET service sin addr s addr inet addr 127 0 0 1 service sin port htons 9999 iResult bind listenSocket SOCKADDR if iResult SOCKET ERROR printf bind failed with error d n WSAGetLastError closesocket listenSocket WSACleanup return 1 struct sockaddr in client addr int len sizeof client addr while 1 do something recvfrom sendto closesocket listenSocket WSACleanup return 0 2 4 连接型 UDP 一般用于哪一方 什么场合 一般用于客户端 要求内核进行 UDP 包的过滤 2 5 广播程序 每隔 3 秒广播本地时间 步骤 步骤 WSAStartup 初始化winsock socket 创建socket setsockopt 允许广播 while continue getCurrentTime 获取本地时间 10 14 sendto 发送数据 Sleep 暂停3秒 closesocket 关闭socket WSACleanup 释放winsock资源 代码 代码 广播服务器端程序 每3秒广播服务器端的时间 include include include pragma comment lib ws2 32 void getcurtime char curtime time t tm time h time time h sprintf curtime s n ctime int main int iResult WORD wVersionRequested WSADATA wsaData SOCKET serverSocket struct sockaddr in service char on 1 char msg 256 serverSocket socket AF INET SOCK DGRAM 0 setsockopt serverSocket SOL SOCKET SO BROADCAST 允许发广播包 service sin family AF INET service sin port htons 9999 service sin addr s addr htonl INADDR BROADCAST while 1 getcurtime msg sendto serverSocket msg strlen msg 0 sockaddr 11 14 printf s n msg Sleep 3000 sleep 3 seconds between send closesocket serverSocket WSACleanup return 0 2 6 多播 或称组播 程序 每隔 3 秒多播本地时间 步骤 步骤 WSAStartup 初始化winsock socket 创建socket setsockopt 允许广播 while continue getCurrentTime 获取本地时间 sendto 发送数据到某D类地址 Sleep 暂停3秒 closesocket 关闭socket WSACleanup 释放winsock资源 代码 代码 多播服务器端程序 每3秒广播服务器端的时间 include include include pragma comment lib ws2 32 void getcurtime char curtime time t tm time h time time h sprintf curtime s n ctime int main int iResult WORD wVersionRequested WSADATA wsaData SOCKET serverSocket 12 14 struct sockaddr in service char on 1 char msg 256 serverSocket socket AF INET SOCK DGRAM 0 setsockopt serverSocket SOL SOCKET SO BROADCAST 允许发广播包 service sin family AF INET service sin port htons 9999 service sin addr s addr inet addr 226 6 6 6 printf 每3秒向组226 6 6 6发包 告之本机的时间 n while 1 getcurtime msg sendto serverSocket msg strlen msg 0 sockaddr printf s n msg Sleep 3000 sleep 3 seconds between send closesocket serverSocket WSACleanup return 0 3 协议分析协议分析 3 1 IP 数据报头部最大 小长度 头部选项最大 小长度 最多记录路由个数 头部最小长度 20 Bytes 头部最大长度 60 Bytes 选项最小长度 0 Bytes 选项最小长度 40 Bytes 最多记录路由 9 个 3 2 程序设计步骤 MyPing 源主机发送类型为 8 代码为 0 的 回送请求报文 当目标主机收到该报文时 将 标识符 序号 数据区复制以组成类型为 0 代码为 0 的 回送应答报文 发送给源主机 1 创建原始套接字 2 设置套接字的超时选项 如 6 秒 3 构造 ICMP 数据报 类型为 8 代码为 0 回送请求 13 14 4 构造 IP 数据报 将上述的 ICMP 数据报作为 IP 数据报的数据部分 设置超时选 项 5 发送 IP 数据报到目标 IP 地址 端口 6 若收到目标主机的类型为 0 代码为 0 的回头应答报文 则表示目标地址 端口号 可达 3 3 程序设计步骤 路由 MTU 发现 1 创建原始套接字 ICMP 协议 2 打开选项 3 构造 IP 报文 4 填写头部 报文头部长度设置为最大 不允许分片 5 填写数据 TCP 数据报 当路由器发现报文长度太长 需要分片 但报文头部设置为不允许分片 则路由器丢 弃该报文 并发送 ICMP 报文给源主机 本地收到 ICMP 报文后 将报文长度设置为收到 的 ICMP 报文长度 再次重新发送 IP 数据报 直到源主机收到来自目的主机的 TCP 确认 报文 最后一次发送的报文长度就是该路径的 MTU 3 4 程序设计步骤 记录两主机之间经过的路由 1 创建原始套接字 2 打开记录路由选项 选项类为 0 选项号为 7 选项长度为 39 指针初值为 4 初始时 指针指向存放第一个 IP 地址的位置 经过各路由器时 存入每个路由器的 IP 地址 指针的值每次加 4 最多可存放 9 个 IP 地址 3 5 程序设计步骤 FTP 断点续传 1 USER 用户名 2 PASS 口令 3 TYPE I 文件类型 二进制 4 FILE F 文件的数据结构 文件结构 5 MODE S 文件的传输方式 流 6 PORT IP 端口号 客户端 IP 端口号 7 REST N N 已下载的字节数 8 RETR 文件名 9 QUIT 退出 3 6 程序设计步骤 FTP 多线程下载 1 创建 N 个线程 通过 S
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 内蒙古大学数学试卷
- 奶粉品尝活动方案策划(3篇)
- 米字支撑施工方案(3篇)
- 鹤壁路面开槽施工方案(3篇)
- 感恩业主品牌活动策划方案(3篇)
- 挖碴装车施工方案(3篇)
- 药械知识考试题库及答案
- 北京市门头沟区2023-2024学年八年级下学期期中考试道德与法制考题及答案
- 新材料作文题目及答案
- 写好友作文题目及答案
- 医疗放射安全知识培训课件
- 2025年南京保安考试题库
- 2025年广东省中考历史试卷(含答案)
- GB 2536-2025电工流体变压器和开关用的未使用过的矿物绝缘油
- 轻食健康饮食课件
- 2025年电竞馆电脑采购合同范本
- 压疮PDCA降低长期卧床患者压疮发生率
- 2025版挖掘机采购合同及配件供应范本
- 武汉市养犬管理暂行办法
- 肝恶性肿瘤宣教
- 2025年网格员招聘笔试题库含答案
评论
0/150
提交评论