《tcpip最新复习要点.doc》由会员分享,可在线阅读,更多相关《tcpip最新复习要点.doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第一章1、Internet是以 ARPANET 网络为雏形建立的2、现在Internet中广泛使用的 TCP/IP 协议族,其版本为 V43、tcp/ip一般分为 网络接口层 , 网际层 , 传输层 和 应用层 四层4、常用的http工作在tcp./ip的 应用层 层5、ip地址属于tcp/ip中 网际层 的概念6、传输层常用的两个协议是 TCP 和 UDP7、网络接口卡工作再tcp/ip的 网络接口 层8、osi/rm开放系统互联参考模型共有 7 层 由 国际标准化组织 提出9、 中国互联网信息中心 是1997年6月3日组建的Internet管理和服务机构,行使我国互联网络信息中心的管理职责
2、10、rfc是指 请求评价文档第二章1、 按照覆盖的地理范围,计算机网络可以分为 局域网 , 城域网 和 广域网 三种2、 物理层常用的传输介绍有 双绞线 ,同轴电缆 , 光纤 和 无线 四种3、 物理层数据传输方式有 模拟传输 ,数字传输 , 光波传输 和 无线电传输 四种4、 在数据传输系统中,主要采用的数据编码技术有 数字数据的模拟编码 , 数字数据的数字信号编码 和 模拟数据的数字信号编码 三种5、 根据通信双方是否可以同时传输数据,通信可以分为 单工通信 , 半双工通信 和 全双工通信 三种通信方式6、 数据编码 是指将数据表示成适当的信号形式,以便数据的传输和处理7、 在数据传输系
3、统中,主要采用三种数据编码技术:即 数字数据的模拟编码 ,数字数据的数字信号编码 和 模拟数据的数字信号编码 8、 常用的数字信号编码方式 不归零 , 差分不归零 ,曼彻斯特 和 差分曼彻斯特 等第三章1、 一个ip地址由 网络号 和 主机号 两部分组成2、 Ip地址共分为 5 大类3、 一个ip地址用 4 个字节表示,最常用的一种表示格式是 点分十进制 4、 假设一个主机的ip地址为192.168.5.121,而子网掩码为255.255.255.248那么该主机的网络号部分(包括子网号部分)为 192.168.5.120/295、 以太网是利用 Arp 协议获得目的主机ip地址与Mac地址的
4、映射关系6、 在转发一个ip数据包过程中,如果路由器发现该数据报报头中的ttl字段为0,那么,它首先将该数据报 丢弃 ,然后向 源主机 发送ICMP报文7、 路由器选择算法工作在 网际层 ,它负责确定对所受到的ip数据包应通过哪条传输线转发8、 路由表分为 静态 路由表和 动态 路由表两种,它们建立与维护方式不同9、 tcp/ip协议簇专门设计了用于地址解析的协议,其中 ARP 可以把一个ip地址映射成对应的物理地址,而对于无法保存ip地址的主机, RARP 提供了从物理地址到ip地址的逆向地址映射第四章1、 传输层主要提供了 TCP 和 UDP 两个常用协议2、 端口号用一个 16 位的二进
5、制数表示3、 常用协议HTTP的端口号为 80 4、 Tcp可以提供 面向连接的可靠的数据流 服务。而udp可以提供 无连接的不可靠 服务第五章1、 DNS由 域名空间 ,服务器 和 解析器 三部分组成2、 顶级域名大致可以分为两类:一类是 组织性 顶级域名 另一类是 地域性 顶级域名,我国的顶级域名是 CN 。3、 在tcp/ip互联网中,电子邮件客户端程序向邮件服务器发送邮件使用 SMTP 协议,电子邮件客户端查看邮件服务器中自己的邮箱使用 POP3 协议,邮件服务器之间相互传递使用 SMTP 协议4、 ftp可以使用的四种文件类型是 ASCII码文件 , EBCDIC码文件 , 图像文件
6、 和 本地文件 。5、 在tcp/ip互联网中,www服务器与WWW浏览器之间的信息传递使用 HTTP 协议6、 URL由 协议名称 , 主机名 和 目录与文件名 三部分组成问答题:1、 什么是tcp/ipTCP/IP是网络中使用的基本的通信协议。虽然从名字上看TCP/IP包括两个协议,传输控制协议(TCP)和网际协议(IP),但TCP/IP实际上是一组协议,它包括TCP、IP、UDP、ICMP、RIP、TELNET、FTP、SMTP、ARP、TFTP等许多协议,这些协议一起称为TCP/IP协议。2、 网络协议分层的好处1)各层之间相互独立2)易于设计与实现3)易于维护3、 说明tcp/ip的
7、分层结构和各层的功能1)网络接口层 负责将其之上的网络层要发送出去的数据发送到其下面的物理网络2)网际层 把源主机上的分组根据需要发送到互联网中的任意一台目标主机上3)传输层 完成两台主机上对应的应用进程之间的通信,4)应用层 向用户提供一组常用的应用程序,4、 简要说明tcp/ip与iso/osi之间的关系Osi模型与tcp/ip模型都是以层次结构来定义协议栈的,尽管协议的层数不同,但层间功能的分配基本相似,相同点都有应用层、传输层、网络层。 都是下层服务上层。 不同点:层数不同。 模型与协议出现的次序不同,TCP/IP先有协议,后有模型(出 现早),ISO/OSI先有模型,后有协议(出现晚
8、)。5、简述路由器的工作原理与功能工作原理:路由器接收到数据包,提取目标IP地址及子网掩码计算目标网络地址;根据目标网络地址查找路由表,如果找到目标网络地址就按照相应的出口发送到下一个路由器;如果没有找到,就看一下有没有默认路由,如果有就按照默认路由的出口发送给下一个路由器;如果没有找到就给源IP发送一个出错ICMP数据包表明没法传递该数据包;如果是直连路由就按照第二层MAC地址发送给目标站点。功能:网络互连、数据处理、网络管理6、说明ip在tcp/ip协议栈中的地位与作用Ip是Tcp/ip协议簇中最重要的协议,从协议体系结构来看,向下它屏蔽了不同物理网络的底层,向上它提供了一个逻辑上统一的互
9、联网7、Ip主要有哪些功能将上层数据或同层的其他数据封装到ip数据包中将ip数据包传送到最终目的地为了使数据能够在链路上进行传输,对数据进行分段确定数据报到达其他网络的路径8、Ip有什么特点Ip是一种无连接不可靠的数据包传输协议,Ip互联网中的计算机没有主次之分,Ip互联网没有确定的拓扑结构在ip互联网中的任何一台主机都至少有一个独一无二的ip地址在互联网中有ip地址的设备,不一定是计算机9.、什么是端口号?你认为端口号用来表示什么?计算机服务或者是不同的进程都会有一个不同的端口号,程序到程序连接时候用的标识。10、比较tcp与udp(重要,什么是TCP和什么是UDP两题)TCP-有连接,所以
10、握手过程会消耗资源,过程为可靠连接,不会丢失数据,适合大数据量交换UDP-非可靠连接,会丢包,没有校验,速度快,无须握手过程11、唯一标识网络中的通信的一个进程要用什么样的三元组?本地协议、本地ip、本地端口号12、什么是Windows sockets?它就是定义了一套Micosoft Windows下网络编程接口。它包含大量的库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。13、 什么是套接口?定义了一种可靠的面向连接的服务,实现了无差错无重复的顺序数据传输.数据报套接口定义了一种无连接的服务,数据通过相互独立的报文进行传输,是无序的,并且不保证可靠,无差错.14、什么是网
11、络字节顺序?网络字节顺序NBO(Network Byte Order):按从高到低的顺序存储,在网络上使用统一的网络字节顺序,可以避免兼容性问题。15、开发网络程序要考虑哪些问题(重要)A) 并发环境下的网络编程B) 异构环境下的网络编程C) 阻塞与非阻塞通信D) 服务类型的选择16、Winsock中四个数据格式转换函数htonl、htons、ntohl和ntohs的功能有什么不同?Htonl:将主机的无符号长整形数转换成网络字节顺序。Htons:将主机的无符号短整形数转换成网络字节顺序。Ntohl:将一个无符号长整形数从网络字节顺序转换为主机字节顺序。Ntohs:将一个无符号短整形数从网络字
12、节顺序转换为主机字节顺序。17、IP地址转换函数有哪两个?它们各有什么功能?Inet_addr():将点分十进制数表示的IP地址转换为网络字节顺序的IP地址。Inet_ntoa():将网络字节顺序的IP地址转换为点分十进制数表示的IP地址。特殊IP地址:1、 网络地址:有效网络号和全0的主机地址组成,A取前8位,B取前16位,C取前24位2、 直接广播地址:有效网络号和全1的主机地址组成,网络号相同的所有主机收到数据报3、 有限广播地址:32位二进制全为1用于对本网广播通信,送往本网每一台主机4、 本网特定主机地址:网络地址全为0和有效的主机地址,往本网主机号的主机发送5、 回送地址:A类中网
13、络地址为127为保留地址,用于网络软件测试or本机进程间通信6、 本网络本主机:网络地址或主机地址全0表示本网络本主机,全1为一个广播地址私有IP地址A:10.0.0.1-10.255.255.254 B:172.13.0.1-. C:192.168.0.1-.编程题:1、 基于tcp的网络程序,其服务器端和客服端的工作流程如何?a) 服务端i. 使用WSAStatup()函数检查系统协议栈的安装情况ii. 使用socket函数创建服务器端通信的套接口iii. 使用bind()函数将创建的套接口与服务器地址绑定iv. 使用listen()函数使服务器套接口做好接收连接请求的准备v. 使用acc
14、ept()函数接收来自客户端由connect发出的连接请求vi. 建立连接后使用send()函数发送数据或使用recv()函数接收数据vii. 使用closesocket()函数关闭套接口viii. 调用WSAcleanup结束windows Sockets Api的调用b) 客户端i. 使用WSAStatup()函数检查系统协议栈的安装情况ii. 使用socket函数创建客户端通信的套接口iii. 使用connect()发出连接请求iv. 建立连接后使用send()函数发送数据或使用recv()函数接收数据v. 使用closesocket()函数关闭套接口vi. 调用WSAcleanup结束
15、windows Sockets Api的调用1,、编写基于tcp的客户端/服务器程序,要求当客户机向服务器发出请求后,将客户机从键盘输入的字符串信息传输给服务器,然后由服务器将其小写转换成大写原样返回小写-32=大写 大+32=小写1、 说明udp网络程序的工作流程服务端与客户端函数类似1)使用WSAStatup()函数检查系统协议栈的安装情况2)使用socket函数创建服务器端通信的套接口3)使用bind()函数将创建的套接口与服务器地址绑定4)使用sendto()发送数据也可以用recvfrom()接收数据5)使用closesocket()函数关闭套接口6)调用WSAcleanup结束wi
16、ndows Sockets Api的调用第十章1、 简单说明MFC中与网络程序设计有关的类a) 文件服务类b) Internet服务器Api类c) Internet服务类d) Windows套接口类程序设计类CAsyncSocket,和派生于CAsyncSocket的CSocket类2、 使用CSocket类设计网络程序有什么好处CSocket类派生于CAsyncSocket类,它继承了父类中一些常用易懂的windows SocketApi函数,并对CAsyncSocket中底层的较难控制的一些api进行了处理,为winsock api提供了一个更高级别的编程接口,它通过MFC carchiv
17、e对象进行信息的接收和发送操作,使得套接口数据的输入同输出如同使用MFC一样简洁易用,同时它支持模块化的后台信息处理,解决了较难克服的多线程处理。TCP代码服务器程序:#include”winsock2.h”#include”stdio.h”#include”time.h”#define MAX_BUFFER 1024#define DAYTIME_SERVER_PORT 13int main() SOCKET serverFd;int connectionFd,i=1;struct sockaddr_in servaddr;char timebufferMAX_BUFFER + 1;time
18、_t currentTime;WSADATA wsaData;if(WSAtartup(MAKEWORD(2,2) , &wsaData)= SOCKET_ERROR) printf(“命令套接口初始化失败n”);return -1;serverFd = socket(AF_INET , SOCK_STREAM , 0);if(serverFd = -1) printf(“socket errorn”);return (-1);memset(&servaddr , 0,sizeof(servaddr);servaddr.sin_family = AF_INET;servaddr.sin_add
19、r.S_un.S_addr =htonl(INADDR_ANY);servaddr.sin_port =htons(DAYTIME_SERVER_PORT);bind(serverFd, (struct sockaddr *)&servaddr , sizeof(servaddr);listen(serverFd ,5);while(1) connectionFd = accept(serverFd, (struct sockaddr *)NULL,NULL);if(connectionFd =0) currentTime =time(NULL);sprintf(timebuffer,”%sn
20、”,ctime(¤tTime);printf(“已有%d个访问者n”,i+);send(connectionFd , timebuffer , strlen(timebuffer),0);closesocket(connectionFd);return(1);客户端程序:(头文件与服务器端一样,忽略)int main(void) SOCKET connectionFd;int in;struct sockaddr_in servaddr;char timebufferMAX_BUFFER +1;WSADATA wsaData;if(WSAtartup(MAKEWORD(2,2) ,
21、 &wsaData)!=0) printf(“命令套接口初始化失败n”);return -1;connectionFd =socket (AF_INET , SOCK_STREAM , 0);if(connectionFd = -1) printf(“socket error!n”);return (-1);memset(&servaddr , 0,sizeof(servaddr);servaddr.sin_family = AF_INET;servaddr.sin_port =htons(DAYTIME_SERVER_PORT);servaddr.sin_addr.S_un.S_addr =
22、inet_addr(“127.0.0.1”);if(connect(connectionFd ,(struct sockaddr *)&servaddr,sizeof(servaddr)=INVALID_SOCKET)printf(“connect() Failed:%dn”,WSAGetLastError();return (0);while(in =recv(connectionFd , timebuffer , MAX_BUFFER, 0)0)timebufferin =0;printf(“n%s”,timebuffer);closesocket(connectionFd);return
23、(0);UDP服务器程序代码:#include”winsock2.h”#include”stdio.h”#include”stdlib.h”#define DEFAULT_PORT 5050 /服务器端口号为5050#define BUFFER_LENGTH 1024 /接收数据缓冲区长度void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sSocket;int iLen; /客户地址长度int iSend; /发送的数据长度int iRecv; /接受的数据长度char send_buf=”hello!I am a server.
24、”; /要发送给客户的信息char recv_bufBUFFER_LENTGTH; /接收数据的缓冲区struct sockaddr_in ser,cli; /本地地址和客户地址printf(“-n”);printf(“Server waitingn”);printf(“-n”);if(WSAtartup(MAKEWORD(2,2),&wsaData)!=0)printf(“Failed to load Winsock.n”);return;sSocket=socket(AF_INET,SOCK_DGRAM,0); /产生服务器端套接口if(sSocket=INVALID_SOCKET)pri
25、ntf(“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: %dn”,WSAGe
26、tLastError();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=0)break;elseprintf(“recv
27、from(): %sn”,recv_buf); /输出接收到的数据printf(“Accepted client IP:%s, port:%dn”,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);/输出客户IP地址和端口号/以下给客户发送信息iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli);if(iSend=SOCKET_ERROR)printf(“sendto() Failed: %dn”,WSAGetLastError();printf(“-n”)
28、;break;else if(iSend=0)break;elseprintf(“sendto() succeeded!n”);printf(“-n”);Closesocket(sSocket);WSACleanup();UDP客户端程序代码:#include”winsock2.h”#include”stdio.h”#define DEFAULT_PORT 5050 /服务器端口号为5050#define DATA_BUFFER 1024 /缓冲区长度void main(int argc,char *argv)WSADATA wsaData;SOCKET sClient;int iPort=5
29、050;int iLen; /服务器地址长度int iSend; /发送数据的长度int iRecv; /接受数据的长度char send_buf=”hello!I am a client.”; /要发送给服务器的信息char recv_bufDATA_BUFFER; /接收数据的缓冲区struct sockaddr_in ser; /服务器端地址if(argc2) /处理命令行中输入的参数Printf(“Usage:client server IP addressn”); /提示在命令行中输入服务器IP地址Return;memset(recv_buf,0,sizeof(recv_buf);
30、/接收数据的缓冲区初始化if(WSAtartup(MAKEWORD(2,2),&wsaData)!=0)printf(“Failed to load Winsock.n”);return;ser.sin_family=AF_INET; /建立服务器端地址ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(argv1);sClient=socket(AF_INET,SOCK_DGRAM,0); /建立客户端数据报套接口if(sClient=INVALID_SOCKET)printf(“socket() Failed: %dn”,WSAGetLa
31、stError();return;iLen=sizeof(ser); /(以下)向服务器发送数据iSend=sendto(sClient,send_buf,sizeof(send_buf),0,(struct sockaddr*)&ser,iLen);if(iSend=SOCKET_ERROR)printf(“sendto() Failed: %dn”,WSAGetLastError();return;else if(iSend=0)return;elseprintf(“sendto() succeeded!n”); /(以下)向服务器接收数据iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen);if(iRecv=SOCKET_ERROR)printf(“recvfrom() Failed: %dn”,WSAGetLastError();return;else if(iRecv=0)return;elseprintf(“recvfrom(): %sn”,recv_buf); /显示从服务器收到的信息printf(“-n”);closesocket(sClient);WSACleanup();10