图解网络-小林coding笔记(持续更新)

大纲

计算机网络 基础 HTTP HTTP基本概念 GET与POST HTTP特性 HTTP缓存技术 HTTP与HTTPS HTTP演变 TCP TCP基本认识 TCP连接建立 TCP连接断开 Socket编程 UDP IP IP基本认识 IP地址的基础知识 IP协议相关技术 网络安全

基础

TCP/IP网络模型有哪几层?

TCP/IP网络通常是由上到下分成 4 层,分别是应用层,传输层,网络层和网络接口层。

  • 应用层:负责向用户提供一组应用程序,比如HTTP、DNS、FTP等;
  • 传输层:负责端到端的通信,比如TCP、UDP等;
  • 网络层:负责网络包的封装、分片、路由、转发,比如IP、ICMP等;
  • 网络接口层:负责网络包在物理网络中的传输,比如网络包的封帧、MAC寻址、差错检测,以及通过网卡传输网络帧等。

不过,我们常说的七层和四层负载均衡,是用OSI网络模型来描述的,七层对应的是应用层,四层对应的传输层。

键入网址到网页显示,期间发生了什么?

Linux系统是如何收发网络包的?

一、HTTP

HTTP 常见面试题

HTTP基本概念
HTTP 是什么?

HTTP是超文本传输协议,是一个在计算机世界里专门在「两点」之间「传输」文字、图片、音频、视频等「超⽂本」数据的「约定和规范」。

HTTP常见的状态码有哪些?

1xx 类状态码属于提示信息,是协议处理中的⼀种中间状态,实际⽤到的⽐较少。
2xx 类状态码表示服务器成功处理了客户端的请求,也是我们最愿意看到的状态。

  • 「200 OK」是最常⻅的成功状态码,表示⼀切正常。如果是⾮ HEAD 请求,服务器返回的响应头都会有 body 数据。
  • 「204 No Content」也是常⻅的成功状态码,与 200 OK 基本相同,但响应头没有 body 数据。
  • 「206 Partial Content」是应⽤于 HTTP 分块下载或断点续传,表示响应返回的 body 数据并不是资源的全部,⽽是其中的⼀部分,也是服务器处理成功的状态。

3xx 类状态码表示客户端请求的资源发⽣了变动,需要客户端⽤新的 URL 重新发送请求获取资源,也就是重定向。

  • 「301 Moved Permanently」表示永久重定向,说明请求的资源已经不存在了,需改⽤新的 URL 再次访问。
  • 「302 Found」表示临时重定向,说明请求的资源还在,但暂时需要⽤另⼀个 URL 来访问。

301 和 302 都会在响应头⾥使⽤字段Location,指明后续要跳转的 URL,浏览器会⾃动重定向新的URL。

  • 「304 Not Modified」不具有跳转的含义,表示资源未修改,重定向已存在的缓冲⽂件,也称缓存重定向,也就是告诉客户端可以继续使⽤缓存资源,⽤于缓存控制。

4xx 类状态码表示客户端发送的报⽂有误,服务器⽆法处理,也就是错误码的含义。

  • 「400 Bad Request」表示客户端请求的报⽂有错误,但只是个笼统的错误。
  • 「403 Forbidden」表示服务器禁⽌访问资源,并不是客户端的请求出错。
  • 「404 Not Found」表示请求的资源在服务器上不存在或未找到,所以⽆法提供给客户端。

5xx 类状态码表示客户端请求报⽂正确,但是服务器处理时内部发⽣了错误,属于服务器端的错误码。

  • 「500 Internal Server Error」与 400 类型,是个笼统通⽤的错误码,服务器发⽣了什么错误,我们并不知道。
  • 「501 Not Implemented」表示客户端请求的功能还不⽀持,类似"即将开业,敬请期待"的意思。
  • 「502 Bad Gateway」通常是服务器作为⽹关或代理时返回的错误码,表示服务器⾃身⼯作正常,访问后端服务器发⽣了错误。
  • 「503 Service Unavailable」表示服务器当前很忙,暂时⽆法响应客户端,类似"⽹络服务正忙,请稍后重试"的意思。
HTTP常见字段有哪些?

Host字段:客户端发送请求时,⽤来指定服务器的域名。

Connection字段:Connection 字段最常⽤于客户端要求服务器使⽤「HTTP ⻓连接」机制,以便其他请求复⽤。

Content-Length字段:服务器在返回数据时,会有 Content-Length 字段,表明本次回应的数据⻓度。

Content-Type字段:⽤于服务器回应时,告诉客户端,本次数据是什么格式。

Content-Encoding字段:说明数据的压缩⽅法。

Accept-Encoding字段:客户端在请求时,⽤该字段说明⾃⼰可以接受哪些压缩⽅法。

GET与POST
GET和POST有什么区别?

GET 的语义是请求获取指定的资源。 GET ⽅法是安全、幂等、可被缓存的。

POST 的语义是根据请求负荷(报⽂主体)对指定的资源做出处理,具体的处理⽅式视资源类型⽽不同。POST 不安全,不幂等,(⼤部分实现)不可缓存。

HTTP缓存技术
HTTP缓存有哪些实现方式?

对于⼀些具有重复性的 HTTP 请求,⽐如每次请求得到的数据都⼀样的,我们可以把这对「请求-响应」的数据都缓存在本地,那么下次就直接读取本地的数据,不必在通过⽹络获取服务器的响应了,这样的话HTTP/1.1 的性能肯定⾁眼可⻅的提升。

HTTP 缓存有两种实现⽅式,分别是强制缓存和协商缓存。

什么是强制缓存?

强缓存指的是只要浏览器判断缓存没有过期,则直接使⽤浏览器的本地缓存,决定是否使⽤缓存的主动性在于浏览器这边。

强缓存是利⽤下⾯这两个 HTTP 响应头部(Response Header)字段实现的,它们都⽤来表示资源在客户端缓存的有效期:

  • Cache-Control,是一个相对时间;
  • Expires,是一个绝对时间。

如果 HTTP 响应头部同时有 Cache-Control 和 Expires 字段的话, Cache-Control 的优先级⾼于 Expires。

Cache-control 选项更多⼀些,设置更加精细,所以建议使⽤ Cache-Control 来实现强缓存。具体的实现流程如下:

  • 当浏览器第一次请求访问服务器资源时,服务器会在返回这个资源的同时,在Response头部加上Cache-Control,并在Cache-Control中设置了过期时间大小;
  • 浏览器再次请求访问服务器中的该资源时,会先通过请求资源的时间与Cache-Control中设置的过期时间大小,来计算出该资源是否过期,如果没有,则使用该缓存,否则重新请求服务器;
  • 服务器再次收到请求后,会再次更新Response头部的Cache-Control。
什么是协商缓存?

当我们在浏览器使⽤开发者⼯具的时候,你可能会看到过某些请求的响应码是304,这个是告诉浏览器可以使⽤本地缓存的资源,通常这种通过服务端告知客户端是否可以使⽤缓存的⽅式被称为协商缓存。
协商缓存就是与服务端协商之后,通过协商结果来判断是否使用使用本地缓存。

协商缓存可以基于两种头部来实现。

第一种:请求头部中的If-Modified-Since字段与响应头部中的Last-Modified字段实现,这两个字段的意思是:

  • 响应头部中的Last-Modified:标识这个响应资源的最后修改时间;
  • 请求头部中的If-Modified-Since:当资源过期了,发现响应头中具有Last-Modified声明,则再次发起请求的时候带上 Last-Modified 的时间,服务器收到请求后发现有 If-Modified-Since 则与被请求资源的最后修改时间进⾏对⽐(Last-Modified),如果最后修改时间较新(⼤),说明资源⼜被改过,则返回最新资源, HTTP 200 OK;如果最后修改时间较旧(⼩),说明资源⽆新修改,响应HTTP 304 ⾛缓存。

第二种:请求头部中的If-None-Match字段与响应头部中的Etag字段,这两个字段的意思是:

  • 响应头部中的Etag:唯一标识响应资源;
  • 请求头部中的If-None-Match:当资源过期时,浏览器发现响应头里有Etag,则再次向服务器发起请求时,会将请求头If-None-Match值设置为Etag的值,服务器收到请求后进行比对,如果资源没有变化返回304,如果资源变化了返回200。

第⼀种实现⽅式是基于时间实现的,第⼆种实现⽅式是基于⼀个唯⼀标识实现的,相对来说后者可以更加准确地判断⽂件内容是否被修改,避免由于时间篡改导致的不可靠问题。

协商缓存这两个字段都需要配合强制缓存中 Cache-Control 字段来使⽤,只有在未能命中强制缓存的时候,才能发起带有协商缓存字段的请求。

HTTP特性
HTTP/1.1的优点有哪些?
  1. 简单:HTTP 基本的报⽂格式就是 header + body ,头部信息也是 key-value 简单⽂本的形式, 易于理解,降低了学习和使⽤的⻔槛。
  2. 灵活和易于扩展:HTTP 协议⾥的各类请求⽅法、URI/URL、状态码、头字段等每个组成要求都没有被固定死,都允许开发⼈员⾃定义和扩充。
  3. 应用广泛和跨平台
HTTP/1.1 的缺点有哪些?
  1. 无状态双刃剑
  2. 明⽂传输双刃剑
  3. 不安全
HTTP/1.1的性能如何?

HTTP 协议是基于 TCP/IP,并且使⽤了「请求 - 应答」的通信模式。

  1. 长连接
  2. 管道网络传输
  3. 队头阻塞
HTTP与HTTPS
HTTP与 HTTPS 有哪些区别?
HTTPS 解决了 HTTP 的哪些问题?
HTTPS是如何建立连接的?其间交互了什么?
##### HTTPS的应用数据是如何保证完整性的?
HTTPS一定安全可靠吗?
HTTP/1.1、HTTP/2、HTTP/3演变

HTTP/1.1 如何优化?

如何避免发送HTTP请求?
如何减少HTTP请求次数?
如何减少HTTP响应的数据大小?

HTTPS RSA 握手解析

TLS握手过程
RSA握手过程
RSA算法的缺陷

HTTPS ECDHE握手解析

HTTPS如何优化?

HTTP/2 牛逼在哪?

HTTP/3强势来袭

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

既然有HTTP协议,为什么还要有WebSocket?

二、TCP

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

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

TCP实战抓包分析

TCP半连接队列和全连接队列

如何优化TCP?

如何理解是TCP面向字节流协议?

为什么TCP每次建立连接时,初始化序列号都要不一样呢?

SYN报文什么时候情况下会被丢弃?

已建立连接的TCP,收到SYN会发生什么?

四次挥手中收到序的FIN包会如何处理?

在TIME_WAIT状态的TCP连接,收到SYN后会发生什么?

TCP连接,一端断电和进程崩溃有什么区别?

拔掉网线后,原本的TCP连接还存在吗?

tcp_tw_reuse 为什么默认是关闭的?

HTTPS 中 TLS 和 TCP 能同时握手吗?

TCP Keepalive 和 HTTP Keep-Alive 是一个东西吗?

TCP协议有什么缺陷?

如何基于UDP协议实现可靠传输?

服务端没有isten,客户端发起连接建立,会发生什么?

用了TCP协议,数据一定不会丢吗?

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

TCP序列号和确认号是如何变化的?

三、IP

IP基础知识全家桶

ping 的工作原理

断网了,还能ping通127.0.0.1吗?

四、网络安全

说说有哪些安全攻击?

DNS 劫持了解吗?

什么是 CSRF 攻击?如何避免?

什么是 DoS、DDoS、DRDoS 攻击?

什么是 XSS 攻击,如何避免?

对称加密与非对称加密有什么区别?

RSA 和 AES 算法有什么区别?

资料

相关推荐
sx24369418 分钟前
day33:零基础学嵌入式之网络——TCP并发服务器
网络·网络协议·http
YGY Webgis糕手之路1 小时前
OpenLayers 快速入门(九)Extent 介绍
前端·经验分享·笔记·vue·web
花月mmc1 小时前
CanMV-K230 AI学习笔记系列
人工智能·笔记·学习
努力自学的小夏3 小时前
RK3568 Linux驱动学习——Linux驱动开发准备工作
linux·驱动开发·笔记·学习
wmm_会飞的@鱼5 小时前
FlexSim-汽车零部件仓库布局优化与仿真
服务器·前端·网络·数据库·数学建模·汽车
两颗泡腾片5 小时前
黑马程序员C++核心编程笔记--类和对象--运算符重载
c++·笔记
-XWB-5 小时前
【安全漏洞】网络守门员:深入理解与应用iptables,守护Linux服务器安全
linux·服务器·网络
还是朝夕6 小时前
OSPF路由协议 多区域
网络
消失的旧时光-19436 小时前
Android网络框架封装 ---> Retrofit + OkHttp + 协程 + LiveData + 断点续传 + 多线程下载 + 进度框交互
android·网络·retrofit
晴天¥7 小时前
阶段1--域名服务器
运维·服务器·网络