当前位置:文档之家› 武汉理工大学TCPIP及网络编程复习重点

武汉理工大学TCPIP及网络编程复习重点

复习重点:TCP/IP基础:分层模型、IP地址特点、应用层主要协议;网络编程基础:预留常用端口号、TCP与UDP的主要特点及各自编程主要步骤、应用层的唯一标识、IO模型、MFC对Windows Sockets封装类、WinInet API的封装类功能;ARP:主要步骤、主要概念、主要函数及功能客户机/服务器模式编程:客户端/服务器端编程主要步骤、主要概念FTP:主要交互命令、请求流程HTTP:客户端请求主要命令、http请求流程电子邮件:客户端主要命令、标准信头、发生接收主要步骤编程分析:tcp编程客户机/服务器基本编程、udp基本编程。

TCP和UDP特点及各自编程步骤TCP特点:(1)TCP 是面向连接的运输层协议。

(2)每一条TCP 连接只能有两个端点(endpoint),每一条TCP 连接只能是点对点的(一对一)。

(3)TCP 提供可靠交付的服务。

(4)TCP 提供全双工通信。

(5)面向字节流。

(6)TCP不保证最小传输速率,TCP不允许发送进程以设想的速率发送数据(7)TCP不提供任何延时保障UDP 特点:(1)UDP 是无连接的,即发送数据之前不需要建立连接。

(2)UDP 使用尽最大努力交付,即不保证可靠交付,同时也不使用拥塞控制。

(3)UDP 是面向报文的。

UDP 没有拥塞控制,很适合多媒体通信的要求。

(4)UDP 支持一对一、一对多、多对一和多对多的交互通信。

(5)UDP 的首部开销小,只有8 个字节。

(6)UDP也不提供延时保障编程步骤:TCP编程UDP编程2.客户/服务器端编程主要步骤:3.电子邮件STMP指令QUIT:终止会话HELP:请求SMTP命令的帮助NOOP:空操作VRFY:验证地址(不要求一定启用)EXPN:扩展一个别名HELO:客户机问候服务器MAIL:指定邮件的发送者RCPT:指定邮件的接收者DA TA:发送邮件的数据状态REST:复位会话状态SEND:指定要发送到用户终端的邮件的发送者SOML:Send或MailSAML:Send和MailTURN:交换客户机/服务器角色标准信头:信头的一般格式信头由若干信头字段(header field)组成。

所有的信头字段包括:字段名,可选的空格,冒号“:”,可选的注解空格和可选的字段体,最后以回车换行符(CRLF)终止。

即信头字段= 字段名:字段体<CRLF>结构化字段和非结构化字段信头字段大体可以分为结构化字段和非结构化字段两种。

结构化字段有特定的格式,由语法分析程序检测。

非结构化的字段含有任意的数据,没有固定格式。

信头字段的元素尽管Email信件的总体结构非常简单,但一些信头字段的结构是很复杂的。

下面介绍一些大多数字段共有的元素。

(1)空白符(2)注解(3)字段折叠(4)字段大小写信头中必须要有的字段在创建信件时,必须使用Date或Resent-Date字段指定创建信件的日期,必须使用From字段指定创建该信件的人或程序的信箱,必须至少使用TO、CC或Bcc中的一个,或者与它们等效的Resent-TO,Resent-CC,Resent-Bcc中的一个,来指定接收信件的人。

除了这些创建信件时要求的信头以外,每个处理信件的邮件传输代理(MTA)必须在它处理的信件头部开始处加一个Received字段,就好像打了一个中转邮戳,这就是我们通常在许多信件的开始看到许多个Received字段的原因。

发送电子邮件的一般步骤1.打开邮件发送的对话;2.指定发送者的邮箱;3.指定接收者的邮箱;4.发送邮件的内容;5.结束邮件发送对话。

接收电子邮件的一般步骤首先利用Winsock连接上POP3服务器,然后:1.使用USER命令发送用户信箱名。

2.使用PASS命令发送信箱密码。

如果密码和信箱不匹配,必须从上一步骤重新开始。

3.对信箱邮件进行操作。

此阶段称为事务状态,在这一个阶段,有许多POP3命令可以使用,大体分为下面几类:(1)取得信箱及邮件状态的命令Stat:取得信箱大小信息List:取得邮件大小信息Uidl:取得邮件的唯一标识符。

(2)取得邮件内容的命令Retr:从服务器取回邮件TOP:取邮件信头和信体的前N行。

(3)对邮件进行操作的命令Dele:为邮件做删除标记。

Rset:复位POP会话。

4.接收邮件完毕,发送QUIT命令,结束POP3对话。

4.预留的常用端口号。

TCP UDP FTP SMTP TFTP HTTP6 17 21 25 69 80POP3 ONS SNMP RPC110 58 161 1355.应用层的唯一标识?套接字(IP地址+端口号)6.IO模型①Select(选择)②WSAAsyncSelect(异步选择)③WSAEventSelect(事件选择)④Overlapped(重叠)⑤Completion port(完成端口)注:Windows套接字在两种模式下执行I/O操作,及阻塞模式和非阻塞模式。

7.MFC对Windows Socket封装的类有哪些?CAsyncSocket类和CSocket类8.WinInet API的封装类功能。

①使用HTTP协议将HTML页面从服务器下载到浏览器中。

②发送FTP请求进行上传或下载文件,或获取目录列表。

③使用Gopher菜单系统获取网络资源。

④ 使用Gopher、FTP、HTTP协议建立于服务器的连接,向服务器发送请求以及断开与服务器之间的连接。

9.HTTP:客户端请求的主要命令和HTTP的请求流程9.1客户端请求的主要命令①GET:请求获取Request-URI所标识的资源。

②POST:在Request-URI所标识的资源后附加新的数据。

③HEAD:请求获取由Request-URI所标识的资源的响应消息报头。

④PUT:请求服务器存储一个资源,并用Request-URI作为其标识。

⑤Delete:请求服务器删除Request-URI所标识的资源。

⑥TRACE:请求服务器回送收到的请求信息,主要用于测试或诊断。

⑦CONNECT:保留将来使用。

⑧OPTIONS:请求查询服务器的性能,或者查询与资源相关的选项和需求。

9.2HTTP的请求流程HTTP协议属于TCP/IP网络模型中的应用层的协议,两个应用程序(这里指浏览器和服务器)之间要相互通信,首先得建立TCP连接,然后浏览器才能向服务器发送请求信息。

而服务器在收到请求信息后,将返回相应的应答信息给浏览器。

浏览器接收到来自服务器的应答信息后,对这些数据进行解释执行。

#include<winsock2.h>#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib")int main(){WSADATA data;WORD w=MAKEWORD(2,0);char sztext[]="欢迎你\r\n";::WSAStartup(w,&data);SOCKET s;s=::socket(AF_INET,SOCK_DGRAM,0);sockaddr_in addr,addr2;int n=sizeof(addr2);char buff[11]={0};addr.sin_family=AF_INET;addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=INADDR_ANY;::bind(s,(sockaddr*)&addr,sizeof(addr));printf("UDP服务器已经启动\r\n");while(1){if(::recvfrom(s,buff,11,0,(sockaddr*)&addr2,&n)!=0){printf("%s已经连接上\r\n",inet_ntoa(addr2.sin_addr));printf("%s\r\n",buff);::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr2,n);break;}}::closesocket(s);::WSACleanup();if(getchar()) //如果有输入则关闭程序{return 0; //正常结束程序}else{::Sleep(100);}}#include<winsock2.h>#include<stdio.h>#include<windows.h>#pragma comment(lib,"WS2_32.lib")int main(){WSADATA data;WORD w=MAKEWORD(2,0);char sztext[]="服务器,你好!\r\n";::WSAStartup(w,&data);SOCKET s;s=::socket(AF_INET,SOCK_DGRAM,0);sockaddr_in addr,addr2;int n=sizeof(addr2);char buff[10]={0};addr.sin_family=AF_INET;addr.sin_port=htons(75);addr.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");printf("UDP客户端已经启动\r\n");if(::sendto(s,sztext,sizeof(sztext),0,(sockaddr*)&addr,n)!=0) {::recvfrom(s,buff,10,0,(sockaddr*)&addr2,&n);printf("服务器说:%s\r\n",buff);::closesocket(s);::WSACleanup();}if(getchar()) //如果有输入则关闭程序{return 0; //正常结束程序}else{::Sleep(100);}}试卷答案1.流套接字提供:双向的,有序的,无重复的并且无记录的数据流服务,它适合于处理大量数据传输。

2.流套接字编程模型主要步骤有:①服务进程创建套接字②将本地地址绑定在所创建的套接字上以便在网络上标识该套接字③将套接字置入监听模式并准备接受连接请求④客户进程调用socket函数创建客户端套接字⑤客户向服务器发出连接请求3.WinInet是对WinInet API的封装,具有以下功能:①使用HTTP协议将HTML页面从服务器下载到浏览器中②发送FTP请求进行上传或下载文件,或获取目录列表③使用Gopher菜单系统获取网络资源④使用Gopher,FTP,HTTP协议建立于服务器的连接,向服务器发送请求以及断开与服务器之间的连接4.MFC提供了两个Windows Sockets封装类,即:CAsyncSocket类和CSocket类.5.信头中必须要有的字段在创建信件时,必须使用Date或Resent-Date字段指定创建信件的日期,必须使用From字段指定创建该信件的人或程序的信箱,必须至少使用TO、CC或Bcc中的一个,或者与它们等效的Resent-TO,Resent-CC,Resent-Bcc中的一个,来指定接收信件的人。

相关主题