计算机网络

131 阅读19分钟

【计算机网络】传输层知识点总结_tcp所有允许airtunes2 通信 udp 所有允许 dhcp 通信 udp 所有允许dhcpv-CSDN博客

【计算机网络】应用层知识点总结_计算机网络应用层知识点-CSDN博客

腾讯电竞(TCP HTTP面试题总结)

HTTP(重要)

http报文格式

请求行:请求方式,URL,版本

请求头:字段名->值

请求体

浏览器键入网址全过程?(重要)字节、米哈游

访问网页的全过程(知识串联)

  1. 浏览器有缓存的话,先走浏览器缓存。
  2. DNS服务器解析:将域名给DNS服务器获取 IP地址。
  3. TCP连接:拿到IP地址后,通过IP:PORT向向目标服务器发起一个 TCP 连接请求,通过三次握手
  4. 如果网页支持HTTPS,则进行SSL/TLS四次握手(可以展开)。
  5. 发送http请求:在TCP连接的基础上,向服务器发送一个 HTTP 请求报文,请求获取网页的内容。
  6. 这里如果是Java则涉及tomcat容器,以及后续DispatcherServlet(涉及SpringMVC),.......
  7. 服务器响应:服务器收到 HTTP 请求报文后,处理请求,并返回 HTTP 响应报文给浏览器。
  8. 浏览器接收:浏览器收到 HTTP 响应报文后,解析响应体中的 HTML、CSS 代码,渲染网页的结构和样式。

HTTP 和 HTTPS 有什么区别?(重要)

HTTPS是什么?加密原理和证书。SSL/TLS握手过程_哔哩哔哩_bilibili

3.1 HTTP 常见面试题

  1. 端口:一个默认80,一个默认443
  2. URL前缀不同: 一个http,一个https
  3. 安全性:HTTP 协议运行在 TCP 之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS 是运行在 SSL/TLS 之上的 HTTP 协议SSL/TLS 运行在 TCP 之上。所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的证书进行了非对称加密。
  4. https过程:TCP握手完成之后。进行SSL/TLS握手,浏览器会验证服务器的证书等、中间均采用非对称加密,最终双方都会持有相同的会话密钥(对称) ,后续进行正常的HTTP通信,但是内容都经过了会话密钥加密和解密。

TLS/SSL协议的三大特性(解决了http的漏洞)

  1. 加密传播:在握手协议中定义了会话密钥后,所有的消息都被加密,使得第三方无法窃听,解决 HTTP 通信的窃听风险;
  2. 身份证书:可选的客户端认证和强制的服务器端认证,防止身份被冒充,解决 HTTP 通信的冒充风险;
  3. 校验机制:传送的消息包括消息完整性检查,解决 HTTP 通信的篡改风险

TLS/SSL 的功能实现主要依赖于三类基本算法:散列函数 Hash、非对称加密和对称加密。

先利用非对称加密实现身份认证和密钥协商

再通过对称加密算法用协商好的密钥对数据加密

最后基于散列函数验证信息的完整性

HTTP 状态码有哪些?(面经)

2xx 成功:200请求成功处理。

3xx重定向:301永久重定向,302暂时重定向。

4xx客户端错误:403拒绝非法请求,404请求资源找不到

5xx服务端错误:500服务端bug,502 Bad Gateway我们的网关将请求转发到服务端,但是服务端返回的却是一个错误的响应。

get和post请求有什么区别?

第三点很重要,第一点也需要注意

  • 语义(主要区别):GET 通常用于获取或查询资源,而 POST 通常用于创建资源
  • 幂等:GET 请求是幂等的,即多次重复执行不会改变资源的状态,而 POST 请求是不幂等的
  • 格式/请求参数:GET 请求的参数通常放在 URL 中,而 POST 请求的参数通常放在请求体(body) 中(请求体中分为表单格式请求和json格式请求)

文件上传是http的什么请求?

POST表单(post有表单和 post参数形式)

HTTPS使用的是对称还是非对称加密?(pdd)

握手时获取会话密钥使用的是非对称加密,后续传输内容使用会话密钥进行对称加密

HTTPS的SSL/TLS四次握手过程?

HTTPS是什么?加密原理和证书。SSL/TLS握手过程_哔哩哔哩_bilibili (这个视频讲的非常清除)

【计算机网络】应用层知识点总结_计算机网络应用层知识点-CSDN博客

3.1 HTTP 常见面试题(这个有点点复杂,可以先看上面的)

3.3 HTTPS RSA 握手解析

大致分为四个过程

第一次ClientHello:客户端请求建立 SSL 连接,向服务端发送:第一个随机数,支持的SSL版本,支持的加密方法。

第二次SeverHello: 服务端回应。

  1. 确认 使用的 SSL版本,第二个随机数,确认加密方法。
  2. 服务器的证书

第三次:客户端

  1. 验证证书的合法性。
  2. 取出证书中公钥加密第三个随机数并发送。
  3. 加密通信算法改变通知。(后续都加密通话)
  4. 客户端握手结束通知。

第四次:服务端

  1. 私钥解密得到第三个随机数。
  2. 加密通信算法改变通知。

后续通过三个随机数生成的会话密钥,进行对称加密通话。

http1.1和2的区别,死背咯?(云智)

HTTP/1.1,HTTP/2和HTTP/3的区别_哔哩哔哩_bilibili(看不懂先看这个视频)

3.6 HTTP/2 牛逼在哪?

  1. 多路复用:单个TCP连接上可以同时传输多个请求和响应(当然是对于同一客户端),解决1.1队头阻塞的问题

  2. 请求头 的 头部压缩

  3. 服务推送:可以在客户端请求一个资源时,将其他相关资源一并推送给客户端。

  4. 二进制桢。http2.0使用二进制桢传输数据。

http1.1的特性?

3.1 HTTP 常见面试题

  1. 使用了长链接keepAlive(一个HTTP会话期间保持TCP连接不断开,在同一tcp发送多个http请求)
  2. 支持管道(pipeline)网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间

http为什么是无状态的?字节

HTTP被称为无状态协议是因为每个HTTP请求之间是相互独立的,服务器不会在不同请求之间保留客户端的状态信息。

HTTP无状态的原因:

1.简单性: 无状态使得HTTP协议设计更加简单和灵活,每个请求都可以独立处理,不需要维护复杂的状态信息

2.可伸缩性: 由于服务器不需要保留客户端状态信息,可以更容易地进行水平扩展,处理更多的并发请求

3.易于缓存? : 无状态使得缓存更加有效,可以缓存响应并在多个请求之间共享,提高性能和减少网络流量。

尽管HTTP是无状态的,但为了处理用户会话和状态管理,通常会使用一些机制来维护状态信息,比如使用Cookies、Session等技术来跟踪用户状态。

http的特点?

  1. 基于文本

可扩展性:不限制内容格式,可扩展头部、方法支持新功能

灵活性:支持不同数据格式

  1. 无状态:http服务器不会保留用户状态信息.

HTTP 协议了解么?HTTP 是基于 TCP 还是 UDP 的?

HTTP 应用层的规范超文本的传输的协议。超文本,也就是网络上的包括文本在内的各式各样的消息。

HTTP/3.0 之前是基于 TCP 协议的,而 HTTP/3.0 将弃用 TCP,改用 基于 UDP 的 QUIC 协议

http的header中有哪些常见字段?(字节)

content-type:表示请求体类型,(有json或者html)

content-length:请求体长度

connection:连接行为(有keep-alive长连接和close)

keep-alive:长连接时间

cookie:xxx

有了http为什么还要RPC,RPC和http有什么区别?

RPC是什么?HTTP是什么?RPC和HTTP有什么区别?_哔哩哔哩_bilibili(这个视频详细讲解了,出现的原因,区别,适用场景,以及tcp粘包问题)

有了 HTTP 协议,为什么还要有 RPC ?

总结:优点,用得早更简单比如header更简单(http的header非常冗余)。

  1. RPC其实是远程过程调用,并不是一个具体的协议。而 gRPC 和 Thrift 这样的具体实现才是RPC应用层协议

  2. RPC比http1.1出现得更早,大部分都是公司内部的客户端和服务端通信使用RPC (但是由于浏览器需要访问各个公司的Web,所以HTTP统一了浏览器/服务器通信的应用层协议) ,并且RPC的header比http的header更简单也就是定制化程度更高(因为http是公认的浏览器协议)。所以很多公司内部微服务调用采用RPC

  3. 但是现在http2优化之后可能比RPC更好(比如header压缩),但http2是15年才提出,很多公司内部一直用的RPC所以没有改动了。

扩展:http1.1中管道传输 和 http2.0多路复用的区别?

都是同时可以在同一TCP上连续发送多个http请求。

1.1有队头阻塞的问题,2.0没有。

TCP(重要)

简单说一下TCP的首部格式, 也说一下UDP的首部格式。

TCP首部: 首部4字节的整数倍(默认20字节)

源端口,目的端口

序列号,确认应答号(期望下一次对方发送的序号)

首部长度、保留位、控制位。窗口大小

校验和、紧急指针

长度可变的选项

UDP首部(非常简单): 8个字节,源端口,目的端口,校验和,数据字段长度

95.【计算机网络】三次握手怎么实现的?socket的作用_哔哩哔哩_bilibili

TCP三次握手的过程?

(在理解 TCP首部格式 的基础上,SYN是什么,ACK是什么,seq是什么,ack又是什么)

5.3.2 TCP连接管理_哔哩哔哩_bilibili(王道考研)

  1. A客户机向B服务器发送连接请求报文段,同步位SYN=1,初始序号seq=x。不携带数据。
  2. B收到请求报文,若同意连接则发送确认报文SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。为该TCP连接分配缓存和变量 不携带数据。
  3. A收到B的确认,还要向服务器B给出确认报文ACK=1,ack=y+1,自己的序号seq=x+1。为该TCP连接分配缓存和变量 同时可以携带数据 (我知道你知道了hh)

TCP和UDP的区别? (重要)

主要从tcp面向连接可靠传输字节流入手

  1. TCP协议是有连接的,有连接的意思是开始传输实际数据之前TCP的客户端和服务器端必须通过三次握手建立连接,会话结束之后也要结束连接。而UDP是无连接的
  2. TCP协议保证数据按序发送,按序到达,提供超时重传来保证可靠传输,UDP是不可靠的,数据丢了也不会重传。
  3. TCP是一对一的连接,而UDP则可以支持一对一,多对多,一对多的通信。
  4. TCP首部需20个字节(不算可选项),UDP首部字段只需8个字节
  5. TCP面向的是字节流的服务,UDP面向的是报文的服务。

TCP四次挥手,连接释放

5.3.2 TCP连接管理_哔哩哔哩_bilibili

两次关闭和关闭确认的过程。

  1. 客户端发送连接释放报文段,停止发送数据,主动关闭TCP连接。FIN=1,seq=u。
  2. 服务器端回送一个确认关闭报文段( 客户到服务这个方向的连接释放 ACK=1,seq=v, ack=u+1。此时服务端还能发送数据。
  3. 服务器端发完数据,就发出连接释放报文段,关闭TCP连接。FIN=1,ACK=1,seq=w,ack=u+1。
  4. 客户端发生关闭确认报文段ACK=1,进入time-await状态2MSL(最长报文段寿命) 后,连接彻底关闭。

四次挥手time_wait状态最后为什么需要等2MSL(最长报文段寿命)才释放连接?

  • 因为可能A第四次ACK确认报文会丢失,B接收不到确认会重传第三个FIN+ACK关闭报文,那么A就能在2MSL实际内收到重传报文,然后再次发送最后一次ACK确认报文,并重新等待2MSL时间。
  • 如果A不等待直接关闭,A的ACK报文丢失了,那么A也收不到B重传的FIN也不会回复确认,那么B会一直处于LAST-ACK状态

高并发场景,如何解决TCP四次挥手后time_wait状态连接过多的问题?

记2-3点即可

  1. 通过调整参数减少time_wait等待时间。
  2. 使用连接池复用连接。对于需要频繁与同一服务器通信的客户端,可以使用连接池来复用连接。
  3. 使用长连接keepAlive。减少TCP建立和关闭次数。

TCP和UDP的使用场景

TCP 用于对传输准确性要求特别高的场景,比如文件传输、发送和接收邮件、远程登录等等。FTP、HTTP、HTTPS

UDP 一般用于即时通信,比如:语音、 视频、直播等等。

TCP 为什么连接是三次握手?为什么不是两次

4.1 TCP 三次握手与四次挥手面试题

谢希仁版《计算机网络》中的例子是这样的,“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。

假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。由于现在client并没有发出建立连接的请求,因此不会理睬server的确认,也不会向server发送数据。但server却以为新的运输连接已经建立,并一直等待client发来数据。这样,server的很多资源就白白浪费掉了。

采用“三次握手”的办法可以防止上述现象发生。例如刚才那种情况,client不会向server的确认发出确认。server由于收不到确认,就知道client并没有要求建立连接

总结:

防止已失效的连接请求 与服务端建立连接,如果是两次,那么client的失效请求到达服务器就会进入establish状态。

这个已失效请求可能是因为网络阻塞的问题失效的请求

参考:

TCP握手为什么是三次,不是两次?

2、TCP的三次握手中为什么是三次?为什么不是两次、四次?_哔哩哔哩_bilibili

  1. 防止已失效的连接请求 与服务端建立连接,如果是两次,那么client的失效请求到达服务器就会进入establish状态。(这个已失效请求可能是因为网络阻塞的问题失效的请求。)
  2. 两次连接。服务端一收到请求就建立连接,没有任何中间状态,并没有确认客户端的连接状态。(注重理解)

TCP握手为什么是三次,不是四次?

三次握手就已经理论上最少可靠连接建立,所以不需要使用更多的通信次数。

TCP 是如何保证传输的可靠性?(里面涉及到的知识点非常多,每个都能挖掘不少问题,例如重传机制、流量控制、拥塞控制。如果目标是大厂的话,一定要吃透,面试经常会问的)

参考王道视频

5.3.3 TCP可靠传输_哔哩哔哩_bilibili

4.2 TCP 重传、滑动窗口、流量控制、拥塞控制

  1. 首先,TCP使用按序号发送,校验,确认,重传等机制实现可靠传输。
  2. 校验和:TCP 将保持它首部数据的检验和,如果收到的数据校验和不正确,则丢弃。
  3. 重传机制:TCP给每个字节一个序号,序号保证了接收端的按序接收;接收端实体对已成功收到的序号发送相应的确认(ACK)
    1. 如果发送方在规定往返时延内没有收到确认,则重传数据(这是超时重传)
    2. 如果连续收到三个冗余的ACK确认,则进行快速重传。 (快速重传)
  1. 流量控制:目的是让发送方的发送速率不要太快,让接收方来得及接收,发送方的发送窗口不能超过接收方的接收窗口的大小。
    1. 基于滑动窗口的,主要是用于 接收端 告诉发送端 自己的窗口大小目前为多少(还可以接收多少数据),发送端会一起发送数据。
  1. 拥塞控制:是指当整个网络发送拥塞时,TCP 会自我牺牲,降低发送的数据量,是一个全局的网络问题。
    1. 慢开始
    2. 拥塞避免
    3. 快重传
    4. 快恢复

流量控制是?

拥塞控制具体是?

四次挥手 第二次第三次挥手合并可以吗,会有什么问题?

4.22 TCP 四次挥手,可以变成三次吗?

(参考三次握手)理论上,第二次挥手和第三次挥手可以合并在一起发送,即服务器在收到客户端的FIN后,立即发送一个包含ACK和FIN标志的TCP段。这种方式可以减少一个往返延迟,理论上可以加快连接关闭的速度。

  1. 如果server开启了延迟ack 且 没有数据要发送,四次挥手将会合并为三次。
  2. 如果没开启延迟ack,则还是四次。

延迟确认:

  • 当有响应数据要发送时,ACK 会随着响应数据一起立刻发送给对方
  • 当没有响应数据要发送时,ACK 将会延迟一段时间,以等待是否有响应数据可以一起发送

一个端口可以建立多少TCP连接?

  1. 理论上可以建立大量的,因为一个TCP连接是用四元组(源IP地址、源端口号、目标IP地址、目标端口号)来唯一标识的。
  2. 实际情况下应该考虑操作系统 和 硬件资源 (如CPU、内存)的限制,比如tomcat的最大连接数是8192。

TCP粘包问题?

TCP传输字节流是无边界的,导致了粘包,传输过程中需要以合理的边界拆开。

  • 固定好长度的方式。
  • 定义预信息。前几个字符定义好长度,读取固定长度。

DNS(重要)

DNS通信基于什么协议,tcp还是udp?为什么?

DNS基于 UDP

DNS的几个域名服务器

  1. 根域名服务器
  2. 顶级域名服务器 (com、cn、org、edu)
  3. 权威域名服务器
  4. 本地域名服务器(每个 ISP(互联网服务提供商)都有一个自己的本地 DNS 服务器。起一个代理作用,严格说来,不属于 DNS 层级结构)

域名解析过程

下面是迭代查询,还有一种递归查询,递归查询就是 根DNS帮你查顶级DNS顶级DNS帮根查权威DNS,然后递归地返回。

  1. 客户端首先会发出一个 DNS 请求,问 www.server.com 的 IP 是啥,并发给本地 DNS 服务器(也就是客户端的 TCP/IP 设置中填写的 DNS 服务器地址)。
  2. 本地域名服务器收到客户端的请求后,如果缓存里的表格能找到 www.server.com,则它直接返回 IP 地址。如果没有,本地 DNS 会去问它的根域名服务器:“老大, 能告诉我 www.server.com 的 IP 地址吗?” 根域名服务器是最高层次的,它不直接用于域名解析,但能指明一条道路。
  3. 根 DNS 收到来自本地 DNS 的请求后,发现后置是 .com,说:“www.server.com 这个域名归 .com 区域管理”,我给你 .com 顶级域名服务器地址给你,你去问问它吧。”
  4. 本地 DNS 收到顶级域名服务器的地址后,发起请求问“老二, 你能告诉我 www.server.com 的 IP 地址吗?”
  5. 顶级域名服务器说:“我给你负责 www.server.com 区域的权威 DNS 服务器的地址,你去问它应该能问到”。
  6. 本地 DNS 于是转向问权威 DNS 服务器:“老三,www.server.com对应的IP是啥呀?” server.com 的权威 DNS 服务器,它是域名解析结果的原出处。为啥叫权威呢?就是我的域名我做主。
  7. 权威 DNS 服务器查询后将对应的 IP 地址 X.X.X.X 告诉本地 DNS。
  8. 本地 DNS 再将 IP 地址返回客户端,客户端和目标建立连接。

IP

子网掩码的作用?字节

划分网络地址和主机地址:帮路由器识别网络内 和 网络间的通信。

确定网络范围:逻辑与之后,可以确定一个ip地址的网络范围

说一下跨域

再看看

面试中的跨域