(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地址。
一旦向回送地址传输数据,协议软件立即返回之,不进行任何网络传输。