XTU《网络协议分析及编程》复习搜整
填空(20*2’)/简答题(4*10’)
写在前面:命中2015级这次考试的已用***标出
<TCP/IP是什么意思,其中英文全称是什么?>
在TCP/IP(英文全称:Transmission Control Protocol/Internet Protocol即传输控制协议/因特网协议,是一个由多种协议组成的协议族,定义了计算机通过网络互相通信及协议族各层次之间通信的规范。)协议体系中,进程之间的相互作用采用客户/服务器模型。
<在C/S模型中,客户与服务器分别表示的是什么?>
客户与服务器分别表示相互通信的两个应用程序进程。在C/S模型中,是根据通信发起的方向来区别一个应用程序进程是客户的还是服务端的。一般将发起通信的应用程序进程称为客户,而将负责等待接受客户通信请求并为客户端提供服务的应用程序进程称为服务器。
设置传输层的主要目的就是要实现网络环境下分布式进程之间的通信功能。
传输层需要解决在网络环境下分布式进程间通信所面临的以下两个方面的问题:
a.进程的命名与寻址。
<在网络环境下,你觉得应该怎样才能标识一个进程?>
TCP/IP参考模型提出了协议端口(Protocol Port,简称端口)的概念,用于标识通信的进程。其中,端口是一种抽象的软件结构(包括一些数据结构和I/O缓冲区)。端口操作类似于一般的文件I/O操作。与文件描述符类似,每个端口均拥有一个唯一的被称为端口号(Port Number)的16位无符号整数型标识符,范围是0~65535,用于区别不同的端口。
b.多重协议的识别。
在TCP/IP网络环境下,一个完整的网间通信需要由两个进程完成,并且这两个进程之间只能使用相同的传输层协议才能进行通信,也就是说,不可能通信的一端使用TCP协议,而另一端使用UDP协议。因此,一个完整的网间通信需要使用一个五元组<协议,本地地址,本地端口号,远程地址,远程端口号>才能唯一标识。其中,二元组<本地地址,本地端口号>称为网间进程通信中的本地端点地址(Endpoint Address),二元组<远程地址,远程端口号>称为网间进程通信中的远程端点地址,而三元组<协议,本地地址,本地端口号>称为一个半相关,五元组<协议,本地地址,本地端口号,远程地址,远程端口号>称为一个相关。
<你觉得怎样才能标识一个套接字?>
一个套接字可以看成是应用程序进程进行网间通讯的端点。而在网络环境下,一个应用程序进程又通常可用一个半相关<协议,本地地址,本地端口号>来进行唯一标识,因此,一个套接字显然也可以用上述半相关<协议,本地地址,本地端口号>来进行唯一标识,其中,二元组<本地地址,本地端口号>通常也称为套接字的端点地址。
显然,一个完整的TCP/IP网络通信连接可用通信双方所对应的套接字组成的套接字对来唯一标识。其中,通常将运行于客户端的套接字称为客户端套接字(Client Socket),而将运行于服务器端的套接字称为服务器端套接字(Server Socket)。
<你觉得客户端怎样才能知道服务器端套接字的端点地址?>
为了让服务器套接字的端点地址预先被客户端知道,服务器端套接字必须使用熟知(Well-Known)端口号。
<你觉得客户软件可以有哪些方法来找到服务器端套接字的端点地址?>
客户软件可用以下多种方法找到某个服务器套接字的端点地址:
a在编译程序时,将服务器套接字的端点地址说明为常量;
b要求用户在启动程序时输入服务器套接字的端点地址;
c从本地文件中获取服务器套接字端点地址的有关信息;
d通过某个组播或广播协议来查找服务器套接字的端点地址。
sockaddr结构虽然可适用于TCP/IP协议族中的端点地址,但由于使用套接字的每个协议族都精确地定义了它的端点地址,例如:每个TCP/IP端点地址是由以下字段构成:一个用来标识地址类型的2字节字段、一个2字节的端口号字段、一个4字节的IP地址字段(IPv4),以及一个未使用的8字节字段;
因此,套接字软件在头文件<netinet/in.h>中还为TCP/IP协议族提供了以下预定义结构sockaddr_in来指明这种格式:
显然,只使用TCP/IP协议的应用程序可以只使用上述sockaddr_in结构,而无需使用sockaddr结构。另外,由于TCP/IP协议族(表示为PF_INET)中各协议均使用一种单一的地址表示方式,其地址族用符号AF_INET表示,因此,在上述sockaddr_in结构中,地址类型字段sin_family应赋值为AF_INET。
网络字节顺序与主机字节顺序问题
<请问,在网络通信中,如何才能解决通信双方可能存在的采用了不同的主机字节顺序的问题?>
为了进行主机字节顺序与网络字节顺序之间的转换,套接字软件提供了以下四个转换函数:
① htons函数:htons就是host-to-network-fortype 'short'的意思,功能是把unsigned short类型的数据从主机字节顺序转换到网络字节顺序,调用成功时,将返回一个网络字节顺序的16位无符号短整型(unsigned short)值;若调用出错则返回-1。其函数原型如下:
#include< netinet/in.h>//含有sockaddr_in结构与字节顺序转换函数的定义
uint16_thtons(uint16_t hostshort);
在上述htons()函数的原型中,各参数的含义如下:
※ hostshort:一个16位无符号短整型值。
② htonl函数:htonl就是host-to-network-fortype 'long'的意思,该函数的功能是把unsigned long类型的数据从主机字节顺序转换到网络字节顺序,调用成功时返回一个网络字节顺序的32位无符号长整型(unsigned short)值;若调用出错则返回-1。其函数原型如下:
#include<netinet/in.h>
uint32_thtonl(uint32_t hostlong);
在上述htonl()函数的原型中,各参数的含义如下:
※ hostlong:一个32位无符号长整型值。
....................................................
.............查看更多,自行下载...........
....................................................
【附:一文一图】