图解网络-小林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 有哪些区别?
  • HTTP是超文本传输协议,信息是明文传输,存在安全风险的问题。HTTPS则解决HTTP不安全的缺陷,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输。
  • HTTP连接建立相对简单,TCP三次握手之后便可进行HTTP的报文传输。而HTTPS在TCP三次握手之后,还需进行SSL/TLS的握手过程,才可进入加密报文传输。
  • 两者的默认端口不一样,HTTP默认端口是80,HTTPS默认端口是443。
  • HTTPS协议需要向CA(证书权威机构)申请数字证书,来保证服务器的身份是可信的。
HTTPS 解决了 HTTP 的哪些问题?

HTTP由于是明文传输,所以安全上存在三个风险:

  • 窃听风险
  • 篡改风险
  • 冒充风险

在这里插入图片描述
HTTPS 在 HTTP 与 TCP 层之间加⼊了 SSL/TLS 协议,可以很好的解决了上述的风险:

  • 信息加密
  • 校验机制
  • 身份证书

HTTPS是如何解决上面的三个风险的?

  • 混合加密的方式实现信息的机密性,解决了窃听的风险。
  • 摘要算法的方式来实现完整性,它能够为数据生成独一无二的「指纹」,指纹用于校验数据的完整性,解决了篡改的风险。
  • 将服务器公钥放入到数字证书中,解决了冒充的风险。
HTTPS是如何建立连接的?其间交互了什么?

SSL/TLS协议基本流程:

  • 客户端想服务器索要验证服务器的公钥。
  • 双方协商生产「会话秘钥」。
  • 双方采用「会话秘钥」进行加密通信。
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 算法有什么区别?

资料

  • 小林图解网络
  • 二哥的Java进阶之路:面渣逆袭-计算机网络
  • JavaGuide-计算机网络常见面试题总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/916630.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/916630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安宝特案例丨AR+AI+SOP?3大技术融合革新军工航天领域

军工、航空、航天领域存在 “小批量、多品种、依赖人工经验装配”的特性,这长期制约着生产效率与产品质量的提升。 技术融合应用案例 1 Arbigtec 装配效率提升类: 某型导弹制导系统装配:采用 AR 眼镜与 AI 视觉引导系统,200 精…

ip link show 查看/配置网络接口

ip link show(或简写为 ip link)是 Linux 系统中用于查看和配置网络接口(网卡、虚拟接口等)的命令,属于 iproute2 工具集的一部分。它是现代 Linux 系统中替代传统 ifconfig 命令的更强大工具。命令详解 基本语法 ip l…

电科金仓新一代数据库一体机:以 “云数据库 - AI 版” 引领 AI 时代数据库变革

前言 AI时代的数据库一体机市场,只能用两个词来形容:高手云集,战况激烈! 国际巨头仍在高端市场占据主导地位,但在国产替代的冲击下,也开始另寻突破口;国内科技大厂攻势迅猛,通过开源…

IT运维的365天--033 跨交换机部署没有单独供电口的爱快AP到另一个地方去

前情提要:由于工作需要,领导要求在车间也添加一个无线网络供员工和设备使用,之前公司已经有一个爱快网络供员工使用,且物理隔绝部署在集团办公楼这边了。我一向是不喜欢碰到一个小事就拉一条网线,那样不得搞的跟蜘蛛网…

Flutter开发实战之路由与导航

第5章:路由与导航 在移动应用开发中,页面间的跳转是最基本也是最重要的功能之一。就像我们在现实生活中需要从一个房间走到另一个房间一样,在App中,用户需要在不同的界面间自由切换。Flutter提供了强大而灵活的路由系统来管理这些页面跳转,本章将深入探讨Flutter的路由与…

Android 图像编辑实战指南:从基础操作到进阶效果

在移动应用中,图像编辑功能已成为标配 —— 社交 APP 需要裁剪头像,电商 APP 需要给商品图加水印,工具 APP 需要提供滤镜效果。看似简单的 “裁剪”“缩放” 背后,实则涉及 Bitmap 像素操作、内存管理、性能优化等核心技术。很多开…

Java从入门到精通!第十八天(JDK17安装以及网络编程) 完结篇!!!

三、网络编程1.网络编程概述Java 是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。2.网络的基础(1)计算机网络把分布在不同地理区域的计算机与专门…

C++ STL常用容器总结(vector, deque, list, map, set)

C STL常用容器总结(vector, deque, list, map, set)1. vector(动态数组)特点定义和初始化常用操作遍历方法2. deque(双端队列)特点定义和初始化常用操作3. list(双向链表)特点定义和…

智能小车(F103C8T6)RT-THREAD版

前言 前面几章学会了PWM,超声波等,现在刚好结合起来控制智能小车 1:环境 KEIL5.38 RT-THREAD 3.1.3 STM32F103C8T6 2:硬件配件(原来网上买的一套) STM32F103C8T6 一个 MCU底板 一个 SG90 舵机 一个 红外避障 2个 hc-…

Linux 远程连接与文件传输:从基础到高级配置

Linux 远程连接与文件传输:从基础到高级配置 在 Linux 系统管理中,远程连接和文件传输是核心技能。SSH 协议提供了安全的远程访问方式,而基于 SSH 的 SFTP 和 SCP 则解决了跨服务器文件传输的需求。下面将详细解析 SSH 服务配置、三种远程操作…

17. 如何修改 flex 主轴方向

总结 flex-direction: row | row-reverse | column | column-reverse;一、作用说明 在 Flex 布局中,默认的主轴(main axis)方向是 水平向右(即 row)。 通过设置 flex-direction 属性,可以灵活改变主轴的方向…

【Linux】重生之从零开始学习运维之mysql用户管理

mariadb用户管理创建用户create user test210.0.0.% identified by 123456;用户改名rename user test210.0.0.% to test310.0.0.%;用户删除 drop user test310.0.0.%;mysql用户管理创建用户create user test210.0.0.% identified by 123456;用户改名rename user test210.0.0.% …

matlab小计

3.变量命名_哔哩哔哩_bilibili clc 清空页面 文件名:字母开头 clc:清除命令行窗口 clear all:清除工作区变量 编译器里面 %%注释 24 2-4 2*4 4/2 cumsum累计和 312 6123 movsum:滑窗计算数值 eg步长是3 1236 2349 6 9 ... 按列求最大值 先列…

getdents64系统调用及示例

getdents64 函数详解 1. 函数介绍 getdents64 是 Linux 系统中用于读取目录内容的底层系统调用。可以把这个函数想象成一个"目录内容扫描仪"——它能够高效地扫描目录中的所有文件和子目录,就像超市的扫描枪快速读取商品条码一样。 与高级的目录操作函数(如 rea…

HBuilder X打包发布微信小程序

一、获取AppId 二、获取微信小程序AppId 三、发行->微信小程序,调起微信开发者工具 四、点击上传,上传至微信公众平台 五、微信公众平台查看版本管理 完结!!!

docker排查OOM

思路: 1.先从代码程序上排查,线程池创建是否使用ThreadPoolExecutor,线程池各项设置是否合理。 任务对象是否释放,网关是否需要限流。 2.服务器内存大小,cpu使用率,存储空间大小,java程序启动…

Web后端进阶:springboot原理(面试多问)

1.配置优先级 3种配置文件: application.properties server.port8081application.yml server:port: 8082application.yaml server:port: 80822种外部属性的配置(Java系统属性、命令行参数): Java系统属性配置 (格式: -Dkeyvalue) -Dserver.po…

第十天:字符菱形

每日一道C题&#xff1a;字符菱形 问题&#xff1a;给定一个字符&#xff0c;用它构造一个对角线长5个字符&#xff0c;倾斜放置的菱形。 要求&#xff1a;输入只有一行&#xff0c; 包含一个字符&#xff1b;输出该字符构成的菱形。 最基础的做法&#xff1a; #include <io…

Qt 多线程编程最佳实践

在现代软件开发中&#xff0c;多线程编程是提升应用性能和响应性的关键技术。Qt 作为一个强大的跨平台框架&#xff0c;提供了丰富的多线程支持&#xff0c;包括 QThread、QtConcurrent、信号槽机制等。本文将深入探讨 Qt 多线程编程的最佳实践&#xff0c;帮助开发者避免常见陷…

Photo Studio PRO 安卓版:专业级照片编辑的移动解决方案

Photo Studio PRO 安卓版是一款功能强大的专业级照片编辑应用&#xff0c;旨在为用户提供丰富而强大的编辑工具和特效&#xff0c;帮助用户轻松地对照片进行美化和修饰。无论是摄影爱好者还是专业摄影师&#xff0c;都能通过这款应用实现从基础调整到高级合成的全流程编辑。 核…