网络相关 嵌入式面试题
2.网络编程(29道)
应用层 |
在实现多个应用进程相互通信的同时,完成一系列业务处理所需的服务,比如电子邮件、文件传输、远程登录等。 |
传输层 |
为通信双方的主机提供端到端的服务,有两个不同的传输协议 TCP和 UDP, TCP提供可靠交付,而 UDP并不能保证可靠交付。 |
网络层 |
处理分组在网络中的活动,例如分组的选路。 |
网络接口层 |
处理与电缆(或其他任何传输媒介)的物理接口细节。 |
2.2 TCP/IP 协议包括?
应用层 |
Telnet (远程登录服务)、 FTP (文件传输,使用 TCP)、 SMTP (建立于 FTP上的邮件服务)、 DNS(域名与 IP地址相互转换)等 |
传输层 |
UDP (无连接、不可靠)、 TCP(面向连接、可靠传输) |
网络层 |
IP (为主机提供一种无连接、不可靠、尽力而为的 数据 服务)、 ICMP(主机与路由器之间传递控制信息)、 IGMP(主机与路由器之间进行组播成员信息交互) |
网络接口层 |
ARP (IP 地址-> MAC 地址)、RARP ( MAC地址 -> IP地址)等 |
(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.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关闭即可。