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

来源:互联网 发布:python assert() 编辑:程序博客网 时间:2024/05/22 14:17

(1)请说明TCP/IP的四层协议栈,并说明TCP和UDP套接字经过的层级结构差异。

TCP套接字:链路层,IP层,TCP层,应用层

UDP套接字:链路层,IP层,UDP层,应用层


(2)请说出TCP/IP协议栈中链路层和IP层的作用,并给出二者关系。

链路层:是物理链接领域标准化的结果,也是最基本的领域,专门定义LAN、WAN、MAN等网络标准。若两台主机通过网络进行数据交换,则首先要做到的就是进行物理链接。

IP层:为了在复杂的网络中传输数据,首先需要考虑路径的选择。

关系:链路层负责进行一系列物理连接,而IP层负责选择正确可行的物理路径。


(3)为何需要把TCP/IP协议栈分成4层(或7层)?结合开放式系统回答。

把协议分成多个层次,除了可以使协议设计更加容易以外,更重要的原因是,为了通过标准化操作设计开放式系统。

标准本身就在于对外公开,引导更多的人遵守规范。从而使得人们生活更加方便,不用为了不同的标准、协议而大费周折。

比如,路由器同来完成IP层交互任务。某公司原来使用A公司的路由器,先要将其替换成B公司的,因为统一了标准,所有生产商都按照IP层标准制造,所以更换起来非常方便。


(4)客户端调用connect函数向服务器端发送连接请求。服务器端调用哪个函数后,客户端可以调用connect函数?

服务器调用listen函数之后,客户端才可以调用connect函数。

因为,服务器调用listen函数之后,服务器端套接字才有能力接收请求连接的信号。

提前调用connect函数将发生错误。


(5)什么时候创建连接请求等待队列?它有何作用?与accept有什么关系?

在服务器端调用了listen函数,accept函数正在处理客户端请求时, 更多的客户端发来了请求连接的数据,此时,就需要创建连接请求等待队列。

以便于在accept函数处理完手头的请求之后,按照正确的顺序处理后面正在排队的其他请求。

与accept函数的关系:accept函数受理连接请求等待队列中待处理的客户端连接请求。


(6)客户端中为何不需要调用bind函数分配地址?如果不掉用bind函数,那何时、如何向套接字分配IP地址和端口号?

因为客户端中在调用connect函数时自动分配了客户端的IP地址和端口。

何时:调用connect函数时。

何地:操作系统,更准确地说是在内核中。

如何:IP用计算机(主机)的IP,端口随机。


(7)把第一章的hello_server.c和hello_server_win.c改成迭代服务器端,并利用客户端测试更改是否准确。


原创粉丝点击