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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

网络编程doc.docx

1、网络编程doc1.网络体系结构:网络层次结构和每层所使用协议的集合。2.应用层,传输层,网际层,网络接口层Internet是以ARPANET网络为雏形建立的。3.网络接口层:负责将其上的网络层要发送出去的数据发送到其下面的物理网络,或接受由物理网络发送到该目标机的数据帧,并抽出IP数据报交给网络层。网际层:把源主机上的分组根据需要发送到互联网中的任何一台目标主机上。传输层:完成两台主机之间的通信,实质是两台主机对应进程之间的通信。应用层:提供面向用户的网络服务。4.主机A和主机D通信,数据被送入主机A的协议栈中,然后从应用层开始依次通过协议栈的每一层,知道到数据被当作一串比特流送入物理网络,其

2、中每一层对收到的数据都要增加一些首部信息,这个过程叫作shu7ju的封装。目的主机D接受到数据流以后,又要从主机D的最低层协议开始,依次通过协议栈的每一层,知道数据被送到最高层应用层为止,接受方的每一层要对发送方对等层多加的数据头进行识别、提取和处理,这个过程叫作解封装。物理层数据传输方式有:模拟传输,数字传输。常用的数字信号编码方式有:NRZ码,DNRZ码,曼彻斯特码,差分曼彻斯特码。数据编码:是指将数据表示成适当的信号形式,以便数据的传输和处理。在数据传输系统中,主要采用3种数据编码技术:数字数据的模拟信号编码,数字数据的数字信号编码,模拟数据的数字信号编码。5数据传输的介质:同轴电缆,双

3、绞线,光缆。无线传输。6.数据传输方式:模拟传输,数据传输。7.数据通信的方式:单工通信,半双工通信,全双工通信。8.信道复用技术:频分多路复用技术,时分多路复用技术,光波分多路复用技术。9.数据链路:传输数据时,除了必须要有的一条物理线路外,还必须有一些必要的通信协议来控制这些数据的传输,把实现这些协议的硬件和软件加到链路上,就构成了数据链路。10.差错检验与校正:奇偶校验,方块校验,循环冗余校验。11.路由器的功能:路由和转发。12.IP数据报格式:1.版本号,占用4为二进制,2.头长度,用4位二进制,3.服务类型,用8位二进制,对数据报的处理方式,4.总长度,用16位二进制数表示,5.生

4、存时间,用8位二进制数表示,6.上层协议标识,用8位二进制数表示,7.校验和,用16位,8.源地址,用23位,9.目的地址,用32位。13.不产生ICMP差错报文:(1)ICMP报文发生差错,这是为了避免差错报文无休止产生而规定的,(2)目的地址是广播地址或多播地址的IP数据报,(3)作为链路层广播的数据报(4)不是IP分片的第一片,(5)源地址不是单个主机的数据报,就是说,源地址不能为零地址、回送地址,广播地址或多播地址。14.ICMP报文类型:目标不可达,重定向,超时,参数出错。15.路由选择算法:(1)路由器从收到的IP数据报中提取出目标IP地址,(2)搜索路由表,寻找能与目的IP地址完

5、全匹配的表目,如果能找到,就把报文发送给该表目指定的下一站路由器或者直接的网络接口,如果找不到,搜索路由表,把目标IP地址与子网掩码逐位“与”后找能与网络号想匹配的表目,如果能找到,就把报文发送给该表目指定的下一站路由器或直接连接的网络接口,如果找不到,就搜索路由表,寻找为“默认”的表目,把报文发送给指定的下一站路由器,如果找不到,就发送一个“目标不可达”的ICMP报文给源主机。16.主机A发送ARP请求,请求帧中数据部分包括,发送者的MAC地址,IP地址,目标IP地址,目标的MAC地址是广播地址,所有的网络中的主机都可以打开,只有符合目标IP地址的主机才回答ARP请求,把自己的MAC地址写入

6、,目标地址字段中发送给主机A,ARP请求者在自己的缓存中构建一个ARP表,将地址信号缓存起来。17.端口的功能:识别传输层上不同的网络通信程序。18.TCP提供的是可靠的,有链接的服务,协议复杂,其拥塞控制,数据校验,重传机制的网络开销很大,不适合实时通信,UDP提供无连接,不可靠的,协议简单,高效的传输数据,适合数据传输量小的场合。19.UDP:无连接,不可靠,面向报文 。 TCP:连接,可靠的,面向字节流。20.网络工作模式:C/S模式,B/S模式,混合模式。21.主机,先向本地域名服务器查询,要是没有就查询高速缓存查询,要是没有就向根域名服务器查询,在向顶级域名服务器查询,在向权限域名服

7、务器查询返回给主机。22.网络登录协议,指定不同的端口访问其他服务器。23.万维网工作过程:(1)用户受限要确定网页文件所在的URL,由ULR唯一确定用户要访问的文件在Internert上的位置,(2)浏览器向DNS发送请求,把域名转换成对应的IP地址(3)DNS进行查询后,向浏览器发送出应答,(4)在查得到的网页躲在的服务器IP地址后,就进入HTTP的工作阶段,浏览器向服务器IP地址的主机发出与端口80建立一条TCP链接(5)链接建立成功后,浏览器发送一条请求传出网页的HTTP命令,(6)服务器接受到请求后,向浏览器发送文件,(7)文件发送完了,服务器主动关闭TCP链接,(8)浏览器显示收到

8、的网页文件(9)要是文件中包含有图片,还要与服务器建立TCP链接下载图片。24.URL=协议名称+主机名(或IP地址)+目录与文件名 25.控制链接:数据链接:26.网络中两个通讯程序相互识别对方:在网络中位了标识通信的进程,首先要标识网络中进程所在的主机,在互联网中使用IP地址来标识不同的主机,其次要标识主机上不同的进程,主机上不同的进程问题,在网络协议中使用端口号来标识主机上的不同进程。由于不同的主机可能使用不同的网络协议,工作方式不同,地址的标识格式不同,用五元组来标识连两个通信的进程(协议,本地IP地址,本地端口号,远程IP地址,远程端口号)。27.五元组:协议,本地IP地址,本地端口

9、号,远程IP地址,远程端口号。28.套接口可以看成是两个网络应用程序进程通信时,各自通信连接中的一个端点。流式套接口SOCK_STREAM 提供了一种可靠地、面向连接的双向数据传输服务,实现了数据的无差错,无重复的发送,内设流量控制,被传输的数据看作是无记录边界的字节流数据报套接口 SOCK_DGRAM 提供一种无连接、不可靠的双向数据传输服务,数据报以独立的包形式被发送,并且保留了记录边界,不提供可靠性保证。原始套接口 SOCK_RAW 该套接口允许对较低层协议进行直接访问。29.网络字节顺序保证数据的正确性。Htonl()和WSAHtonl()参数是主机字节顺序4个字节 htons()和W

10、SAHtons()参数是主机字节顺序2个字节。30.网络程序要考虑的几个问题:(1)并发环境下的网络编程,(2)异构环境下的网络编程(字节顺序、字的长度、字节定界问题)(3)阻塞与非阻塞通道(4)服务类型的选择31.加载协议栈 int WSAStartup(WORD wVersionRequested, LPWSADATA ipWASData)第一个指定Winsock库的版本号。第二个参数是一个指向WSADATA结构的指针。创建套接口SOCKET socket(int af,int type,int protocol);af说明套接口使用的协议地址族TCP或UDP。Type 套接口的类型,pr

11、otocol 套接口使用的特定协议,如果不指定课设置为0。NULL,0。地址绑定 int bind(SOCKET s, const struct sockaddr FAR* name,int namelen)S 标识一个未绑定套接口的描述字,name 是一个与指定协议有关的地址结构指针,sin_family字段必须为AF_INET。服务器端监听连接 int listen(SOCKET s,int backlog) S标识一个已绑定了地址,但还未建立套接口 ,backlog 指定了正在等待连接的最大队列长度。Listen()仅适用于连接的套接口客户端请求连接 int connect(SOCKET

12、 s,const struct sockaddr FAR* name,int namelen)s指将要建立连接的套接口 name 是一个指向远端套接口地址结构namelen 标识name名字的长度。服务器端接受连接 SOCKET accept(SOCKET s,struct sockaddr FAR* addr,int FAR* addrlen)s标识一个套接口,处于连接状态,addr 存放发送连接请求的客户机的IP地址信息,addrlen 客户地址结构的长度。有链接的数据发送 int send(SOCKET s,const char FAR* buf,int len,int flags)S

13、用于标识已建立连接的套接口,buf 字符缓冲区,内有将要发送的数据,len将要发送的缓冲区中的字符数,flags 用于控制数据传输方式,它可以是0,MSG_DONTROUTE或MSG_OOB,0表示按正常方式发送数据。有链接的数据接收 int recv(socket s, char FAR* buf, int len, int flags)S标识已建立连接的套接口,buf用于接收数据的缓冲区,len缓冲区长度,flags 指定调用方式,flags参数可以是0,MSG_PEEK或MSG_OOB,0表示正常数据。无连接的数据接收 int recvfrom(SOCKET s, char FAR* b

14、uf,int len, int flags,struct sockaddr FAR* from, int FAR* fromlen) s 标识一个套接口,buf接收数据缓冲区,len缓冲区长度,flags 调用方式,from 指向存有源地址的缓冲区,fromlen 指向from缓冲区长度值,无连接数据发送 int sendto(SOCKET s,const char FAR* buf,int len, int flags, const struct sockaddr FAR* to, int tolen)s 标识套接口,buf 待发数据的缓冲区,len 指明 buf缓冲区中要发送的数据长度,f

15、lags 调用方式标志位,to 指针,指向接收数据的目的套接口的地址,tolen:to所指地址的长度。TCP:服务器#include #include #include#define DEFAULT_PORT 5050#pragma comment(lib,WS2_32.lib)void main() int iPort=DEFAULT_PORT; WSADATA wsaData; SOCKET sListen,sAccept; int iLen; int iSend; char buf=I am a server.; struct sockaddr_in ser,cli; printf(-n

16、); printf(Server waitingn); printf(-n); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) printf(Failed to load Winsock.n); return; /创建服务器端套接口 sListen=socket(AF_INET,SOCK_STREAM,0); if(sListen=INVALID_SOCKET) printf(socket() Failed:%dn,WSAGetLastError(); return; /一下建立服务器端地址 ser.sin_family=AF_INET; ser.sin_p

17、ort=htons(iPort); ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR) printf(bind() Failed: %dn,WSAGetLastError(); closesocket(sListen); return; /进入监听状态 if(listen(sListen,5)=SOCKET_ERROR) printf(listen() Falied:%dn,WSAGetLastError(); return; /初始化客户端地址长度参

18、数 iLen=sizeof(cli);/进入一个无限循环,等待客户的链接请求 while(1) sAccept=accept(sListen,(struct sockaddr*)&cli,&iLen); if(sAccept=INVALID_SOCKET) printf(accept() Failed: %dn,WSAGetLastError(); break; /输出客户IP地址和端口号 printf(Accepted client IP:%s,port:%dn,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);/给建立连接的客户端发送信息 iSend=

19、send(sAccept,buf,sizeof(buf),0); if(iSend=SOCKET_ERROR) printf(send() Failed.:%dn,WSAGetLastError(); break; else if(iSend=0) break; else printf(send() byte:%dn,iSend); printf(-); closesocket(sAccept); closesocket(sListen); WSACleanup();TCP客户端#include stdafx.h#include#include#include#define DEFAULT_P

20、ORT 5050#define DATA_BUFFER 1024#pragma comment(lib,WS2_32.lib)void main(int argc,char *argv) WSADATA wsaData; SOCKET sClient; int iPort=DEFAULT_PORT;/从服务器端接收的数据长度 int iLen;/接收数据的缓冲 char bufDATA_BUFFER;/服务器端地址 struct sockaddr_in ser;/判断输入的参数是否正确 /*if(argcbuf; int iSend=send(sClient,buf,sizeof(buf),0

21、); if(iSend=SOCKET_ERROR) printf(send(0 Failed.:%dn,WSAGetLastError(); break; else /从服务器端接收数据 iLen=recv(sClient,buf,sizeof(buf),0); if(iLen=0) return; else if(iLen=SOCKET_ERROR) printf(recv() Failed:%dn,WSAGetLastError(); return; printf(recv() data from server:%sn,buf); closesocket(sClient); WSAClea

22、nup();UDP服务器#include stdafx.h#include#include#pragma comment(lib,WS2_32.lib)/服务器端口号为5050#define DEFAULT_PORT 5050/接收数据缓冲区长度#define BUFFER_LENGTH 1024void main() int iPort=DEFAULT_PORT; WSADATA wsaData; SOCKET sSocket; /客户地址长度 int iLen; /发送的数据长度 int iSend; /接收数据长度 int iRecv; /要发送给客户的信息 char send_buf=

23、Hello! I am a server.; /接收数据的缓冲区 char recv_bufBUFFER_LENGTH; /本地地址和客户地址 struct sockaddr_in ser, cli; printf(-n); printf(Server waitingn); printf(-n); if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) printf(Failed to load Winsock.n); return; /产生服务器端套接口 sSocket=socket(AF_INET,SOCK_DGRAM,0); if(sSocket=INVALI

24、D_SOCKET) printf(socket() Failed: %dn,WSAGetLastError(); return; ser.sin_family=AF_INET; /htons()函数把一个双字节的主机字节顺序数转换为网络字节顺序 ser.sin_port=htons(iPort); /htonl()函数吧一个主机自己顺序的数转换为网络字节顺序 ser.sin_addr .s_addr=htonl(INADDR_ANY); if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR) printf(bind() Failed

25、:%dn,WSAGetLastError(); return; iLen=sizeof(cli); /初始化接收缓冲区 memset(recv_buf,0,sizeof(recv_buf); /进入一个无限循环,进行数据接收和发送 while(1) /从客户端接收数据 iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen); if(iRecv=SOCKET_ERROR) printf(recvfrom() Failed.:%dn,WSAGetLastError(); break; else if(iRecv=

26、0) break; else /输出接受到的数据 printf(recvfrom():%sn,recv_buf); /输出客户IP地址和端口号 printf(Accepted client IP:%s,port:%dn,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port); /给客户发送信息 iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli); if(iSend=SOCKET_ERROR) printf(sendto(0 Failed.:%dn,WSAGetLastError(); printf(-n); break; else if(iSend=0) break; else printf(sendto() succceeded!n); printf(-n); closesocket(sSocket); WS

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

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