《TCP IP网络编程》尹圣雨----5.第三章习题

(1)IP地址族IPv4和IPv6有何区别?在何种背景下诞生了IPv6?

IPv4和IPv6的差别主要是表示IP地址所用的字节数,IPv4是4字节地址族,而IPv6是16字节地址族,目前通用的地址族是IPv4。IPv6是为了应对2010年前后IP地址耗尽的问题而提出的标准。


(2)通过IPv4网路ID、主机ID及路由器的关系,说明向公司局域网中的计算机传输数据的过程。

向公司局域网中的计算机传输数据,首先是通过IPv4的网络ID找到公司局域网,路由器接到数据后,根据IPv4的主机ID找到该主机,将数据传输给目标主机。


(3)套接字地址分为IP地址和端口号。为什么需要IP地址和端口号?或者说,通过IP可以区分哪些对象?通过端口号可以区分哪些对象?

通过套接字地址中的IP地址能够找到相应主机,但是区分主机中的各个应用程序。所以还需要使用端口号将主机中的应用程序区分开。

换句话说,IP区分主机,而端口号是用来区分同一主机上的不同应用程序。


(4)请说明IP地址的分类方法,并据此说出下面这些IP地址的分类。

214.121.212.102(C类, 最后面一个字节是主机ID)

120.101.122.89(A类,后面三个字节都是主机ID)

129.78.102.211(B类,后面两个字节都是主机ID)


(5)计算机通过路由器或交换机连接到互联网。请说出路由器和交换机的作用。

若想构件网络,需要一种物理设备完成外网与本网主机之间的数据交换,这种设备便是路由器或者交换机。它们实际上也是一种计算机,只不过是为特殊目的而设计运行的。因此有了别名。所以,如果在我们使用计算机上安装适当的软件,也可以将其用作交换机。另外,交换机比路由器功能要简单一些,而实际用途差别不大。


(6)什么是知名端口?其范围是多少?知名端口中具有代表性的HTTP和FTP端口号各是多少?

0-1023是知名端口号,知名端口号一般分配给特定应用程序。HTTP,80port,FTP,21port(控制端口)


(7)向套接字分配地址的bind函数原型如下:
int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);

而调用时则用

bind(serv_sock, (struct sockaddr * )&serv_addr,sizeof(serv_adddr));

此处serv_addr为sockaddr_in结构体变量。与函数原型不同,传入的是sockaddr_in结构体变量,请说明原因。

原因:

struct sockaddr

{

sa_family_t  sin_family;//地址族

char  sa_data[14];//地址信息
}

直接向sockaddr结构体填充这些信息会带来麻烦。此结构体成员sa_data保存的地址信息中需包含IP地址和端口号,剩余部分应填充0,这也是bind函数要求的。而这对于包含地址信息来讲非常麻烦,继而就有了新的结构体sockaddr_in。若按照之前的讲解填写sockaddr_in结构体,则将生成符合bind函数要求的字节流。最后转换为sockaddr型的结构体变量,再传递给bind函数即可。


(8)请解释大端序、小端序、网络字节序,并说明为何需要网络字节序。

大端序:高位字节存放到低位地址。

小端序:高位字节存放到高位地址。

网络字节序:通过网络传输数据时约定统一方式——统一为大端序,先把数据数组转换成大端序各是再进行网络传输。因此,所有计算机接收数据时应是被该数据是网络字节序格式。

为何需要网络字节序:如果大端序系统传输数据0X1234时未考虑字节序问题,而直接以0x12,0x34的顺序发送。结果接收端以小端序方式保存数据,因此小端序接收的数据变成0x3412,而非0x1234。正因为会存在这样一种较为混乱的情况,所以必须在传输的时候统一一种字节序方式。


(9)大端序计算机希望把4字节整数型数据12传递到小端序计算机。请说出数据传输过程中发生的字节序变换过程。

4字节整数型12 ——》0x00 0x00 0x00 0x0c

大端序--》网络字节序--》小端序

0x00 0x00 0x00 0x0c-->0x00 0x00 0x00 0x0c-->0x0c 0x00 0x00 0x00 

(不是特别有把握)


(10)怎样表示回送地址?其含义是什么?如果向回送地址传输数据将发生什么情况?

回送地址(127.x.x.x)是本机回送地址(loopback address),即主机IP堆栈内部的IP地址。

一旦向回送地址传输数据,协议软件立即返回之,不进行任何网络传输。


你可能感兴趣的:(《TCP,IP网络编程》)