ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:419.85KB ,
资源ID:3608708      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3608708.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(网络协议.docx)为本站会员(b****6)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

网络协议.docx

1、网络协议物理层 功能:物理层负责数据以比特流的形式在物理介质中传输 物理介质:就是实际连接网络的设备,不同的接入技术使用不同的介质。比如:HFC使用光纤和同轴电缆;普通的调制解调器、 ISDN 和ADSL使用的是铜制双绞线;无线接入网使用的是无线频谱。采用的信号技术:电信号和光信号数据链路层 功能:数据链路层协议在一个单独的链路上移动数据报,数据链路层协议定义了在链路各端的节点之间交换数据单元的格式以及这些这些节点发送和接收这些数据报单元时进行的活动。确保网络中数据的可靠传输 数据单元形式:Frame 链路层协议:以太网(Ethernet)、令牌环、FDDI和PPP 特性:可以在路径的不同链路

2、中用不同的链路层协议处理数据报网络层 功能:管理节点间的网络连接,主要实现有三个功能: 1.确定路径(选路) 2.交换分组 3.呼叫建立 路由算法: 距离向量(DV) 链路状态(LS)传输层 链路管理:数据链路的建立、维持和释放; 帧同步:收方能从收到的比特流中区分一帧开始和结束的地方; 流量控制:发方发送数据的速率必须使收方来得及接收; 差错控制:收方收到有差错的数据帧时,能检错重传或纠错; 透明传输:不管所传数据是什么样的比特组合,收方都能正确接收。并能将数据与控制信息分开; 寻址:保证每一帧都能发送到目的站。会话层和表示层 会话层负责计算机之间会话的建立和管理 表示层负责解释数据并把数据

3、转换后的结果送到应用层应用层 任务 为用户提供服务。 应用层协议 规定应用进程在通信时所遵循的协议。 网际协议IP 传输控制协议TCP 用户数据报协议UDP 地址解释协议ARP 网际控制报文协议ICMPIP地址是一组32位的二进制数字,由四个字节构成,代表了网络和主机的地址。单一网络下的组成形式 IP地址 = 网络地址 + 主机地址切割成若干个子网时的形式 IP地址 = 网络地址 + 子网地址 + 主机地址原先的主机地址 = 子网地址 + 主机地址网络中IP地址、网络号码和子网掩码的关系 IP地址 AND 子网掩码 = 网络号码 地址解析协议ARP 解决IP地址与MAC地址的转换(映射)问题。

4、 IP地址是主机在网络层中的地址,为32bit; MAC地址是数据链路层中的硬件地址,为48bit; 要发送的IP数据报必须转变为MAC帧,才能发送到网络。因此需要在IP地址和MAC 地址之间进行转换; 若用户使用主机名字标识主机,因此需要在主机名字和IP地址之间进行转换;反向地址解析协议RARP 解决MAC地址与IP地址的转换(映射)问题。 主要用于无盘工作站启动; RARP的工作过程: 在局域网中有一个主机充当RARP服务器;内建硬件地址到IP地址的映射表。 无盘工作站广播发送一个RARP请求分组,内含自己的硬件地址; RARP服务器收到RARP请求分组后,从映射表中查出该无盘工作站的I

5、P地址, 然后发回一个RARP响应分组,内含无盘工作站的IP地址; 无盘工作站收到RARP响应分组后,就获得自己的IP地址。为了不必去记忆那些难记的IP地址,能够通过有意义的文字来记忆网络地址,便出现了域名系统(DNS,Domain Name System)。DNS的功能,简单地说,就是通过名称数据库将主机名称转换为IP地址。也可反向转换,即将IP地址转换为主机名称。 域名注册域名注册是Internet中用于解决地址对应问题的一种方法。域名注册遵循先申请先注册原则,管理机构对申请人提出的域名是否违反了第三方的权利不进行任何实质审查。每个域名都是独一无二的,不可重复的。域名解析域名解析是把域名指

6、向网站空间IP,让人们通过注册的域名可以方便地访问到网站一种服务。域名解析也叫域名指向、服务器设置、域名配置以及反向IP登记等等。用户数据报协议UDP 无连接的服务 只是在IP的数据报上增加了端口功能。 UDP数据报的最大长度= 6553520 = 65515 字节 (IP数据报的最大长度IP数据报的最小首部)传输控制协议TCP 面向连接的服务; 全双工点对点通信; 完全可靠(无丢失、无重复、无乱序); 可靠的连接建立和连接释放。网际协议IPIP协议是异地间数据包传输最基本的协议集,在网络层实现,提供无连接、无确认的服务,下面给出IP协议的特性 : a.因为IP是无连接的,所以每个数据都作为独

7、立的单元传输 b.IP协议无须确认,不提供对数据包是否到达、目的地的检测机制 c.IP不关心数据包通过因特网传输时所取的路径,路由选择有其他协议完成。 与IP协议配套使用的协议 地址解析协议ARP 反向地址解析协议RARP 因特网控制报文协议ICMP套接字,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。一般的网络系统都提供了以下3种不同类型的套接字: 流式套接字(SOCK_STREAM)。 数据报套接字(SOCK_DGRAM)。 原始套接字(SOCK_RAW)。流套接字(SOCK

8、_STREAM):流套接字用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复发送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议,即TCP(The Transmission Control Protocol)协议。数据包套接字(SOCK_DGRAM):数据包套接字提供了一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据包套接字使用UDP(User Datagram Protocol)协议进行数据的传输。由于数据包套接字不能保证数据传输的可靠性,对于有可能出现的

9、数据丢失情况,需要在程序中做相应的处理。原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据包套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据包套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。 带外数据 带外数据(outofband data),有时也称为加速数据(expedited data), 是指连接双方中的一方发生重要事情,想要迅速地通知对方。 阻塞模式 在阻塞模式下, 程序在调用接收函数时(如recv), 如果没有数据到达, 此函数会一直等待, 即当

10、前线程会被阻塞, 直到有数据时才返回! 换句话说,没有数据到达时,程序回在这行代码上等待,不继续往下执行。有数据到达后,函数返回 在非阻塞模式下, 程序在调用接收函数时, 接收函数会立即返回, 调用方还可以进行其它操作, 而当有数据到达进, 操作系统会通过某些方法(如事件)来通知你!换句话说,不论是否有数据到达,程序一直往下执行。而数据到达后,操作系统会通知程序,程序根据操作系统通知的信息来做相应处理 在 WINDOWS SOCKETS 设计中,对于不能立即完成的阻塞操作做如下处理:DLL初始化循环操作。在循环中,接收/发送WINDOWS 消息,检查 调用是否完成,,是否超时,必要时,终止循环

11、,退出阻塞。可以调用 WSACancelBlockingCall() 函数取消此阻塞操作,即发送取消任务消息至阻塞函数的线程 非阻塞模式 在非阻塞模式下利用socket事件的消息机制,Server端与Client端之间的通信处于异步状态下。 通常需要从CSocket类派生一个新类,派生新类的目的是重载socket事件的消息函数,然后在socket事件的消息函数中添入合适的代码以完成Client端与Server端之间的通信,与阻塞模式相比,非阻塞模式无需创建一个新线程。 这里将讨论当Server端socket事件FD_ACCEPT被触发后,该事件的处理函数OnAccept是如何进一步被触发的。其

12、它事件的处理函数如OnConnect,OnReceive等的触发方式与此类似。Winsock寻址 Winsock要兼容多个协议,因此要使用通用的寻址方式struct sockaddr u_short sa_family; /指定地址家族 char sa_data14; /*协议相关的地址,不同的地址家族存储内容不同*/字符串地址到值转换 Unsigned long inet_addr(const char* cp); 将“127.0.0.1”这样的地址转换为网络顺序存储的32位二进制数 Char* inet_ntoa(struct in_addr in);将32位二进制数转换为字符串流套接字编

13、程模型 服务端: 1套接字的创建和关闭 2 绑定套接字到指定的IP地址和端口号 3 设置套接字进入监听状态 4 接收连接请求 5 收发数据 客户端: 1 套接字创建和关闭 2 申请建立连接 3 收发数据 4 断开连接,关闭数据报编程模型服务端:创建套接字绑定IP地址和端口收发数据关闭连接客户端:创建套接字收发数据关闭连接 阻塞模式/非阻塞模式 select模型 WSAAsyncSocket模型 WSAEventSelect模型 Overlapped重叠IO模型 Completion port 完成端口模型select(选择)模型是winSock中最常见的I/O模型。WSAAsyncSelect

14、是一个简单的异步socket IO模型. 。WSAEventSelect与WSAAsyncSelect一样也是一种异步事件通知模型,不同的是WSAAsyncSelect是与窗口句柄关联在一起的,必须要要窗口才行,而WSAEventSelect是与事件对象关联的。套接字选项和IO控制命令 getsockopt 获取套接字选项 setsockopt 设置套接字选项 ioctlsocket IO控制 WSAIoctl 微软扩充的IO控制主要的Winsock函数1创建套接口SOCKET() SOCKET socket (int af, int type, int protocol); 举例: SOCK

15、ET sockfd=SOCKET( AF_INET, SOCK_STREAM, 0); /* 创建一个流式套接字。 SOCKET sockfd=SOCKET( AF_INET, SOCK_DGRAM, 0); /* 创建一个数据报套接字。 将套接口绑定到指定的网络地址BIND() int bind( SOCKET s, const struct sockaddr * name, int namelen); 相关的三种Winsock地址结构 有许多函数都需要套接字的地址信息,像UNIX 套接字一样,Winsock也定义了三种关于地址的结构,经常使用。 通用的Winsock地址结构,针对各种通信域

16、的套接字,存储它们的地址信息。 struct sockaddr u_short sa_family; /* 地址家族 char sa_data14; /* 协议地址 3启动服务器监听客户端的连接请求LISTEN() int listen( SOCKET s, int backlog); 4接收连接请求 ACCEPT() SOCKET accept( SOCKET s, struct sockaddr* addr, int* addrlen); 5请求连接CONNECT() int connect( SOCKET s, struct sockaddr * name, int namelen);

17、6向一个已连接的套接口发送数据SEND() int send( SOCKET s, char * buf, int len, int flags); 7从一个已连接套接口接收数据RECV() int recv( SOCKET s, char * buf, int len, int flags); 8按照指定目的地向数据报套接字发送数据SENDTO() int sendto( SOCKET s, char * buf, int len, int flags, struct sockaddr * to, int tolen); 9接收一个数据报并保存源地址,从数据报套接字接收数据RECVFORM(

18、) int recvfrom( SOCKET s, char * buf, int len, int flags, struct sockaddr* from, int* fromlen); 10关闭套接字CLOSESOCKET() int closesocket( SOCKET s); 11禁止在一个套接口上进行数据的接收与发送SHUTDOWN() int shutdown( SOCKET s, int how); 2获取与套接口相连的端地址GETPEERNAME() int getpeername( SOCKET s, struct sockaddr * name, int * namel

19、en); 3获取一个套接口的本地名字GETSOCKNAME() int getsockname( SOCKET s, struct sockaddr * name, int * namelen); 4将一个点分十进制形式的IP地址转换成一个长整型数INET_ADDR() unsigned long inet_addr (const char * cp); 5将网络地址转换成点分十进制的字符串格式INET_NTOA() char * inet_ntoa( struct in_addr in);Winsock的信息查询函数Winsock API提供了一组信息查询函数,让我们能方便地获取套接口所需要

20、的网络地址信息以及其它信息, (1)Gethostname() 用来返回本地计算机的标准主机名。 int gethostname(char* name, int namelen); (2)Gethostbyname() 返回对应于给定主机名的主机信息。 struct hostent* gethostbyname(const char* name); (3)Gethostbyaddr() 根据一个IP地址取回相应的主机信息。 struct hostent* gethostbyaddr(const char* addr, int len, int type); (4)Getservbyname()

21、 返回对应于给定服务名和协议名的相关服务信息。 struct servent* getservbyname(const char* name, const char* proto); (5)Getservbyport() 返回对应于给定端口号和协议名的相关服务信息。 struct servent * getservbyport(int port, const char *proto); (6)Getprotobyname() 返回对应于给定协议名的相关协议信息。 struct protoent * getprotobyname(const char * name); (7)Getprotoby

22、number () 返回对应于给定协议号的相关协议信息。 struct protoent * getprotobynumber(int number); Select(选择)模型是Winsock中最常见的I/O模型。 基本思想:是利用select函数,实现对多个套接字I/O的管理。 利用select函数,可以判断一个或多个套接字的状态,某个套接字是否存在要读取的数据,或者能否向一个套接字写入数据;只有在条件满足时,才对套接字进行输入输出操作,从而避免无功而返的I/O函数调用,避免频繁产生WSAEWOULDBLOCK错误,使I/O变得有序。 select的函数原型如下 其中fd_set数据类型,

23、代表一系列特定套接字集合int select( int nfds, /为保持兼容而设,可忽略 fd_set FAR * readfds, fd_set FAR * writefds, fd_set FAR * exceptfds, const struct timeval FAR * timeout 异步I/O模型通过调用WSAAsyncSelect()函数实现. 利用这个模型,应用程序可在一个套接字上,接收以Windows消息为基础的网络事件通知。 该模型的实现方法是通过调用WSAAsynSelect函数自动将套接字设置为非阻塞模式,并向WINDOWS注册一个或多个网络事件,并提供一个通知时

24、使用的窗口句柄。 当注册的事件发生时,对应的窗口将收到一个基于消息的通知。 WSAAsyncSelect函数 函数的定义是: int WSAAsyncSelect( SOCKET s, /s为需要事件通知的套接字 HWND hWnd, unsigned int wMsg, long lEvent ); WSAEventSelect事件选择模型和WSAAsyncSelect模型类似,它也允许应用程序在一个或多个套接字上,接收以事件为基础的网络事件通知。 该模型最主要的差别在于,网络事件会投递至一个事件对象句柄,而非投递至一个窗口例程。获取主机名和IP地址 gethostname() gethos

25、tbyname()获取网卡类型和子网掩码 RegOpenKeyEx() 函数功能描述:打开一个指定的注册表键 RegCloseKey 函数功能描述:释放指定注册键的句柄 RegCreateKeyEx 该函数用来创建注册表键,如果该键已经存在,则打开它(注册表键不区分大小写) RegDeleteKey 功能:用来删除一个注册表键值。 RegQueryValueEx 获取一个项的设置值 返回值 Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码 MAC:Media Access Control, NIC:Network Interface Card 库文件:Netapi32.lib, 头文件:Nb30.h4.4 获取系统支持的网络协议 WSAEnumProtocols()目录GetNetworkParams 获取本地计算机的网络参数。 参数Info out 一个指向缓冲的指针,它包含一个FIXED_INFO 结构,如果函数成功的话,该结构接收本地计算机的网络参数。该缓冲必须在之前由GetNetworkParams 函数分配。 pOutBufLen in 一个指向一个ULONG变量的指针,该变量指定FIXED_INFO结构的大小。如果不够大,则该函数会以合适的大小来填充这个变量,并返回一个ERROR_BUFFER_OVERFLOW的错误代码。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1