2018秋招

计算机网络面试

2018-09-01  本文已影响20人  一念之动即是行
  1. 计算机网络分为哪几层

    • OSI七层模型:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层
    • TCP/IP五层模型:物理层,数据链路层,网络层,传输层,应用层
    • TCP/IP四层模型 :网络接口层,网络层,传输层,应用层
  2. 数据链路层可能提供的服务?

    • 成帧、链路访问、透明传输、可靠交付、流量控制、差错检测、差错纠正、半双工和全双工。最重要的是帧定界(成帧)、透明传输以及差错检测。
  3. TCP和UDP有什么区别?什么场景使用TCP,什么场景使用UDP?哪些应用层协议使用了TCP,哪些使用了UDP?

    • TCP是传输控制协议,提供的是面向连接、可靠的字节流服务。通信双方彼此交换数据前,必须先通过三次握手协议建立连接,之后才能传输数据。TCP提供超时重传,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。UDP是用户数据报协议,是一个简单的面向无连接的协议。UDP不提供可靠的服务,耗用资源少,处理速度快。在交换数据前不用建立连接故而传输速度很快。UDP主要面向查询——应答的服务,交换数据量较小,用于流媒体传输,IP电话等对数据可靠性要求不是很高的场合(QQ,直播等)。
    • TCP支持的应用协议主要有:
      • Telnet(Internet远程登录服务的标准和主要方式,是常用的远程控制Web服务器的方法)
      • FTP(文件传输协议,File Tansfer Protocol,用于Internet上的控制文件的双向传输)
      • SMTP(简单邮件传输协议,Simple Mail Transfer Protocol);
    • UDP支持的应用层协议主要有:
      • NFS(网络文件系统,Network File System)
      • SNMP(简单网络管理协议,Simple Network Management Protocol )
      • DNS(域名系统,Domain Name System)
      • TFTP(简单文件传输协议,Trivial File Transfer Protocol)
      • BOOTP(引导程序协议,Bootstrap Protocol)
  4. 什么是滑动窗口协议 ,什么是快速重传,什么是拥塞避免,什么是慢启动?

    • 滑动窗口协议(Sliding Window Protocol):属于TCP协议的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发一个分组就停下来等待确认,因此该协议可以加速数据的传输,提高网络吞吐量。流量控制是点对点通信量的控制。
    • TCP拥塞控制 拥塞控制就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不至于过载。拥塞控制是一个全局性的过程。发送方维持一个叫做拥塞窗口cwnd(congestion window)的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口,另外考虑到接受方的接收能力,发送窗口可能小于拥塞窗口。
    • 慢启动算法:慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说有小到大逐渐增加拥塞窗口的大小。以报文段的个数的拥塞窗口大小举例说明慢开始算法,实时拥塞窗口大小是以字节为单位的。发送方每收到一个确认就把窗口cwnd加1,所以一次传输后拥塞窗口就加倍,是乘法增长,而拥塞避免算法是加法增长。
    • 拥塞避免算法:拥塞避免算法让拥塞窗口缓慢增长,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍,这样拥塞窗口按线性规律缓慢增长。

      为了防止cwnd增长过大而引起网络拥塞,还需设置一个慢开始门限ssthresh状态变量:
      当cwnd<ssthresh时,使用慢开始算法;
      当cwnd>ssthresh时,改用拥塞避免算法;
      当cwnd=ssthresh时,慢开始与拥塞避免算法任意。

    • 无论是在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认,虽然没有收到确认可能是其他原因的分组丢失,但是因为无法判定,所以都当做拥塞来处理),就把慢开始门限设置为出现拥塞时的发送窗口大小的一半。然后把拥塞窗口设置为1,执行慢开始算法。
    • 快速重传:快重传要求接收方在收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时捎带确认。快重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必等待设置的重传计时器时间到期。
    • 快速恢复:当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半,但是接下去并不执行慢开始算法;考虑到如果网络出现拥塞的话就不会收到好几个重复的确认,所以发送方现在认为网络可能没有出现拥塞,所以此时不执行慢开始算法,而是将cwnd设置为ssthresh的大小,然后执行拥塞避免算法。
    • 随机早期检测RED:为避免发生网路中的全局同步现象,路由器采用随机早期检测(RED:randomearly detection)。
  5. TCP连接需要几次握手,断开需要几次握手?

    • TCP连接需要三次握手,断开需要四次握手
    • 为什么连接需要三次握手?假设发送方发送了syn(同步序列编号Synchronize Sequence Numbers),但是发生了网络拥塞,于是重新发送syn,这样接收方就会收到两个相同的syn,如果只有两次握手,那么接收方收到发送方的请求就会建立连接,使得接收方的资源被白白浪费,而如果采用三次握手,接收方收到请求后向发送方发送确认信息,由于事实上发送方并没有发送连接请求,故对于确认信息不予理睬,接收方收不到发送方的确认信息,就知道不需要建立连接了。
    • 断开为什么需要四次握手?连接建立以后server和client处于同等的地位,当client向server发送终止请求FIN时,只是表示client没有数据要发给server了,server收到FIN后向client发送ACK表示收到了终止连接的请求,当server没有数据要发送后向client发送FIN,表示连接可以断开了,client收到FIN后向server发送ACK确认信息,等待2∗MSL(最长报文段寿命)如果没收到server的FIN,表示server收到确认信息已经断开连接了,此时client方可断开连接。
  1. 当你输入域名访问一个网站的时候,背后的过程是什么?

  2. 什么是https协议?https协议用到了哪种密匙?

    • https协议(全称:Hyper Text Transfer Protocol over Secure Socket Layer)是以安全为目标的http通道,简单理解就是http的安全版,使用的密匙是SSL。
  3. 简述HTTP中GET和POST的区别

  4. 什么是socket?

    • 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
  5. 请简单说一下你了解的端口及对应的服务?

21:FTP(文件传输协议)
22:SSH
23:Telnet(远程登录)服务
25:SMTP(简单邮件传输协议)
53:DNS域名服务器
80:HTTP超文本传输协议
110:POP3邮件协议3
443:HTTPS
1080:Sockets
1521:Oracle数据库默认端口
3306:MySQL服务

  1. 有哪些私有(保留)地址?

    • A类:10.0.0.0 —— 10.255.255.255
    • B类:172.16.0.0 —— 172.31.255.255
    • C类:192.168.0.0 —— 192.168.255.255
  2. IP地址分为哪几类?简单说一下各个分类

IPv4
  • IPv6 -- 采用128bit,首部固定部分为40字节。
  1. ARP是地址解析协议,简单语言解释一下工作原理

    • 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
    • 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址。
    • 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
    • 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应。
  2. ICMP协议?

    • ICMP是InternetControl Message Protocol,因特网控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由器是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。ICMP报文有两种:差错报告报文和询问报文。
  3. DHCP协议?

    • 动态主机配置协议,是一种让系统得以连接到网络上,并获取所需要的配置参数手段。通常被应用在大型的局域网络环境中,主要作用是集中的管理、分配IP地址,使网络环境中的主机动态的获得IP地址、Gateway地址、DNS服务器地址等信息,并能够提升地址的使用率。
  4. 网桥的作用?

    • 网桥是一个局域网与另一个局域网之间建立连接的桥梁
  5. 网络接口卡(网卡)的功能?

    • 进行串行/并行转换
    • 对数据进行缓存
    • 在计算机的操作系统安装设备驱动程序
    • 实现以太网协议
  6. 交换机与路由器有什么区别

    • 交换机可以简单理解为将一些机器连接起来组成一个局域网
    • 路由器与交换机有明显的区别,它的作用在于连接不同的网段并且找到网络中数据传输最合适的路径
    • 工作所处的OSI层次不一样:交换机工作在OSI第二层数据链路层,路由器工作在OSI第三层网络层
    • 寻址方式不同:交换机根据MAC地址寻址,路由器根据IP地址寻址
    • 转发速不同:交换机的转发速度快,路由器转发速度相对较慢
  7. TTL是什么?作用是什么?哪些工具会用到它(ping traceroute ifconfig netstat)

    • TTL指生存时间,简单来说,它表示了数据包在网络中的时间,经过一个路由器后TTL就减一,这样TTL最终会减为0,当TTL为0时,则将数据包丢弃,这样也就是因为两个路由器之间可能形成环,如果没有TTL的限制,则数据包将会在这个环Shang一直死转,由于有了TTL,最终TTL为0后,则将数据包丢弃。ping发送数据包里面有TTL,但是并非时必须的,即使没有TTL也是能正常工作的,traceroute正是因为有了TTL才能正常工作,ifconfig是用来配置网卡信息的,不需要TTL,netstat是用来显示路由表的,也是不需要TTL的。
  8. 路由表是做什么用的?在Linux环境中怎么配置一条默认路由?

    • 路由表是用来决定如何将一个数据包从一个子网传送到另一个子网的,换句话说就是用来决定从一个网卡接收到的包应该送到哪一个网卡上去。路由表的每一行至少有目标网络号、子网掩码、到这个子网应该使用的网卡这三条信息。当路由器从一个网卡接收到一个包时,它扫描路由表的每一行,用里面的子网掩码和数据包中的目标IP地址做逻辑与运算(&)找出目标网络号。如果得出的结果网络号与这一行的网络号相同,就将这条路由表留下来作为备用路由。如果已经有备用路由了,就在这两条路由里将网络号最长的留下来,另一条丢掉(这是用五分类编址CIDR的情况才是匹配网络号最长的,其他的情况是找到第一条匹配的行时就可以进行转发了)。如此接着扫描下一行直到结束。如果扫描结束仍没有找到任何路由,就用默认路由。确定路由后,直接将数据包送到对应的网卡上去。在具体的实现中,路由表可能包含更多的信息为选路由算法的细节所用。
    • 在Linux上可以用route add default gw<默认路由器IP>命令配置一条默认路由。
  9. HTTP 1.0&& HTTP 1.1的区别

  10. 介绍MQTT协议,和HTTP协议的区别

  11. TIME_WAIT发生条件的作用

  12. TCP协议有几大计时器

  13. TCP最大连接数

    • client最大TCP连接数:client每次发起TCP连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他TCP连接共享。TCP端口的数据类型是unsigned short,因此本地端口个数最大只有2^16 = 65536,端口0又特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,一个client最大TCP连接数为65535,这些连接可以练到不同的server IP。
    • server最大TCP连接数:server端通常固定在某个本地端口上监听,等到client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个IP,本地监听端口也是独占的,因此server端TCP连接4元组中只有remote IP(也就是client IP)和remote port(客户端port)是可变的,因此最大TCP连接数为客户端IP数x客户端port数,对IPV4,不考虑IP地址分类等因素,最大TCP连接数约为2^32(IP数)x 216(port数),也就是server端单机最大TCP连接数约为248。
    • 相关Linux参数调整:

    sysctl -w fs.file-max=10485760 #系统允许的文件描述符数量10m
    sysctl -w net.ipv4.tcp_rmem=1024 #每个tcp连接的读取缓冲区1k,一个连接1k
    sysctl -w net.ipv4.tcp_wmem=1024 #每个TCP连接的写入缓冲区1k
    sysctl -w net.ipv4.ip_local_port_range='1024 65535' #修改默认的本地端口范围
    sysctl -w net.ipv4.tcp_tw_recycle=1 #表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭
    sysctl -w net.ipv4.tcp_te_reuse=1 #表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭
    sysctl -w net.ipv4.tcp_timestamps=1 #启用时间戳
    echo '* soft nofile 1048576' >> /etc/security/limits.conf #用户单进程的最大文件数,用户登录时生效
    echo '* hard nofile 1048576' >> /etc/security/limits.conf #用户单进程的最大文件数,用户登录时生效
    ulimit -n 1048576 #用户单进程的最大文件数 当前会话生效

上一篇 下一篇

猜你喜欢

热点阅读