接上一篇《TCP/IP和网络编程面试常见问题3》
篇幅太长,视觉疲劳了,重开一局。
时间仓促,还未细看。如有错误,欢迎指正。
(1)路由表的网段怎么存储、查找?
存储:
根据RIP协议报文(包含目的网络,距离以及下一跳),若目的网络在原路由表中不存在,则直接加入路由表中;若存在,且距离比原路由表比较小,则更新距离,否则忽略。
查找:
路由表中有目的地址网络,子网掩码,下一跳这些数据;
先从数据包中获取目的地址,让该地址与路由表中的子网掩码逐个进行与操作,若结果和子网掩码对应的目的地址相匹配,则从下一跳指向的端口进行转发,否则查找下一个路由表项;
(2)服务器和客户端都是怎么工作的(从创建socket到工作的流程)?
TCP:
服务器端:socket(SOCK_STREAM)、bind、listen、accept
客户端: socket(SOCK_STREAM)、connect
UDP:
服务器端:socket(SOCK_DGRAM)、bind
客户端:socket(SOCK_DGRAM)
(3)listen的两个参数分别是什么?
int listen(int sockfd, int backlog); backlog是为sockfd套接字维护的
未完成连接(SYN-RECV) 和 已完成连接(ESTAVBLISHED) 两个队列的大小之和。
(4) 当并发量很大时,可以进行哪些处理解决这个问题?
服务器集群;
I/O复用
多进程:(单服务器) 收到连接就fork一个子进程处理连接; 建立进程池。
多线程:(单服务器) 收到连接就创建一个线程处理连接; 建立线程池。
(5) 如果select在监听的时候,描述符对端被关闭了会发生什么?
如果有客户端连接请求,select函数将监听socket描述符设置为可读。注意:如果监听socket为阻塞模式,那么,当使用select进行多路分离时,可能造成select返回可读但是调用accept会被阻塞住的情况,原因是在调用accept之前客户端可能主动关闭连接或者发送RST异常关闭连接.
(6) send、recv都是阻塞的,怎么控制在一定时间内完成send、recv,如果超时就不执行,怎么跟select联系起来?
套接字超时:
- 调用alarm(),超时时产生SIGALRM信号
- 在select中阻塞等待IO,select内置定时器
- 使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项
对于recv,在select的读文件描述符集参数中打开对应的描述符的位,然后把select内置的定时器设为想要的时间就行;同理对于send,则在写文件描述符集中打开对应的位。
(7) epoll底层使用了红黑树,说一下红黑树的特点和优点?
红黑树能够以O(log2 n)的时间复杂度进行搜索、插入、删除操作。
满足下列条件的二叉搜索树是红黑树:
- 每个结点要么是“红色”,要么是“黑色”
- 所有的叶结点都是空结点,并且是“黑色”的
- 如果一个结点是“红色”的,那么它的两个子结点都是“黑色”的
- 如果結點是黑色的,那么它的子節點可以是紅色或者是黑色的
- 结点到其子孙结点的每条简单路径都包含相同数目的“黑色”结点
- 根结点永远是“黑色”的
(8) dns怎么解析的?
主机通过ISP接入了互联网,那么ISP就会分配一个DNS服务器; 主机向ISP DNS发起查询www.baidu.com请求; ISP
DNS收拿到请求后,先检查一下自己的缓存中有没有这个地址,有的话就直接返回,如果缓存中没有的话,ISP
DNS会从配置文件里面读取13个根域名服务器的地址。并向其中一台发起请求。
根服务器拿到这个请求后,知道他是com.这个顶级域名下的,所以就会返回com域中的NS记录; ISP
DNS向其中一台再次发起请求,com域的服务器发现你这请求是baidu.com这个域的,一查发现了这个域的NS,那我就返回给你,你再去查;
ISP
DNS不厌其烦的再次向baidu.com这个域的权威服务器发起请求,baidu.com收到之后,查了下有www的这台主机,就把这个IP返回给你了;
然后ISPDNS拿到了之后,将其返回给了客户端,并且把这个保存在高速缓存中。
参考信息
https://blog.csdn.net/u013354486/article/details/80588916
https://blog.csdn.net/E_kunt/article/details/52623614
http://blog.csdn.net/qq_25827845/article/details/66975129
https://blog.csdn.net/qq_40086556/article/details/82017916
https://blog.csdn.net/qq_38238296/article/details/87869753