前言

本篇文章为本人面试以及空闲时间整理的计网面试常见问题。供本人复习之用。分享给大家。大家可以评论补充哦!
因为面试常见问题一般都是网络层,传输层以及应用层。所以我就按自上而下的顺序,来分享

最后一次更新时间:2021.12.30

一、应用层常见问题

1.DNS如何得到ip地址

假定域名为 m.xyz.com 的主机想知道另一台主机( 域名为 y.abc.com )的 IP 地址。例如,主机 m.xyz.com 打算发送邮件给主机 y.abc.com。这时候就必须知道主机 y.abc.com 的 IP 地址。查询步骤:
① 主机 m.xyz.com 先向其本地域名服务器 dns.xyz.com 进行递归查询。
② 本地域名服务器采用迭代查询。它先向一个根域名服务器查询。
③ 根域名服务器告诉本地域名服务器,下一次应查询的顶级域名服务器 dns.com 的 IP 地址。
④ 本地域名服务器向顶级域名服务器 dns.com 进行查询。
⑤ 顶级域名服务器 dns.com 告诉本地域名服务器,下一次应查询的权限域名服务器 dns.abc.com 的 IP 地址。
⑥ 本地域名服务器向权限域名服务器 dns.abc.com 进行查询。
⑦ 权限域名服务器 dns.abc.com 告诉本地域名服务器,所查询的主机的 IP 地址。
⑧ 本地域名服务器最后把查询结果告诉主机 m.xyz.com
注:
①使用了 8 个 UDP 报文。
m.xyz.com的主机名是m。顶级域名是com
③用迭代查询好处:可大大减轻根域名服务器的负荷,使互联网上的 DNS 查询请求和回答报文的数量大为减少。
上图

2.http和https的区别

①最大的区别就是https建立在ssl之上,对传输的数据进行了加密(对称加密和非对称加密结合)。而http没有
②https需要申请证书,一般免费证书较少,所以会产生一定费用
③https和http的端口分别是443和80
④一般来说http页面响应速度比https快。因为 HTTP 使用 TCP 三次握手建立连接,客户端和服务器需要交换 3 个包,而 HTTPS除了 TCP 的三个包,还要加上 ssl 握手需要的 9 个包,所以一共是 12 个包。

3.http1.0、http1.1、http2.0的区别

(1)
HTTP 1.0 浏览器与服务器只保持短暂的连接,每次请求都需要与服务器建立一个TCP连接。如果需要建立长连接,需要设置一个非标准的字段,keep-alive
(2)
①HTTP1.1中,默认支持长连接(Connection: keep-alive
②HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求。但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容
③HTTP1.1增加了更多的请求头和响应头。以及新的请求方法,如put
(3)
①HTTP/2.0支持多路复用。复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”
(http1.1虽然允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的,服务器只有处理完一个请求,才会接着处理下一个请求。如果前面的处理特别慢,后面就会有许多请求排队等着。HTTP2.0是完全多路复用,而非有序并阻塞的。)
②HTTP2.0支持首部压缩。即利用首部表。存储之前发送的键值对,对于相同的数据,不再通过每次请求和响应发送。
③HTTP2.0支持服务器推送。

4.在浏览器中输入www.baidu.com后执行的全部过程

①浏览器向DNS服务器发出解析域名的请求;(ip协议、UDP协议,ARP协议,OSPF协议)
②DNS服务器将域名解析为对应的IP地址,并返回给客户端;
③浏览器与服务器建立TCP连接(默认端口为80,https为443);
④浏览器发出HTTP请求报文;
⑤服务器回复HTTP响应报文;
⑥浏览器解析响应报文,并显示在Web网页上;
⑦收发报文结束, 释放TCP连接。

二、运输层常见问题

1.TCP是如何实现可靠传输的

①建立连接:三次握手
②发送数据:
采用窗口去发送和接收数据(数据有序号),有确认机制超时重传机制。除此之外,还有流量控制和拥塞控制
③连接释放:四次握手

2.TCP三次握手过程

看图就明白

为什么采用3次握手,而不是2次呢?
采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。

3.TCP四次挥手全过程

看图就明白

注意:
(1)为什么需要四次挥手?因为TCP是全双工的,客户端发送给服务端FIN的时候,说明客户端不往服务端发数据了,但是服务端可以往客户端发数据,客户端还可以接收数据。
(2)四次挥手,不一定非得是四次,中间两步,有可能合并
(3)为什么需要TIME_WAINTING状态?
①处于TIME_WAINTING状态时,不允许应用释放端口,等TIME_WAINTING的时间,服务器会把数据全部传完,此时再释放
②如果客户端发送的分手确认信号,即第四次挥手,丢失了,那么服务端会再次发送,如果不等TIME_WAINTING的时间,那么服务端发送的第三次挥手,客户端就接受不到了

4.TCP拥塞控制

(1)如何判断拥塞?换句话说,什么情况会让拥塞窗口减少?
①重传定时器超时(说明已经拥塞了)
②收到三个相同的ACK(说明可能要出现拥塞了)
(2)当拥塞出现的时候,如何进行控制,或者说如何预防拥塞?
方式:慢开始, 拥塞避免,快重传,快恢复

5.TCP的流量控制和拥塞控制区别

流量控制通过接收窗口实现,一般是考虑接收方,接收方通过发送确认报文,去调控发送方的发送窗口。并不是一个全局的。
拥塞控制通过拥塞窗口来实现,一般是考虑线路。去控制全局的,既考虑接收方,也考虑发送方,也考虑接收方和发送方中间的线路。线路拥塞的时候,线路就会调控拥塞窗口。
所以最终的发送窗口由 接收方的接收窗口和线路的拥塞窗口的 最小值 决定

6.TCP拆包/粘包是什么

拆包,就是一分多,粘包,就是多合一。也就是TCP复用和分用
如何解决TCP的粘包拆包特性?
①消息弄成定长的
②或者消息头包括消息的长度
③使用特殊的分隔符(比如ftp协议,对不用消息,使用回车换行符,来区分不同的消息)

7.UDP用在哪

①需要多播的,TCP只能单播
②丢包不影响正常使用的软件
③对实时性要求较高的软件

UDP实现的软件,不想让他丢包,怎么办?
上层应用自己来实现可靠性传输。如UDT。据说HTTP3会用UDT来实现

8.TCP和UDP的区别是什么

TCP面向连接,有三次握手和四次挥手,UDP没有连接,所以也可用于广播
TCP有可靠性,具体为超时重传(根据往返时延来计算等多久需要重传)和应答确认
TCP有数据排序,即在对端,各个组结合的时候,如何根据编号排序
TCP有流量控制(滑动窗口)和拥塞控制
一般来说,UDP发送数据较快,实时性比TCP要强

9.socket是啥

操作系统把底层的所有与网络通信相关的细节都隐藏起来了,用socket来进行操作,它是一个门面模式,调用connect方法就连接了。TCP用主机的IP地址加上主机上的端口号作为TCP连接的端点,这种端点就叫做套接字。
可以理解为它把传输层,及以下的协议,全都封装起来了。从应用层视角往下层看,就是socket

三、网络层常见问题

1.IP地址的分类

A类地址:以0开头, 第一个字节范围:1~126(1.0.0.0 - 126.255.255.255);
B类地址:以10开头, 第一个字节范围:128~191(128.0.0.0 - 191.255.255.255);
C类地址:以110开头, 第一个字节范围:192~223(192.0.0.0 - 223.255.255.255);
D类地址:以1110开头,第一个字节范围:224~239(224.0.0.0 - 239.255.255.255);(作为多播使用)
主机号全为1的为广播地址

ip地址和子网掩码按位与,得到网络号

2.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响应。

3.路由选择协议相关问题

RIP,OSPF,BGP分别属于哪一层,其实还是有争议。我认为RIP,BGP应该在应用层,OSPF在传输层比较好。因为RIP用UDP,BGP用TCP,OSPF用IP。所以这样划分

(1)内部网关协议
①RIP是内部网关协议。它认为一个好的路由就是它通过的路由器的数目少,即距离短。最多不超过15跳。
三个特点
定期只和相邻路由器交换彼此的全部信息
更新算法:画图解释
②OSPF是为客服RIP缺点研发的。即“最短路径优先”,利用了迪杰斯特拉算法
RIP只能适用于规模很小的网络,OSPF能适用于规模很大的网络。它将一个自治系统分为若干个更小的范围。
(2)外部网关协议
BGP是不同自治系统之间的路由选择协议,会选出类似于一个“发言人”的角色去交换路由信息。

四、通用的问题

1.每一层的设备

物理层:中继器,集线器
数据链路层:网桥,交换机
网络层:路由器
传输层:网关

2.协议

OSI分层 (7层):物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层):网络接口层、 网际层、运输层、 应用层。
五层协议 (5层):物理层、数据链路层、网络层、运输层、 应用层。

网络安全相关问题

1.各种劫持

DNS劫持,意思就是把DNS解析来的ip地址,换成一个错误的ip地址,有可能是钓鱼网站
HTTP劫持,意思就是劫持http请求报文或者响应报文。解决办法:用https

2.洪泛攻击

洪泛攻击就是客户端第一次发送的报文,源ip地址是假的,所以服务器发送了确认报文之后,就一直得不到回应,就一直等待,浪费着资源

Android面试计网面经大全【持续更新中。。。】相关推荐

  1. Android开发人员不得不收集的代码(持续更新中)(http://www.jianshu.com/p/72494773aace,原链接)

    Android开发人员不得不收集的代码(持续更新中) Blankj 关注 2016.07.31 04:22* 字数 370 阅读 102644评论 479喜欢 3033赞赏 14 utilcode D ...

  2. JAVA面试大全(持续更新中...)

    本文旨在收集Java面试过程中出现的问题,力求全面,仅作学习交流,欢迎补充,持续更新中-,部分段落选取自网上,部分引用文章已标注,部分已记不清了,如侵权,联系本人 Java基础 1.面向对象的概述 面 ...

  3. Android面试题最全总结系列 (持续更新中...)

    前言 自己一直做Java.Android相关的知识总结->KnowledgeSummary系列.这个GitHub的repo想作为自己对于Android核心知识点以及一些面试题的总结,因为很多知识 ...

  4. android相关问题、网摘集锦(持续更新中...)

    1,如何将不同大小的图片都设置成手机屏幕大小显示? http://topic.csdn.net/u/20101112/16/df392ae4-42e2-4fe3-bcb9-98c8c2430d52.h ...

  5. Java面试宝典最新整理 下篇(持续更新中)

    51. ThreadLocal 是什么?有哪些使用场景? 线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享. Java提供ThreadLocal类来支持线程局部变量,是一种实现 ...

  6. 前端面试知识自己的一些整理 ---持续更新中

    - title: 自己整理的面试复习资料 date: 2019-03-20 12:27:51 tags: 面试 前端 CSS3+H5 [CSS3.0 帮助文档.chm](CSS3.0 帮助文档.chm ...

  7. 阿里开发10年大牛:Android开发人员不得不收集的代码(持续更新中)

    前言 1.软件吃掉世界,而机器学习正吃掉软件 在数据爆炸的时代,如何创建「智能系统」成为焦点.这些应用程序内所体现的智能技术,并非是将实用指令添加到代码中,而是可以让软件自己去识别真实世界中发生的事件 ...

  8. android开发文档工具集(持续更新中...)

     http://www.androiddevtools.cn/ android 产品->交互->视觉->开发->测试各种工具地址下载, 各种文档下载应有尽有,强烈推荐.  ht ...

  9. 总结Java开发面试常问的问题,持续更新中~

    数据库 mysql redis java java虚拟机 java并发 java容器 java基础 计算机网络 数据结构与算法 操作系统/Linux 设计模式 场景题和设计题 流行框架 数据库 mys ...

最新文章

  1. c语言建立一个链表,每个结点包括姓名和成绩,求C语言几道题的答案~~拜托了~~...
  2. 蓝桥杯 - 历届试题 - 日期问题
  3. lxml库的基本使用-etree解析html得到对象的不同方式-0233
  4. ASP与ActiveX控件交互实战(一)
  5. 【数据蒋堂】第46期:大数据集群该不该透明化?
  6. 蓝桥杯2020年第十一届C/C++省赛B组第二题-既约分数
  7. gitlab 如何调出工程的setting
  8. 博应用教你使用华为nova3添加桌面小工具
  9. mysql dump 转excel_使用mysqldump备份单表数据,并使用navicat导出单表中部分字段到excel...
  10. 计算机专业论文推荐,计算机专业论文参考文献推荐
  11. android播放器(music player)源码分析4(StreamStarter,URLEncoder)
  12. AndroidStudio自带的模拟器如何联网
  13. FOFA网络空间搜索引擎使用教程
  14. 弄明白HASH,你就弄明白区块链的一大半
  15. Json数据的序列化与反序列化的三种常用方法介绍
  16. html5峰会2015,2015 iWeb峰会与第四届HTML5峰会  7月19日上海站重磅开幕
  17. 计算机基础知识实验内容及步骤,计算机基础实验报告要点.doc
  18. 8种在JavaScript数组中查找指定元素的方法(用于开发中数据的处理)
  19. 本地的项目上传到 Git 仓库的步骤-超详细
  20. 用软件可编程FPGA加速网络边缘的移动应用总结

热门文章

  1. 用visa进行仪表通信
  2. 组件封装 - 轮播图组件
  3. java素数的流程图_Java程序流程结构
  4. [SSD固态硬盘技术 4] 主控详解
  5. 吐血整理 这200道阿里P6必备Java面试题,我简直太爱了
  6. 宾夕法尼亚大学刘玲洁课题组招募CG、CV方向博士/博士后
  7. 合并与拆分数据模型(MSDM:Merging Spliting Data Modeling)
  8. 运营商大数据的作用有哪些
  9. 下列有关计算机语言的叙述中,下列关于计算机语言的叙述中,正确的是( )...
  10. 企微创建自建应用-关联html/小程序