高频知识汇总 |【计算机网络】面试题汇总(万字长文通俗易懂)

我之前也已经在写了好几篇高频知识点汇总,简要介绍一下,有需要的同学可以点进去先收藏,之后用到时可以看一看。如果有帮助的话,希望大家给个赞,给个收藏!有疑问的也可以在评论区留言讨论,能帮的上大家的都会尽力回复的!

前言

这篇【计算机网络】是我在学习时自己整理的,大部分都是按我个人的理解来写的答案。废话不多说直接铺干货。

1. 讲讲OSI协议

这就一道题,回答时遵循如下原则即可:

横向看(为哪两个平行的东西提供服务)
纵向看(为上层提供什么服务)
协议举例

  • 应用层:

    • 为应用程序间提供通信和交互的协议。
    • DNS、HTTP、SMTP 等。
  • 传输层:

    • 为两台主机中的进程间提供通用的数据传输服务。
    • 为上层提供服务:把应用层的报文封装成 TCP 的报文段或 UDP 的用户数据报进行传送。
    • TCP、UDP
  • 网络层

    • 为两台主机提供通信服务。
    • 为上层提供服务:把运输层产生的报文段或用户数据报封装成 IP 数据报进行传送。
    • ARP、ICMP
  • 数据链路层

    • 还是为两台主机之间的数据传输提供服务,两台主机之间的传输,总是在一段一段的链路上传送的,就需要链路层的协议。
    • 为上层提供服务:把 IP 数据报封装成帧,在链路上进行传递。
    • CSMA PPP
  • 物理层:

    • 在传输媒体上进行传输比特流。
    • 为上层提供服务:尽可能为数据链路层屏蔽传输媒体和通信手段的差异,把帧拆分成比特流在传输媒介上进行传输。
    • 时分复用、频分、码分多址、波分复用等!

2. 应用层

2.1 DNS 协议

是域名解析协议,提供了域名和 IP 地址之间相互转换的服务。

可以使用 UDP 或 TCP,但一般用 UDP 因为快,只要一个请求,一个应答就 ok 了
但 UDP 协议传输的内容不能超过 512 字节,一般上客户端向 DNS 服务器查域名,返回的内容都不超过 512 字节,用 UDP 就够了。

为什么区域传送用 TCP 呢?
什么是区域传送,就是 主 DNS 服务器上的数据有变化了,需要向下传送变化的那部分数据时,因为数据必然很大,并且要保证传输可靠,所以不能用 UDP。
因为 DNS 是分布式数据库,要从主 DNS 上复制内容时,不能用不可靠的 UDP,需要用 TCP 协议。

2.2 DHCP协议

知道是干什么的就行了:
给用户提供了即插即用的联网方式,用户不需要再手动配置 IP 地址等信息。
其自动为用户配置 IP 地址、子网掩码、网关等信息。

2.3 应用层还有没有别的协议?

FTP
动态主机配置协议
SMTP 电子邮件协议

2.4 Web页面的请求过程

简略版

URL 敲下之后,浏览器是想要生成一个 TCP 套接字,以向目标 HTTP 服务器请求资源。
为了生成 TCP 套接字,我们必须知道域名对应的 IP 地址;
为了知道域名的 IP 地址,我们必须先向 DNS 服务器发送 DNS 查询报文;
为了向 DNS 服务器发送 DNS 查询报文,需要知道默认网关的 MAC 地址。
为了知道其 MAC 地址,必须用 ARP 协议进行解析出下一跳,也就是默认网关的 MAC 地址。

拿到默认网关 MAC 地址后,会封装一个 DNS 查询报文,向 DNS 发送 查询请求。
DNS 服务器收到请求后,把查询结果放在 UDP 报文段中,返回给主机。

主机现在拿到了域名对应的 IP 地址,可以生成套接字,把套接字用于向 HTTP 服务器发送 HTTP GET 报文了。
而在生成 TCP 套接字之前,要进行三次握手的连接
1
2
3
连接之后,把 GET 请求封装在报文中,交付给 HTTP 服务器。
HTTP 服务器拿到请求报文后,返回对应的 Web 资源。
浏览器收到 HTTP 响应之后,抽取 Web 页面的内容进行渲染。

巨tm详细版

应用层:URL 敲下之后,首先浏览器会生成一个 TCP 套接字,以向目标 HTTP 服务器请求资源。为了生成该套接字,需要知道该 URL 域名对应的 IP 地址。
应用层:而为了向 DNS 服务器发送请求,生成一个 DNS 查询报文,是 53 端口号的。
网络层:这个 DNS 数据报被放入一个目的地址为 DNS 服务器 IP 地址的 IP 数据报中。
IP 数据报被放入一个帧中,把帧发到默认的网关中,而为了知道网关的 MAC 地址,需要用 ARP 协议来把网关的 IP 解析为 MAC 地址。

直到了网关的 MAC 地址后,才可以继续 DNS 的解析过程。
网关路由器拿到 DNS 查询报文后,会根据报文转发给下一跳,直到到达 DNS 服务器。
到达 DNS 服务器后,DNS 在数据库中查询待解析的域名。
找到 DNS 记录后,发送 DNS 回答报文,放入 UDP 报文段中,转发回主机。

主机拿到了解析后的域名,也就是 IP 地址后,就能生成套接字,把套接字用于向 Web 服务器发送 HTTP GET 报文。
在生成 TCP 套接字之前,必须先与 HTTP 服务器进行三次握手来建立连接。
生成一个具有目的端口 80 的 TCP SYN 报文段,并向 HTTP 服务器发送该报文段。
HTTP 服务器收到该报文段之后,回复 TCP 的 SYN ACK 报文段,发回主机。
主机接收到 SYN ACK 之后,再次恢复一个 ACK 确认连接报文段到 HTTP 服务器。
三次连接建立完毕。
浏览器生成 HTTP GET 报文,并交付给 HTTP 服务器。
HTTP 服务器从 TCP 套接字读取 HTTP GET 报文,生成一个响应报文,把 Web 页面的内容放入报文主体中,返回给主机。
浏览器拿到响应报文后,抽取 Web 页面内容,渲染页面。

2.5 HTTP状态码

1xx 表示成功

2xx 表示成功

3xx 表示重定向

4xx 表示客户端的请求错误,比如 404 资源没找到

5xx 表示服务器错误

2.6 HTTP 长连接和短连接讲讲?流水线知道是什么么?

长连接:

当浏览器访问一个包含多张图片的网站时,如果用短连接就会建立大量的 TCP 连接,这样很耗资源。
长连接允许只建立一个 TCP 连接,就能进行多次 HTTP 通信。
1.1 之前默认短连接
1.1 以后默认长连接

流水线:

默认情况下,HTTP 请求是按顺序发的,下一个请求只有在当前请求收到响应之后才会被发出,有点像停止等待协议。而在收到下一个请求之前,可能需要很长时间。
流水线就是在一个 HTTP 长连接下连续发出请求,不用等待响应返回,减少延迟。

2.7 Cookie 和 Session 的区别?

首先分别说 cookie 和 session 是什么:

  1. cookie:
    what:cookie 是保存在客户端浏览器里的一种信息载体。
    why:用来保存一些站点的用户数据,这样能够为用户定值一些功能,比如免登陆功能。
    how:服务器发送的响应报文的首部有一个 set-cookie 字段,客户端在拿到这个响应后把这个字段的内容保存到浏览器中。在客户端再次发送请求同类资源时,就会把 cookie 一起携带在请求中,发送到服务端。

  2. session
    what:服务器会给每个浏览器创建一个 session 对象,保存在服务器里。
    why:存储在浏览器的 cookie 不安全,可能会有一些 js 脚本能拿到 cookie 的信息,所以存储在服务器更加安全一些。
    how:使用 session 维护用户登陆状态如下
    用户登陆时,把用户名密码表单,放入 http 请求报文中。
    服务器收到后,为其创建一个 session,并创建一个名为 sessionID 的 cookie,其值就映射了服务器里的 session。
    客户端收到这个 cookie 后,把 sessionID 保存在 cookie 里。
    客户端之后对同一个服务器进行请求时,会把 cookie 也带上去,服务器收到之后提取出 sessionID,从中读取出用户信息。

  3. 以上分析就可以轻易的看出 cookie 和 session 的区别
    cookie 存放在客户端,session 存放在服务器端
    cookie 的安全性没有 session 高

  4. 浏览器如果禁用了 Cookie
    URL 重写技术,可以把 sessionID 作为 URL 的参数进行传递。

  5. 其他临场发挥:
    生命周期:都是可以设置的
    作用域:都是可以设置的

2.8 HTTP 1.1 和 1.0 的主要区别

  1. 长连接 短连接
    Connection:keep-alive

  2. 错误状态响应码
    HTTP 新增了一些错误状态响应码

下面这俩看不懂别记了

  1. 缓存处理
  2. 带宽优化以及网络连接的使用

2.9 请求转发和重定向的区别?

  • 请求转发

    • 浏览器只发出一次请求,收到一次响应。
    • 请求所转发到的资源中可以直接获取到请求中所携带的数据
    • 浏览器地址栏显示的为用户所提交的请求路径,不会改变
    • 只能跳转到当前应用的资源中。
  • 重定向

    • 浏览器发出两次请求,接收到两次响应。
    • 重定向到的资源不能直接获取到用户提交请求中所携带的数据。
    • 浏览器地址栏显示的为重定向的请求路径,而非用户提交请求的路径。也正因如此,重定向的一个很重要的作用是,防止表单的重复提交(恶意刷新页面,每刷新一次,就重新提交一次)
    • 重定向不仅可以跳转到当前应用的其它资源,也可以跳转到其它应用中的资源。
  • 如何选择?一般选转发,重定向的两种实用场景:

    • 如果需要跳转到其它应用,肯定重定向。
    • 如果处理表单数据的 servlet 需要跳转到其它的 servlet,则需要选择重定向,防止表单重复提交。(例如:博客项目的 login 登陆接口)

2.10 URL 和 URI 的区别

URI 更像是一个身份证,是资源的标志符。
URL 更像是一个地址,是资源的定位符。
一个 URL 可以确定哪个主机的哪个项目下的哪个资源。

2.11 HTTP 和 HTTPS 的区别

  • 端口来讲:http 端口默认是 80,https 默认端口号是 443
  • 安全性来讲:HTTP 是运行在 TCP 之上的,所有传输都是明文传输,客户端和服务端无法验明对方的身份。而 HTTPS 在中间加了一层 SSL 协议,SSL 协议是运行在 TCP 之上的,所有的传输内容都经过加密,这个加密其实是对称加密。而对称密钥是用服务器方的公钥进行了非对称加密传输过去的。
    • 对称加密算法:加密解密为同一个密钥,且速度很快。
    • 非对称加密算法:密钥成对出现,公钥加密,私钥解密或者私钥加密,公钥解密。算法较为复杂,消耗资源更多。

2.12 SSL 过程

  1. 讲讲 SSL 的过程
    公众号<拓跋阿秀>的回答:
    what? SSL 是安全套接字,是用于加密和验证应用程序和Web服务器之间发送数据的协议。用于提供身份验证,HTTPS 的 S 其实指就是 SSL 协议。

    how? 简略过程是这样的:
    首先客户端向服务器发起 SSL 连接请求。
    服务器把自己的证书发给客户端的浏览器。
    客户端浏览器检查服务器过来的证书是不是 CA 签发的,如果是,就继续执行协议,如果不是,就发出一个警告,询问是否继续。
    继续协议:从证书中把服务器的公钥拿下来,用公钥加密通信用的对称密钥,发给服务器。
    服务器用自己的私钥对其解密,拿到对称密钥。
    接下来就可以进行数据传输,服务器和客户端双方用相同的对称密钥对数据加密,可以保证安全。

  2. 面试问:怎么保证不被篡改?
    可以把摘要(md5 值)单独加密发过去,这样解密的时候对内容进行 md5 算法,和摘要进行比对,如果不一样那么就是被篡改了。

  3. 追问:不是这个意思,我是问的是你怎么保证公钥就是服务器的公钥?
    嗷,服务器事先已经向 CA 申请,CA 是大家都信任的机构, CA 在判明申请者的身份之后,会用自己的私钥对服务器的公开密钥加密,也就是做了个数字签名,然后把这个经过数字签名之后的证书一起发给客户端,客户端拿到之后用数字签名进行验证,如果验证通过,就可以开始通信了。

  4. 自己理解的核心点
    其实单独的非对称加密的一个弱点就是,公钥可能被伪造,比如 A、B通信之间隔了个C,这个C把 A、B通信时用的公钥全部换了,这样也是没办法验证身份的。
    那只需要保证公钥不被伪造就可以了,CA 的公钥大家都相信,甚至已经内置在浏览器里,不会被伪造,都相信 CA 所以只要数字签名认证通过,就可以完全信任服务器了。

2.13 GET 和 POST 区别

  • get 是获取数据,post 是修改数据
  • get 把请求的数据放在 url 上, 以?分割URL和传输数据,参数之间以&相连,所以get不太安全。而post把数据放在HTTP的包体内(requrest body)
  • get 提交的数据最大是 2k( 限制实际上取决于浏览器), post 理论上没有限制。
  • GET 产生一个 TCP 数据包,浏览器会把 http header 和 data 一并发送出去,服务器响应 200(返回数据); POST产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
  • GET请求会被浏览器主动缓存,而POST不会,除非手动设置。
    本质区别:GET是幂等的,而POST不是幂等的

3. 传输层

3.1 注意 三次握手 四次挥手 的状态演变图

3.2 TCP 三次握手

明确四个概念的表达!

  • SYN:请求连接标志位!
  • ACK:确认标志位!
  • seq:序号!
  • ack:确认号!

下面开始叙述:

  • 三次握手的过程:
    客户端的连接请求:首先客户端发送一个带 SYN 标志位的连接请求到服务器,客户端进入 SYN-SENT 状态。
    服务端的连接确认请求:服务器收到之后回复一个 SYN 和 ACK 的确认报文到客户端,此时服务端进入 SYN-RECV 状态,等待第三次握手。
    客户端的连接确认请求:客户端接收到确认报文后,向服务端再次发出带 ACK 的确认报文,后客户端这边连接建立,服务端收到客户端的第三次确认报文后,连接建立。

  • 为何要三次握手?
    从第一个角度。通信是双方的行为,双方都需要确认四件事,自身的接收发送是否正常以及对方的接收发送是否正常。如果仅两次的话,服务端是没有办法确认自己发送和对方接收是否正常的,不是可靠的连接。
    从第二个角度。也可以防止失效连接到达服务器后重新打开连接。客户端发送的请求如果阻塞。那么客户端等待一个超时重传时间以后,会重发一个连接请求。假设这个来迟滞留的请求最终到达了服务器,如果不三次握手的话,服务器就会打开两个连接。如果有第三次握手,客户端就会忽略掉服务器之后的连接确认请求。

  • 如果 1、2、3 次握手分别丢包了,会发生什么?
    https://blog.csdn.net/plokmju88/article/details/103884145
    第一次客户端发的 SYN 丢了:
    客户端迟迟接不到响应,超时重传。
    第二次服务端发的 SYN 和 ACK 丢了
    客户端迟迟接不到响应,超时重传
    第三次客户端发的 ACK 丢了?
    因为第三次发完 ACK 之后,随时接下来会继续往服务端发数据,我看过一篇博客里写的是发数据时会带上 ACK,所以客户端响应的 ACK 包丢了,服务器也能够通过之后的包来建立连接。
    第三次故意不发送 ACK 呢?
    洪水攻击,服务器在等待第三次握手时是处于半连接状态,也是需要耗费资源的,如果有攻击者故意不发送第三次 ACK,让大量连接处于半连接状态,那么会把服务器资源耗尽,洪水攻击的目的就达到了。

3.3 TCP 四次挥手

  • 四次挥手的过程
    客户端发送一个带 FIN 标志位的关闭连接请求,此时客户端进入 FIN - WAIT - 1 阶段。
    服务器收到该请求后,返回一个 ACK。
    客户端收到 ACK 之后,进入 FIN - WAIT - 2 阶段,此时处于半关闭状态,服务器能给客户端发消息,但客户端不能给服务器发消息。
    当服务器把剩下的消息发完之后,会发送一个 带 FIN 标志位的关闭连接请求给客户端。
    客户端收到该请求后,发出 ACK 确认,并进入最后的 TIME - WAIT 状态,等待 2MSL(最大报文存活时间) 后释放连接。
    B 收到确认后,释放连接。

  • 四次挥手的原因
    服务端在收到客户端的 FIN 报文后,仅表示客户端不在发送数据了,但客户端还可以接,而服务端也不是说数据都发完了,所以服务端可以立即关闭,也可以再发送一段时间的数据后再发送 FIN 报文给客户端表示同意关闭。因此服务端的 ACK 和 FIN 标志位会分开发送,在 ACK 和 FIN 之间可能还会给客户端传数据,导致多了一次。

  • 为什么客户端要等待 2MSL 后再释放连接
    第一个角度:确保最后一个确认报文能到达,如果服务器没收到来自客户端的 ACK 报文,就会重新发送 FIN 报文到客户端,客户端等待一段时间就是为了处理这种延迟的情况。
    第二个角度:等待一段时间是为了让本连接持续的时间内所有报文从网络中消失,使得下一个新连接里不会出现旧的报文。

3.4 TCP如何实现可靠传输?

答:首先可靠传输的基础是滑动窗口协议,配合着一些其他的控制来使得整个传输过程可靠。这些控制我觉得可以按分为三部分去解释,一个是基本的控制、一个是发送端的控制、一个是接收端的控制。

  1. 首先详细说一下滑动窗口协议:
    首先在发送方和接收方都维护一个滑动窗口,发送方的窗口大小其实是由接收方的响应报文里的一个字段控制的。
    发送方:窗内都允许被发送,窗内最左侧的字节如果已发送并且被确认,向右滑动,直到第一个不是被确认状态的字节。
    接收方:窗内都允许被接收,窗内最左侧的字节如果已接收,向右滑动到第一个不是已接收的状态的字节。并且最重要的是,接收方仅对最后一个按序到达的字节进行确认!
  1. 然后说一下这些控制,从三个方面来讲
  • 基本的控制:
    • 把应用层的数据拆分成适合传输的一个个块儿。
    • 给发送的每一个块儿进行编号,在接收端对数据包进行重排。
  • 发送端的控制:
    • 超时重传技术(两个公式细节在下面):当发送方发送一个包时,启动一个定时器,等待确认这个包,如果不能在阈值内收到确认这个包,则重发。
    • 流量控制:为了控制发送方发送速率,保证接收方来得及接收。接收端返回的确认报文中的窗口字段可以控制发送窗口大小,从而影响发送方的速率。将窗口字段设置为 0,则不能发送数据。
    • 拥塞控制(四个算法细节在下面):当网络拥塞时,会丢包,此时发送方会不断尝试重传,从而导致拥塞程度更高。因此当出现拥塞时,应当限制发送方的发送速率。和流量控制很像但目的不同。流量控制更多的是一个端到端的控制,要做的是抑制发送端发送数据的速率,主要是为了控制接收方来得及接。而拥塞控制是为了宏观上降低网络的拥塞程度。
  • 接收端的控制:
    • 校验和:保证首部的数据的校验和。如何校验和有误,那么就丢弃该数据包,且不发送确认消息。
      丢弃重复:如果收到重复的数据包,直接丢弃。


 

3.5 UDP协议讲讲 

3.6 TCP和UDP应用场景?

  1. 实时音视频是可以而且应该用 UDP 的,一方面因为它常常涉及到网络穿透,另外一方面它不需要重传。——我需要实时的看到你的图像跟声音,至于中间丢一帧什么的完全不重要。而为了重传往往会造成延迟与不同步,考虑一下,某一帧因为重传,导致 0.5 秒以后才到,那么整个音视频就延迟了0.5秒。
    考虑一下接收方视频,如果使用 TCP 丢包重传导致视频的中间延迟了0.5秒,那么后续的同化全都会比发送方延迟 0.5 秒。这种延迟是累加的,随着持续丢帧,延迟会越来越大,达到数秒,甚至分钟级,这会严重影响即时性比较强的音视频通话的用户体验。
    因此「实时音视频聊天」功能通常都会使用 UDP 实现。

  2. 如果出现卡顿掉帧,就是 UDP 的结果,如果是 TCP 协议,那么是直接视频黑屏,然后又重新有了,不会出现卡顿掉帧,因为 TCP 是面向连接的,他的确认重传机制保证了他收到的数据是可靠的,连续的!

网络直播对实时性要求并没有那么高,UDP 吧,这种视频类型一般不提供可靠交付,比如你看到的视频卡顿,掉帧等等,都是UDP的结果,如果是tcp则是视频直接黑屏,然后又重新有了,而不会卡顿出现掉帧,就像打电话,一般只会断线,而不会卡住,这是因为 tcp 保证可靠交付,如果网络信号出现问题,就会重新交付,而不会放任信息丢失。

4. 网络层

4.1 讲讲ARP协议

ARP 协议:
这个协议主要提供了由目的 IP 地址得到目的 MAC 地址的功能。

因为网络层讲的是 主机和主机 之间的通信,所有下面就把所有的描述成主机之间的通信。

  • 在同一个局域网中:主机 A 想往主机 B 发信息时,会先在自己的 ARP 缓存表中查找是否有对应 主机B IP 地址的 MAC 地址,如果没有,则发送一次 广播 ARP 请求分组,主机 B 和主机 A 在同一个局域网,则主机 B 收到 ARP 请求分组时,会回发一个 ARP 响应分组,里面带有自己的 MAC 地址。

  • 不在同一个局域网中:主机 A 会先把子网掩码和目的 IP 进行相与,发现不一个网段,那么其下一跳就直接找默认网关就可以了,如果 ARP 缓存里没有默认网关的 MAC 地址,也需要先发一个 ARP 请求分组,等默认网关给他回一个 ARP 响应分组后,就拿到了默认网关的 MAC 地址。

路由器会帮他广播,找到主机 B 的 MAC 地址,然后主机 B 会回答一个 ARP 响应分组给 主机 A 然后就拿到了!

4.2 讲讲ICMP协议

what?
本质还是个 IP 数据报,IP数据报的数据段用 ICMP 报文代替了而已。

why?
ICMP 协议是网络层的协议,其主要的作用是用来提高交付成功的机会,让网络节点能够报告差错情况和异常情况的。
分为差错报告报文和询问报文。

how?
差错报告报文至少有四种:

  • 终点不可达报文,当路由器和主机没办法交付数据,就向源头发送一个终点不可达报文。
  • 时间超过:如果路由器发现数据的 TTL 为 0,那么丢弃该数据,并向源头发送一个时间超过报文。可以用于 traceRoute
  • 参数问题:如果路由器或主机发现 IP 数据报的首部有错误时,就告诉发给源头一个参数问题报文。
  • 改变路由报文:路由器给主机发送这个报文,告诉他有更好的路径。

询问报文有两种:

  • echo(回声) 请求报文或回答报文:主机或路由器向一个特定的主机发送回声请求报文,目的主机收到后回一个回答报文。
  • 时间戳请求和回答报文:向服务器请求一个时间戳,用来时钟同步和测时间。

应用:

  1. ping 命令的过程:
    主要为了测试两个主机间是否是通的!
  • 如果在一个网段:
    • 首先主机 A 要向主机 B 发送 ICMP 回声请求报文,会先在 ARP 缓存表里找主机 B 的 IP 对应的 MAC 地址、
    • 如果有直接发送,如果没有,则发送一个 ARP 请求。
    • 主机 B 收到 ARP 请求之后,回复一个 ARP 应答。这样主机 A 就拿到了主机 B 的 MAC 地址。
    • 然后主机 A 发送 ICMP 回声请求报文,主机 B 接收到以后,回复一个 ICMP 回答报文。
    • 主机 A 根据回答报文估算往返时间和丢包率等等等。
  • 如果不在同一个网段
    • 还是先找 MAC 地址
    • 如果有直接发送,没有的话,发送 ARP 请求到网关。
    • 网关收到 ARP 请求后,也会在自己的 ARP 缓存表里找是否有,没有的话就广播 ARP 请求,如果是一对一那就直接找下一跳。具体情况具体分析!(这里看王道考研 ARP 协议)反正就记住,如果不在同一个网段,就直接交给路由器处理。
    • 主机 B 收到 ARP 请求之后,把 MAC 地址告诉主机 A
    • 主机 A 发送 ICMP 回声请求报文,主机 B 接到之后,回复一个 ICMP 回答报文。
    • 根据回答报文估算往返时间,丢包率等
  1. 路由跟踪
    主要是为了跟踪路由的路径。
    用自己的话描述:源主机发一系列的 TTL 依次递增的 IP 数据报,比如 TTL 为 1 的数据报,经过第一个路由器就会给源主机发一个时间超过差错报告报文。这样一直到目的主机,就可以直到到达目的主机的路由器的 IP 地址以及到达每个路由器的往返时间。

下面是书上的详细描述(不看也罢,我真背不会。。。):
源主机向目的主机发送一连串的 IP 数据报。第一个数据报 P1 的生存时间 TTL 设置为 1,当 P1 到达路径上的第一个路由器 R1 时,R1 收下它并把 TTL 减 1,此时 TTL 等于 0,R1 就把 P1 丢弃,并向源主机发送一个 ICMP 时间超过差错报告报文;
源主机接着发送第二个数据报 P2,并把 TTL 设置为 2。P2 先到达 R1,R1 收下后把 TTL 减 1 再转发给 R2,R2 收下后也把 TTL 减 1,由于此时 TTL 等于 0,R2 就丢弃 P2,并向源主机发送一个 ICMP 时间超过差错报文。
不断执行这样的步骤,直到最后一个数据报刚刚到达目的主机,主机不转发数据报,也不把 TTL 值减 1。但是因为数据报封装的是无法交付的 UDP,因此目的主机要向源主机发送 ICMP 终点不可达差错报告报文。之后源主机知道了到达目的主机所经过的路由器 IP 地址以及到达每个路由器的往返时间。

4. 其他进阶面试题收集

剩下的都是我平时的一些面试题收集,我也没有全搞明白,如果学有余力的同学可以深入学习一下,但这一定是要在上述问题都弄明白的基础上的!

这里面有一些是重复的!原因是面试题搜集来源不一,大家自动过滤掉就好!

ack 什么时候发送,如果丢失了会怎么样
链路层、物理层都有什么作用?其他三层有什么作用?
sack 是什么
重传 ack 的时机只有 ack 超时吗?
重复的报文被接收会怎么样?
拥塞窗口要不要把自己的大小发给接收方?为什么,有什么意义?
延迟 ACK 的意义是什么?
为什么不能每次直接发大的窗口?
TCP / UDP 区别
TCP / IP 五层架构对应什么协议
如何保证 TCP 的可靠性
三次握手和四次挥手的详细流程
为什么是三次握手,而是四次挥手
为什么不能两次握手?
为什么等待 2MSL
如果已经建立了连接,但是客户端突然出现故障了怎么办?
为什么有一个半关闭状态,明明客户端已经要求断开连接了,你还向客户端发送报文?这个数据没传完知道是什么,谁的数据没有传输完?
TCP 连接池有一个四元组,讲讲。
ICMP 协议位于哪一层
链路层?
为什么握手是三次而挥手需要四次
浏览器输入域名到页面返回的详细过程!经典问题。
get / post 区别
url 访问的原理,包括 dns 原理,路由器上找的时候,有哪几种情况。
http 和 tcp 是什么关系?
http 请求头有哪些?
Http 断点续传问题
TCP / UDP 有什么缺点,是如何解决的?
TCP 滑动窗口(其实就是 TCP 如何保证可靠连接,那一堆东西)
TCP 接收窗口和拥塞窗口、流量控制细节(包速率增长函数说不清楚)假设有节点自带 p 的丢包率,如何判断丢包是因为带宽不够还是随机丢包导致的?
什么时候会向对端传窗口大小?
如果滑动窗口为 0 的时候,会怎么办?
如果视频聊天出现卡顿,如何在应用层面缓解?
get / post 有什么区别
视频面试用的是 TCP 还是 UDP,为什么?
加载 url 到界面显示出来的过程中发生了什么?并且这中间有哪些过程是可以优化的?
Http 请求头都有什么内容?报文格式是什么,响应报文格式是什么
Https 为什么要用对称加密 + 非对称加密 + CA证书
讲讲 ping 命令,用了哪些协议?
讲讲 http 协议?
Http 缓存机制讲讲
http 的长连接讲一下
断点续传问题
如何实现长连接
带外数据如何使用,可以兼容不同的浏览器么。
讲讲网络通信的多路复用
Http 和 https 的区别,CA 整数,数字前面,SSL 层握手具体过程,RSA
Http 和 https 在建立连接的时候的区别和联系,s 指的是什么?
对称密钥为什么速度快?
301 302 什么区别?响应状态码?
cookie 和 session 的区别,多个服务器如何保存 session 一致性?
讲 TCP 协议
TCP 连接的本质是什么
cookie 和 sesison 的区别是什么?
禁用了 cookie 以后,还能用session吗?如何?
计算机在设置 ip 的时候会设置哪些参数?(ip、子网掩码、网关)
子网掩码和网关的作用
路由器、***是哪一层的?
DNS 协议
TCP 可靠性如何实现?
time_wait 状态有什么用?
如果用 udp 发送一个比较大的文件应该如何操作,如何确定文件是否发送完成,是否有丢失,如何对接收到的数据包进行组装,编号如何存放,用什么数据结构。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

范纹杉想快点毕业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值