计算机网络面试题整理

计算机网络面试题整理

咱们来回顾一下上次分享到的mongodb的安装和使用

  • mongodb 的介绍
  • mongodb 如何安装
  • mongodb 如何简单使用
  • GO 如何操作 mongodb

要是对于mongodb还有点兴趣的话,可以查看文章 一文便知 GO 中mongodb 的安装与使用

今天咱们来看点面试题

计算机网络面试题

网络字节序:

大端模式,低地址存高字节

本地字节序:

小端模式,低地址存低字节

三次握手

  • 主动发起连接端,发送SYN标志为,请求建立连接。携带序号,数据字节大小(0),滑动窗口大小
  • 被动接受端,发送ACK应答,SYN标志。携带序号,数据字节大小(0),确认序号,滑动窗口大小
  • 主动发起连接端,发送ACK应答,携带确认序号

四次挥手

  • 主动关闭连接端,发送FIN,
  • 被动关闭端,发送ACK。 – 半关闭
  • 被动关闭端,发送FIN
  • 主动关闭端,发送ACK应答 – 连接全部关闭

TCP第三次握手失败会出现什么

如果此时ACK在网络中丢失,过了超时计时器后,那么Server端会重新发送SYN+ACK

重传次数根据/proc/sys/net/ipv4/tcp_synack_retries来指定,默认是 5

如果重传指定次数到了后,仍然未收到ACK应答,那么一段时间后,Server自动关闭这个连接

但是Client认为这个连接已经建立,如果Client端向Server写数据,Server端将以RST包响应,方能感知到Server的错误。

当失败时服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态

这样做的目的是为了防止SYN洪泛攻击

长连接和短连接区别和优缺点

长连接:连接->传输数据->保持连接 -> 传输数据-> ………..->直到一方关闭连接,多是客户端关闭连接

长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

  • 优点

长连接可以省去较多的tcp建立/关闭的操作,减少浪费,节省时间,对于频繁请求资源的客户,较适用于长连接;

  • 缺点

随着客户的越来越多,server早晚会有扛不住的一天,这时需要采取一些策略,如关闭一些长时间不读写操作的连接,这样可以避免一些恶意连接导致server端服务受损,如果条件再允许,就可以以客户端为颗粒度,限制每个客户端的最大连接数

短连接

连接->传输数据->关闭连接

比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

  • 优点:

短连接对于服务器来说较为简单,存在的连接都是有用的连接,不需要额外的控制

  • 缺点:

客户端连接频繁,会在tcp的建立和关闭上浪费时间。

滑动窗口

发送给对端连接,本段的缓冲区实时大小,保证数据不会丢失。

网络通信中 read 函数的返回值:

  • = 0

表明对端已经关闭连接

  • = -1

判断errno的情况

  • errno == EAGAIN|EWOULDBLOCK

设置了非阻塞的方式,读的时候,数据还没有到达

  • errno == EINTR

被信号中断

  • errno == 其他情况

异常

查看端口号

netstat -antp

端口复用设置

int opt = 1; 
setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,(void *)&opt,sizeof(opt));

半关闭(FIN_WAIT_2)

终止一个连接要经过 4次 握手

这由TCP的半关闭(half-close)造成的

CLOSE_WAIT 状态的问题情况

父进程打开了socket,然后用派生子进程来处理业务,父进程继续对网络请求进行监听,永远不会终止

客户端发FIN过来的时候,处理业务的子进程的read返回0,子进程发现对端已经关闭了,直接调用close()对本端进行关闭

实际上,仅仅使socket的引用计数减1,socket并没关闭。从而导致系统中又多了一个CLOSE_WAIT的socket。。。

如何避免上述情况?

子进程的关闭处理应该是这样的:

shutdown(sockfd, SHUT_RDWR);

close(sockfd);

这样处理,服务器的FIN会被发出,socket进入LAST_ACK状态,等待最后的ACK到来,就能进入初始状态CLOSED

shutdown()的函数说明

linux系统下使用 shutdown系统调用来控制socket的关闭方式

int shutdown(int sockfd,int how);

参数 how允许为shutdown操作选择以下几种方式:

  • SHUT_RD

关闭连接的读端。也就是该套接字不再接受数据,任何当前在套接字接受缓冲区的数据将被丢弃。进程将不能对该套接字发出任何读操作。对TCP套接字该调用之后接受到的任何数据将被确认然后被丢弃。

  • SHUT_WR

关闭连接的写端。

  • SHUT_RDWR

相当于调用shutdown两次:首先是以SHUT_RD,然后以SHUT_WR

注意:

在多进程中如果一个进程中shutdown(sfd, SHUT_RDWR)后其它的进程将无法进行通信,如果一个进程close(sfd)将不会影响到其它进程

2MSL时长 TIME_WAIT

一定出现在主动关闭的一端,保证最后一个ACK对端能够收到。

1.TTL是什么?

TTL是 Time To Live的缩写

该字段指定IP包被路由器丢弃之前允许通过的最大网段数量

TTL是IPv4包头的一个8 bit字段。

2. TTL的作用

TTL的作用是限制IP数据包在计算机网络中的存在的时间。

TTL的最大值是255,TTL的一个推荐值是64

3.TTL原理

虽然TTL从字面上翻译,是可以存活的时间,但实际上TTL是IP数据包在计算机网络中可以转发的最大跳数

TTL字段由IP数据包的发送者设置,在IP数据包从源到目的的整个转发路径上

每经过一个路由器,路由器都会修改这个TTL字段值,具体的做法是把该TTL的值减1,然后再将IP包转发出去。

如果在IP包到达目的IP之前,TTL减少为0,路由器将会丢弃收到的TTL=0的IP``包并向IP包的发送者发送ICMP 发送超时报文。

c/s 模型和 b/s 模型的优缺点

c/s模型

优点:

C/S的最大优点是能够实现复杂的应用构造,安全性高,数据传输速度快。

  • 结构简单。
  • 支持分布式、并发环境。有效提高资源的利用率和共享程度。
  • 服务器集中管理资源,有利于权限控制和系统安全。
  • 可扩展性较好。客户和服务器均可单独地升级

缺点:

  • 不易部署(客户端逐一安装、挑平台)
  • 维护困难(客户端需注意更新)
  • 开发工作量大

工作过程

  • 打开一个通信通道,告知服务器进程所在主机将在某一端口上接受客户请求
  • 等待客户的请求到达该端口
  • 服务器接收到服务请求,处理该请求并发送应答
  • 返回至第2步,等待并处理另一个客户的请求
  • 关闭服务器

b/s 模型

优点:

B/S最大的优点就是可以在任何地方进行操作而不用安装任何专门的软件,只要有一台能上网的电脑就能使用

客户端零安装、零维护。系统的扩展非常容易。

分布式、易扩展、共享性强

相比较传统的C/S的优势:

  • 1.易部署(各平台自带通用浏览器)
  • 2.容易维护(服务器端改变网页内容可实现所有用户同步更新)
  • 3.页面动态刷新,响应速度明显降低。
  • 开发工作量小

缺点:

  • 不能缓存大量数据

工作过程

  • 用户通过浏览器向Web服务器提出HTTP请求。
  • Web服务器根据浏览器请求调出相应文件,对相应文件不做处理或加以解释执行后,将纯客户端HTML代码结果返回给浏览器。
  • 浏览器接收到Web服务器发回的页面内容(纯HTML代码),显示给用户。

ping的过程和ICMP协议

过程例子

  • A电脑(192.168.2.135)发起ping请求,ping 192.168.2.179
  • A电脑广播发起 ARP 请求,查询 192.168.2.179的MAC地址。
  • B电脑应答ARP请求,向A电脑发起单向应答,告诉A电脑自己的MAC地址为90:A4:DE:C2:DF:FE
  • 知道了MAC地址后,开始进行真正的ping请求,由于B电脑可以根据A电脑发送的请求知道源MAC地址,所有就可以根据源MAC地址进行响应了。

ping命令是依托于ICMP协议的,ICMP协议的存在就是为了更高效的转发IP数据报和提高交付成功的机会。

ping命令除了依托于ICMP,在局域网下还要借助于ARP协议,ARP协议能根据IP地址查出计算机MAC地址。

ARP是有缓存的,为了保证ARP的准确性,计算机会更新ARP缓存。

ICMP

ICMP是(Internet Control Message Protocol)Internet控制报文协议。

ICMP协议是一种面向无连接的协议,它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。ICMP是一个网络层协议。

主要功能主要有:

  • 确认IP包是否成功到达目标地址
  • 通知在发送过程中IP包被丢弃的原因

总结

  • 计算机网络的三次握手,四次挥手
  • TCP 第三次握手失败会出现什么
  • 长连接和短连接的优缺点
  • 滑动创后
  • 网络通信中的read函数
  • 什么是半关闭
  • C/S 模型 和 B/S 模型
  • ICMP

朋友们,写作不易

你的支持和鼓励,是我坚持分享,提高质量的动力

好了,本次就到这里

技术是开放的,我们的心态,更应是开放的。拥抱变化,向阳而生,努力向前行。

我是小魔童哪吒,欢迎点赞关注收藏,下次见~

本作品采用《CC 协议》,转载必须注明作者和本文链接
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!