20155332 补交课后测试——ch11网络编程

20155332 补交课后测试——ch11网络编程

这章的课后测试忘了提交,我课后补做了这章的测试题目,并将知识点和自己的错题汇总如下:

本章知识点总结

11.1 客户端-- 服务器模型

  • 每个网络应用程序都是基于客户端 - 服务器模型的,
    采用这种模型,一个应用是由一个服务器进程 和一个或多个客户端进程组成。

  • 服务器管理某种资源,并且通过操作这种资源为它的客户端提供某种服务。

    • WEB服务器,代表客户端检索,执行磁盘内容。
    • FTP服务器,为客户端进行存储和检索。
    • 电子邮件服务器,为客户端进行读和更新。
    • 客户端-服务器模型中的基本操作是事务(transaction).
  • 一个客户端-服务器事务由四步组成

    • 客户端需要服务的时候,向服务器发送请求,发送一个事务。
    • 服务器收到请求后,解释它,并以适当方式操作它的资源。
    • 服务器给客户端发送一个响应,并等待下一个请求。
    • 客户端收到响应并处理它。

11.2 网络

客户端和服务端通常运行在不同的主机上,并且通过计算机网络的硬件和软件资源来通信。

  • 对于一个主机而言,网络只是又一种I/O设备,作为数据源和数据接收方。

  • 对于物理上而言,网络是一个按照地理远近组成的层次系统。

    • 最低层是LAN(Local Area Network,局域网):在一个建筑或校园范围内。
    • 今为止,最流行的LAN技术是以太网(Ethernet),由Xerox PARC公司在20世纪70年代中期提出。以太网被证明是适应力极强的,从3 MB/s到10 GB/s
  • 每个以太网适配器(网卡)都有一个全球唯一的48位地址,它存储在这个适配器的ROM上(MAC)。

    • 一台主机可以发送一段位,称为帧(frame),到这个网段内其他任何主机。
      每个帧包括一些固定数量的头部(header)位
      用于表示此帧的源,和目的地址以及此帧的长度。
      此后就是数据位的有效载荷。
      每个主机适配器都能看到这个帧,但是只有目的主机实际读取它。

在层次的更高级别,多个不兼容的局域网可以通过叫做路由器(router)的特殊计算机连接起来,组成一个internet(互联网络)

  • WAN(Wide-Area Network,广域网)

  • 互联网至关重要的特性是:它能由采用完全不同和不兼容技术的各种局域网和广域网组成。

11.3 全球IP 因特网

  • 每台因特网主机都运行实现TCP/IP协议 (Transmission Control Protocol/Intelnet Protocol,传输控制协议/互联网络协议)的软件,几乎所有计算机系统都支持这个协议

  • TCP/IP协议实际上一个协议族,每一个协议提供不同的功能。

  • 从程序员的角度,我们可以把因特网看作世界范围内主机的集合,满足一下特性。

    • 主机集合被映射为一组32位的IP地址。
    • 这组IP地址可以被映射为一组称为因特网域名(Internet domain name)的标示符。
    • 因特网主机上的进程能够通过连接和任何其他主机上的进程通信。
  • 一个IP地址就是一个32位无符号整数。网络程序将IP地址存放在一个IP地址结构中。

  • 主机字节序,和网络字节序,之间可以使用inet_atoninet_ntoa函数来实现两者之间互相转换。

  • 因特网域名

叶子结点反向到根的路径就是域名。
层次结构第一层 : 未命名的根结点
层次结构第二层 : 一级域名(first-level domain name)
由非盈利组织ICANN(Internet Corporation for Assigned Names and Numbers,因特尔分配名字数字协会)定义。
常见的一级域名:com,edu,gov,org和net。
层次结构第三层: 二级域名(second-level)
例如:cmu.edu。

  • 这些域名是由ICANN的各个授权代理按照先到先服务的基础分配的。

11.4 套接字接口

套接字接口(socket interface)是一组函数,他们和Unix I/O函数结合起来,用以创建网络应用。

给出一个典型的客户端-服务器事务的上下文中套接字接口概述,以此导向。

  • 从Unix内核角度来看,一个套接字就是通信的一个端点。
  • 从Unix程序来看,套接字就是一个有相应描述符的打开文件。

sin_family成员是AF_INET,ipv4还是ipv6。
sin_port成员是一个16位的端口号。
sin_addr成员就是一个32位的IP地址。
IP地址和端口号总是以网络字节顺序(大端法)存放的。
sockaddr_in给程序员操作的,sockaddr交由套接字函数使用的,两者可以直接强制转换。

  • socket函数
  • connect函数
  • open_clientfd函数
  • bind函数
  • listen函数(主动套接字->监听套接字)
  • open_listenfd函数
  • accept函数

我的错题

2.有关Web服务器的说法,正确的是()

  • A.Web服务器可以提供静态和动态内容
  • B.Web服务器返回的静态内容由URL标识
  • C./.../app?150&21传递的内容由app可执行文件产生,150和21是调用参数
  • D.最小的URL后缀“/”,会被扩展成类似“/index.html”的默认主页

错误原因

我选了ACD,没有选B.课本上P666页写,可执行文件的URL可以在文件名后包括程序参数。“?”字符分隔文件名和参数,而且每个参数都用“&”隔开。课本没有说这两个参数是可执行文件产生的,所以我没有选。
查阅资料后,这两个参数确实是由可执行文件产生的,所以答案为ABCD。

9.如图关于struct sockaddr_in和struct sockaddr,下面说法正确的是()

  • A .sa_family可以是AF_INET,AF_INET6和AF_UNSPEC
  • B .sa_family如果指定AF_INET,那么函数就不能返回任何IPV6相关的地址信息;如果仅指定了AF_INET6却可以返回IPV4地址信息。
  • C .套接字接口中的地址类型是sturct sockaddr
  • D .套接字接口中的地址类型是sturct sockaddr_in

我选的是ABC,答案是AC。
对于A选项,AF_INET(又称 PF_INET)是 IPv4 网络协议的套接字类型,AF_INET6 则是 IPv6 的;而 AF_UNIX 则是 Unix 系统本地通信。所以A是对的。

对于B选项,sin_family参数指定调用者期待返回的套接口地址结构的类型。它的值包括三种:AF_INET,AF_INET6和AF_UNSPEC。如果指定AF_INET,那么函数就不能返回任何IPV6相关的地址信息;如果仅指定了AF_INET6,则就不能返回任何IPV4地址信息。AF_UNSPEC则意味着函数返回的是适用于指定主机名和服务名且适合任何协议族的地址。
故B错误。

对于C ,课本P653页有,所以C选项是正确的。

10.有关Socket端口和Linux命令,下面说法正确的是()

  • A .可以用 echo /etc/services查看
  • B .使用 netstat -pan|grep 80可以查看哪些进程占用了80端口
  • C .可以使用lsof -i:80查看哪里些进程占用了80端口
  • D .可以用sudo /etc/init.d/service start|stop|restart 启动|停止|重启系统服务
  • E .可以用netstat -pa 查看所有的服务端口(LISTEN,ESTABLISHED)
  • F .ps -aux | grep pid 可以查看绑定某端口的进程号为pid的进程的详细情况

我选的是BCEF,正确答案:ABCDEF
我在终端输入这些命令,eco /etc/services没有显示端口情况。
lsof -i:80也没有任何输出。所以选错了。




所以我很疑惑,希望老师能够解答。

11.知名端口号(well-known port numbers)就是那些由互联网名称与数字地址分配机构(ICANN)预留给传输控制协议(TCP)和用户数据包协议(UDP)使用的端口号。下面有关知名端口号的说法正确的是()

  • A .echo 服务的端口号是7
  • B .ftp 文件传输协议(FTP)端口号是23
  • C .请求主机发送日期和时间的daytime服务的端口号是13
  • D .web服务器的端口号是80
  • E .telnet服务的端口号是21
  • F .SMTP服务的端口号是25
  • G .tftp服务的端口号是69
  • H .HTTPS服务的端口号是443
  • I .rsync服务的端口号是873
  • J .pop3服务的端口号是110
  • K .auth服务的端口号是113

正确答案:ACDFGHIJK
B选项,FTP的端口号是20和21
E选项,telnet的端口号是23

18( 多选题 | 1 分)
有关域名和IP地址的说法,正确的是()
A .
1988年前,域名和IP地址的映射通过HOST.txt来完成
B .
1988年后,域名和IP地址的映射通过DNS来完成
C .
Linux中可以使用hostname(1)来展示和某个IP对应的域名
D .
域名和IP地址的映射必须是1对1 的

我选的是ABC
对于C选项,hostname只能显示或者设置主机名,不能展示某个IP对应的域名。
对于D选项,在最简单的情况下,域名和IP是一一对应的。但是,一个域名可以对应多个IP,一个ip也可以对应多个域名。
所以正确答案为AB。

posted @ 2017-12-06 22:32  besti5332  阅读(193)  评论(0编辑  收藏  举报