一、应用层
1. http1.0 与 http2.0 的区别
有两点
1是持久化, 这个持久化并不是磁盘的持久化,而是tcp连接建立的持久化。
- HTTP/1.0默认情况下使用短连接,即每个请求/响应都会关闭连接。这意味着每次请求都需要重新建立连接,增加了网络延迟。
- HTTP/1.1引入了持久连接的概念,通过
Connection: keep-alive
头部,允许客户端和服务器在单个连接上发送多个请求和响应,减少了连接建立的开销,提高了性能。
2是通道化,原来只能一个在一个连接上发送一个请求。HTTP/1.0中,客户端必须等待服务器响应一个请求后才能发送下一个请求,导致了请求和响应之间的串行处理
其实通道化和持久化并不矛盾,原本是 一次连接就发送一次请求 然后关闭连接,肯定不会出现一个连接发送多个请求的情况。
2. 邮件协议
pop3和smtp检索邮件的区别:
pop3一旦被客户代理下载,就会被邮件服务器删除,而且换一个客户代理后,不会共享。
imap与之相反。
imap协议,会在 邮件服务器上 提供一个主副本,供 客户代理下载。
客户代理的一些操作会同步到邮件服务器。
3. DNS
三个问题:
同一平面容易重名,怎样区分名字?
怎样完成从域名到ip的转化?
当一些域名被删除或过期或新增时,怎样进行处理?
上层的区域知道下面的区域怎么走
缓存记录,本地直接能查,不用去权威服务器
删除记录,保持一致性,别人可能对他的域名进行维护。
突然回忆其,先根据邮件服务器的别名查找正规名,然后根据正规名进行查找。
每个区域都会有 权威服务器,这也避免了单点故障。
二、传输层
传输层,承上启下。向上要提供可靠的服务,但它的下层,网络层却提供的是不可靠的服务。
1. 复用和解复用
复用是指将多个信号或数据流合并到一个信号或通道中的过程。解复用则是从多路复用的信号中分离出原始信号的过程。
像 封包和解包
像 通过socket往下发,通过socket去接收
2. 可靠数据传输的原理
2.1 ack和Nack(类比于rabbitmq)早期
stop and wait 协议:停止等待协议 非流水线协议
流水线协议 回退n帧和选择性重发
回退n帧和选择性重发的区别在于 滑动窗口的大小。
重发机制也不同,回退n帧的发送者在超时后,会将滑动窗口的所有分组发送,这是合乎逻辑的一件事,因为发送者本来就是把滑动窗口里的所有分组发送过去,但是对于一些比较复杂,容易出错的场景,消耗非常大,性能差。 但对于选择性重发,只对出错的进行重发。
2.2
发送窗口是发送缓冲区的一个子集
当send_window=1 rev_window=1 为停止等待协议,发送方一次只能发送一个数据帧,并等待接收方的ACK。这种方式简单但效率低下,尤其是当链路延迟较高时。没有把链路利用起来,就像一条很长的高速公路
当send_window>1 rev_window=1 为回退n帧协议,发送方可以在一个窗口内发送多个数据帧,但如果任何一个数据帧丢失或损坏,发送方需要重传从丢失数据帧开始的所有后续数据帧,这可能会浪费资源
当send_window>1 rev_window>1 为选择重传协议
发送窗口 有前沿和后沿,
当发送消息为确认时,前沿向前移动,但不能超过滑动窗口的大小
当发送消息为已经确认后,后沿向前移动,但不能超过前沿的位置。
go back n是顺序的接收
3. 为什么回退n帧协议,计时器结束后,需要重发发送方所在窗口的所有分组?这跟选择性重发有什么区别吗?
对于回退n帧,异常时(延迟到达,丢失),发送方发送所在窗口的所有分组是正常的逻辑,因为发送的窗口是根据 接收方的ack去移动的。即使没有出错,发送方依然是按照这个逻辑去发送。
对于选择性重发,由于接收方可以接收多个,每个分组(packat)都会有对应的ack,因此当发生丢失的情况时, 它会超时重发
Go-back-n只有一个定时器
回退N帧协议(Go-Back-N,简称GBN)和选择性重传协议(Selective Repeat,简称SR)都是用于实现可靠数据传输的协议,但它们在处理丢包和重传方面的机制有所不同。下面我们分别解释这两种协议的特点和区别。
回退N帧协议(Go-Back-N)
主要特点
- 发送窗口:发送方可以发送多个数据分组,但接收方只能确认已按序接收到的最高序号的数据分组。
- 接收窗口:接收方只能接收按序到达的数据分组,对于乱序到达的数据分组,接收方会暂时保存,并发送一个重复的ACK,表示仍期望下一个按序的数据分组。
- 重传机制:如果发送方在超时时间内没有收到某个数据分组的ACK,它会重传该数据分组以及之后的所有数据分组。这是因为接收方发送的ACK只表示已接收到的最高序号的数据分组。
工作流程
- 发送数据:发送方在一个窗口内发送多个数据分组。
- 接收数据:接收方按序接收数据分组,并发送ACK确认已接收到的最高序号的数据分组。
- 重传数据:如果发送方在超时时间内没有收到某个数据分组的ACK,它会重传该数据分组以及之后的所有数据分组。
示例
假设发送窗口大小为4,发送方发送了序号为0、1、2、3的数据分组。接收方按序接收到序号为0的数据分组,并发送ACK=1。如果序号为1的数据分组丢失,发送方在超时时间内没有收到ACK=1,它会重传序号为1、2、3的数据分组。
选择性重传协议(Selective Repeat)
主要特点
- 发送窗口:发送方可以发送多个数据分组,接收方可以接收乱序到达的数据分组,并发送选择性的ACK,表示哪些数据分组已经接收到。
- 接收窗口:接收方可以接收乱序到达的数据分组,并暂时保存它们,直到丢失的数据分组到达后再按序递交。
- 重传机制:如果发送方在超时时间内没有收到某个数据分组的ACK,它只会重传丢失的那个数据分组,而不是之后的所有数据分组。
工作流程
- 发送数据:发送方在一个窗口内发送多个数据分组。
- 接收数据:接收方可以接收乱序到达的数据分组,并发送选择性的ACK,表示已接收到哪些数据分组。
- 重传数据:如果发送方在超时时间内没有收到某个数据分组的ACK,它只会重传丢失的那个数据分组。
示例
假设发送窗口大小为4,发送方发送了序号为0、1、2、3的数据分组。接收方按序接收到序号为0的数据分组,并发送ACK=1。如果序号为1的数据分组丢失,接收方接收到序号为2、3的数据分组,并发送选择性的ACK,表示已接收到序号为0、2、3的数据分组。发送方在超时时间内没有收到ACK=1,它只会重传序号为1的数据分组。
回退N帧协议与选择性重传协议的区别
-
重传机制:
- 回退N帧协议:如果某个数据分组丢失,发送方会重传该数据分组以及之后的所有数据分组。
- 选择性重传协议:如果某个数据分组丢失,发送方只会重传丢失的那个数据分组。
-
接收机制:
- 回退N帧协议:接收方只能接收按序到达的数据分组,对于乱序到达的数据分组,接收方会暂时保存,并发送重复的ACK。
- 选择性重传协议:接收方可以接收乱序到达的数据分组,并发送选择性的ACK,表示已接收到哪些数据分组。
-
效率:
- 回退N帧协议:重传多个数据分组可能导致不必要的网络负载,特别是在网络状况较差的情况下。
- 选择性重传协议:只重传丢失的数据分组,减少了不必要的重传,提高了网络利用率。
总结
- 回退N帧协议:适用于网络状况较好的场景,可以简化实现,但可能导致不必要的重传。
- 选择性重传协议:适用于网络状况较差的场景,可以提高效率,但实现相对复杂。
4. TCP可靠性传输
发现,TCP并不是理想中的直接使用 选择性重传 协议
Mac层
1. 可以讲一下A-B-C数据包的传输吗?
在数据包从源主机A传输到目标主机C的过程中,获取目标主机C的MAC地址通常发生在数据链路层。但是,直接从A到C获取MAC地址通常是在它们位于同一个局域网(LAN)内时才会发生。当A和C不在同一网络,即它们之间有路由器B隔离时,A实际上先需要获取的是其默认网关(通常是路由器B)的MAC地址,而不是C的MAC地址。
下面是如何获取MAC地址的详细步骤:
当A和C在同一局域网内:
- A构建一个带有C的IP地址的ARP请求。
- ARP请求广播到整个局域网,询问:“谁拥有这个IP地址?”
- C收到广播,识别出请求中的IP地址是自己的,然后回应一个ARP响应,其中包含了C的MAC地址。
- A接收并缓存C的MAC地址,以便将来使用。
当A和C不在同一局域网内:
- A构建一个带有其默认网关(通常是路由器B)的IP地址的ARP请求。
- ARP请求广播到A所在的局域网,询问:“谁拥有这个IP地址?”
- B(作为默认网关)收到广播,识别出请求中的IP地址是自己的,然后回应一个ARP响应,其中包含了B的MAC地址。
- A接收并缓存B的MAC地址,封装数据包,并将其发送给B。
- 数据包经过路由器B和可能的其他网络设备,最终到达C所在网络的路由器。
- 最终的路由器执行与A相同的过程,通过ARP获取C的MAC地址,并将数据包发送给C。
请注意,MAC地址获取过程对于用户来说通常是透明的,由操作系统和网络设备自动完成。