2.网络编程(29道)

2.1列举一下OSI协议的各种分层。说说你最熟悉的一层协议的功能。
(1)七层划分为:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
(2)五层划分为:应用层、传输层、网络层、数据链路层、物理层。
(3)四层划分为:应用层、传输层、网络层、网络接口层。(TCP/IP协议对应模型)
(4)各层功能:

应用层

在实现多个应用进程相互通信的同时,完成一系列业务处理所需的服务,比如电子邮件、文件传输、远程登录等。

传输层

为通信双方的主机提供端到端的服务,有两个不同的传输协议TCPUDPTCP提供可靠交付,而UDP并不能保证可靠交付。

网络层

处理分组在网络中的活动,例如分组的选路。

网络接口层

处理与电缆(或其他任何传输媒介)的物理接口细节。


2.2 TCP/IP协议包括?

应用层

Telnet(远程登录服务)、FTP(文件传输,使用TCP)、SMTP(建立于FTP上的邮件服务)、DNS(域名与IP地址相互转换)等

传输层

UDP(无连接、不可靠)、TCP(面向连接、可靠传输)

网络层

IP(为主机提供一种无连接、不可靠、尽力而为的数据服务)、ICMP(主机与路由器之间传递控制信息)、IGMP(主机与路由器之间进行组播成员信息交互)

网络接口层

ARPIP 地址-> MAC地址)、RARPMAC地址 -> IP地址)等


2.3 TCP通信建立和释放的过程?端口的作用?

(1)连接是三次握手,释放是四次挥手。

(2)端口是一个软件结构,被客户进程或服务进程用来发送和接收信息。一个端口对应一个16比特的数。服务进程通常使用一个固定的端口。


2.4 IP地址转换成物理地址的协议?反之?

答案:

(1)将IP地址转换成物理地址的协议是ARP(地址解析协议)。

(2)反之则是RARP(反地址解析协议)。

解读:

(1)ARP协议工作流程:

①首先,每台主机都会在自己的ARP缓冲区( ARP Cache )中建立一个ARP列表,以表示IP地址和MAC地址的对应关系。  

②当源主机需要将一个数据包要发送到目的主机时,会首先检查自己ARP列表中是否存在该IP地址对应的MAC地址,如果有﹐就直接将数据包发送到这个MAC地址;如果没有,就向本地网段发起一个ARP请求的广播包,查询此目的主机对应的MAC地址。此ARP请求数据包里包括源主机的IP地址、硬件地址、以及目的主机的IP地址。

③网络中所有的主机收到这个ARP请求后,会检查数据包中的目的IP是否和自己的IP地址一致。如果不相同就忽略此数据包;如果相同,该主机首先将发送端的MAC地址和IP地址添加到自己的ARP列表中,如果ARP表中已经存在该IP的信息,则将其覆盖,然后给源主机发送一个ARP响应数据包,告诉对方自己是它需要查找的MAC地址;

④源主机收到这个ARP响应数据包后,将得到的目的主机的IP地址和MAC地址添加到自己的ARP列表中,并利用此信息开始数据的传输。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。

(2)RARP协议工作流程:

①网络上的每台设备都会有一个独一无二的硬件地址,通常是由设备厂商分配的MAC地址。PC1从网卡上读取MAC地址,然后在网络上发送一个RARP请求的广播数据包,请求RARP服务器回复该PC的IP地址。

②RARP服务器收到了RARP请求数据包,为其分配IP地址,并将RARP回应发送给PC1。

③PC1收到RARP回应后,就使用得到的IP地址进行通讯。


2.5 IP地址的编码分为哪两部分?
IP地址由两部分组成,网络号和主机号。不过是要和“子网掩码”按位与上之后才能区分哪些是网络位哪些是主机位。


2.6应用程序ping发出的是什么报文?

答案:应用程序ping发出的是ICMP请求报文。

解读:ping的原理是利用网络上机器IP地址的唯一性,给目标IP地址发送一个数据包,通过对方回复的数据包来确定两台网络机器是否连接相通,时延是多少。


2.7 socket编程的流程?

(1)服务器端流程:

函数

作用

socket()

创建套接字

bind()

绑定本地IP地址和端口号

listen()

设置监听队列长度

accept()

等待连接

read()

接收信息

close()

关闭套接字

(2)客户端流程:

函数

作用

socket()

创建套接字

connect()

发送连接请求

write()

发送信息

close()

关闭套接字


2.8 epoll是什么?

(1)epoll是Linux网络编程中用于处理大批量文件描述符的机制,是对select/poll的改进。

(2)select监听的fd是有上限的,32位处理器一般为1024;且select/poll每次调用会遍历所有fd,时间复杂度为O(n),效率太低。而epoll监听的fd数量没有限制,且能在O(1)的时间复杂度内完成操作。

(3)epoll相关的系统调用有:epoll_creat、epoll_ctl、epoll_wait/epoll_pwait(可屏蔽特定信号),分别用来创建一个epoll文件描述符、添加/删除/修改需要侦听的文件描述符及事件、接收被侦听描述符的IO事件。epoll文件描述符用完之后直接close关闭即可。


2.9 TCPUDP的区别?

(1)TCP是面向连接的,UDP是面向无连接的。

(2)TCP是面向字节流的,UD