TCP/IP和网络编程面试常见问题4

接上一篇《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联系起来?

套接字超时:

  1. 调用alarm(),超时时产生SIGALRM信号
  2. 在select中阻塞等待IO,select内置定时器
  3. 使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值