1. 面试高频考题 (我感觉是面向 web开发者的)
- TCP三次握手和四次挥手
- 在浏览器中输入url地址->>显示主页的过程
- HTTP和HTTPS的区别
- TCP、UDP协议的区别
- 常见的状态码
2.TCP3次握手-4次挥手
2.1 概念:两张图
(1) 建立TCP连接的3次握手 (这个图是理解的核心,记)
- 核心是要理解: (参考[5])
- 1) “3次握手”的作用就是
双方都能明确自己和对方的收、发能力是正常的
。这里只谈能力,不谈发送的报文是否有错误(比如丢包) - 2) 3次握手”的作用就是
双方都能明确 (自己和对方)的(收、发能力)是正常的
,组合排列就是2x2x2=8个确认, 理论上要发8/2=4次握手,但后面发现,其实通过 自反馈确认自己的发送能力 可以减少为 3次握手。 - 3) 主要有两个线索帮助确认:首先是 接收方会立即推 发送方的发送能力和接收方(自己)的接收能力正常,这是最简单的线索;其次 自己通过反馈(自己发的SYN又被对方发回来了)来确定 自己的发送能力 正常(这是最重要的) & 对方的接收能力和发送能力都正常;
- 4) SYN 用于初如化一个连接的序列号,ACK是对SYN的确认返回,FIN表明该报文段的发送方已经结束向对方发送数据
- 1) “3次握手”的作用就是
基于以上铺垫,我们再次理解 3次握手 给我们提供的信息:
- 第一次握手,server确认 client的发送能力和server的接收能力 正常
- 第二次握手,收到ACK让 client确认 server的发送能力和client的接收能力 正常;而SYN这个自反馈让(client确认 server的接收能力和发送能力 正常) & (server确认 server的发送能力 正常)
- 第三次握手,server作为接受者,server确认 client的发送能力和server的接受能力 正常; ACK作为自反馈 让 (server确认 client的接收能力和发送能力 正常) & (server 确认自己的发送能力 正常)
- 综合上述的 几个确认,发现
- 最精彩的就是第二次握手的 SYN/ACK 这个捎带确认,确实很work, 只用3次握手就实现了 4次握手的效果
- 自反馈 是 自己评估自己的发送能力 的核心唯一方法
- 而从上面的过程可以看到,最少是需要三次握手过程的。两次达不到让双方都得出自己、对方的接收、发送能力都正常的结论。
(2) 断开TCP连接的4次挥手
有了前面的铺垫,理论上本来就是 4次握手才行。关闭和开启连接的本质区别是:开启连接是双方同步同意的,所以最少可以3次;而关闭指令是由上层即应用层所决定的,所以单方面可以决定关闭连接,不同步,所以没法做稍带确认 (即 server 返回 ACK时不能自作主张 捎带一个FIN)。所以 至少4次
(3) 用下面这张图 回顾上面的3+4的过程
2.2 为啥两张图需要的次数不一样?
关闭指令是由上层即应用层所决定的,所以单方面可以决定关闭连接,client和server不同步,所以没法做稍带确认 (即 server 返回 ACK时不能自作主张 捎带一个FIN)。所以 至少4次
2.3 在3次握手时,接收方为啥要回传对方发送的SYN 构成自反馈?
为了 让对方自查自己的发送能力
2.4 在3次握手时,为啥对方发了SYN自己必须要发ACK
SYN只是验证了一个方向通信的可达性,ACK来验证相反方向通信的可达性
3.一个URL奇幻之旅
- DNS解析: url即服务器的域名->IP
- 浏览器向IP所在服务器发起HTTP请求
- 服务器响应请求
- 服务器返回HTML响应
- 客户端拿到HTML响应渲染
从client到server用到了: DNS协议, TCP协议, IP协议, OSPF协议(路由的), ARP协议(ip转服务器mac), HTTP协议 (扎到服务器后, 使用HTTP实现 服务器与浏览器的超文本传输);返回的时候同理
4.HTTP协议详解 vs. HTTPS
4.1HTTP长连接、短连接
- 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
- 而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:Connection:keep-alive。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
4.2 HTTP方法有哪些?
- GET、POST、等待
- GET 只是一次 HTTP请求,POST 先发请求头再发请求体,实际上是两次请求。就安全性而言,POST 的安全性要比 GET 的安全性高,因为 GET 请求提交的数据将明文出现在 URL 上,而且 POST 请求参数则被包装到请求体中,相对更安全;
4.3 DNS 的解析过程?
- 递归。首先源主机先深度优先找到root域名服务器,用域名查目的IP;然后返回到源主机,再次出发走到 目的主机的IP (出去-回来-再出去)
4.4 HTTPs vs. HTTP
- https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
5. 常见状态码
5.TCP vs. UDP
5.1 一个定性的比较
- TCP面向字节流?
- 需要建立连接,然后
- UDP面向数据报文段?
- 不需要建立连接,所以受到UDP报文,直接开始传输
- 无连接的-不可靠的UDP的应用场合?
- UDP 在传送数据之前不需要先建立连接,远地主机在收到 UDP 报文后,不需要给出任何确认。虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信),比如: QQ 语音、 QQ 视频 、直播等等,提供广播或多播服务
- 有连接-可靠的UDP的使用场景?
- TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。
7. 关于TCP
7.1 TCP 如何确保 可靠传输?
- 应用数据被分割成 TCP 认为最适合发送的数据块
- TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层
- 校验和:TCP 将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段
- TCP 的接收端会丢弃重复的数据
- 流量控制:TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议。(TCP 利用滑动窗口实现流量控制)
- 拥塞控制: 当网络拥塞时,减少数据的发送
- 停止-等待协议也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。超时重传:当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段
7.2 停止等待协议
- 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;
- 如果发生超时,就重传这个数据;
- 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;
- (1) 无差错
- (2) 有差错
- 确认丢失
- (4) 确认迟到
7.3 自动重传请求(ARQ)协议 and 连续ARQ协议 (停止等待协议的两个重传机制)
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)
- 自动重传请求ARQ:
- 因此每发送完一个分组需要设置一个超时计时器
- 优点是 简单,缺点是新到利用率低 (因为其重转时间 比数据在分组传输的平均往返时间更长一些,信道空闲)
- 连续ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
- 优点是 信道利用率高,缺点是 如果总共m个包中间有n个丢失,只能确认 前(m-n)个,丢失的需要全部重传(而自动重传请求ARQ,只需要重传最近一个)
7.4 流量控制 (对点到点的控制)
- TCP 利用滑动窗口实现流量控制。
- 流量控制是为了控制发送方发送速率,保证接收方来得及接收。(所以应考察接收方的缓冲区大小)
- 接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
7.5 滑动窗口
- TCP 利用滑动窗口实现流量控制的机制。
- 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。
- TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报。(但有两种特例,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小)
7.6 拥塞控制 (对全局的控制)
(1) 在某段时间,若对网络中某一资源(比如网络带宽,信道带宽, 路由器负载)的需求超过了该资源所能提供的可用部分(供不应求),网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
(2) 为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为 (拥塞窗口和接收方的接受窗口)中较小的一个。
(3) TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
- 慢开始:慢开始算法的思路是, 当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
- 拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1. (本质和慢开始一样,但是不是一个轮次加倍,而是 确认一次加1;一个轮次 不是一次RTT哦,加倍)
- 快重传与快恢复:在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。(短时间内大量丢包,就会短时间内大量重传,就有大量重复的重传,还不如暂停一个个传)
8. ARP 协议的工作原理?
- 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
- 当源主机要发送数据时,首先检查自己的ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机广播发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
- 当本网络的所有主机(包括自己)收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中(更新ARP列表),如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
- 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表(更新ARP列表),并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。广播发送ARP请求,单播发送ARP响应。(广播找目的地址,单博直接根据目的地址发送数据)
9. 对IP地址分类的理解?
- IP地址是指互联网协议地址,是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异。IP地址编址方案将IP地址空间划分为 A、B、C、D、E 五类,其中 A、B、C 是基本类,D、E 类作为多播和保留使用,为特殊地址。
- 每个IP地址包括两个标识码(ID),即网络 ID 和主机 ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机 ID与其对应。A~E 类地址的特点如下:
- A 类地址:以 0 开头,第一个字节范围:0~127;
- B 类地址:以 10 开头,第一个字节范围:128~191;
- C 类地址:以 110 开头,第一个字节范围:192~223;
- D 类地址:以 1110 开头,第一个字节范围为 224~239;
- E 类地址:以 1111 开头,保留地址
10. 交换机、路由器、网关的概念,并知道各自的用途?
- 交换机: 交换机工作于OSI参考模型的第二层,即数据链路层。交换机内部的CPU会在每个端口成功连接时,通过ARP协议学习它的MAC地址,保存成一张 ARP表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。因此,交换机可用于划分数据链路层广播,即冲突域;但它不 能划分网络层广播,即广播域。
- 路由器: 路由器 (Router)工作在OSI模型的第三层即网络层,例如网际协议,是一种计算机网络设备,提供了路由与转送两种重要机制,可以决定数据包从来源端到目的端所经过的路由路径(host到host之间的传输路径),这个过程称为路由;将路由器输入端的数据包移送至适当的路由器输出端(在路由器内部进行),这称为转送。
- 路由器的一个作用是连通不同的网络,另一个作用是选择信息传送的线路。 路由器与交换器的差别,路由器是属于OSI第三层的产品,交换器是OSI第二层的产品(这里特指二层交换机)。
11. 参考
- [1]. 慕课网:搞定计算机网络面试,看这篇就够了(补充版)
- [2]. 老刘:计算机网络太难?了解这一篇就够了
- [3]. zhisheng:计算机网络基础常考面试题精华总结
- [4]. 计算机网络-网络层协议(思维导图)以及面试题总结(tcp/ip卷一笔记)_happygjcd的博客-CSDN博客 (包含一个极好的脑图)
- [5]. Stefno:“三次握手,四次挥手”你真的懂吗? (正确理解 3次握手4次挥手的 最佳姿势,真正讲清楚了)
- [6]. HTTP与HTTPS的区别 - konglingbin - 博客园