网络技术
以前学的比较杂,这里重新整理一下,慢慢填坑。
开坑 @2024-11-27
基础知识
网路协议
TCP/IP
TCP 握手过程
TCP(传输控制协议)握手过程,通常称为三次握手(Three-Way Handshake),是 TCP 网络通信中建立连接的核心机制。
这一过程确保两个通信端点的双方都准备好进行数据传输,同时同步它们的序列号和确认响应。
这里是 TCP 握手的详细步骤:
客户端发送 SYN 包: 第一步是由客户端向服务器发送一个 SYN(同步序列编号)报文。
在这个报文中,客户端选择一个随机的序列号
X
,这将用于顺序地标记随后发送的数据包。服务器发送 SYN-ACK 包: 服务器收到客户端的 SYN 包后,会回复一个 SYN-ACK 报文。
在这个报文中,服务器选择一个随机的序列号
Y
,并且将客户端的序列号加 1 (X+1
)作为确认号。这样,服务器就可以知道客户端已经收到了服务器的 SYN 报文。客户端发送 ACK 包: 最后一步是客户端向服务器发送一个 ACK 报文。
在这个报文中,客户端将服务器的序列号加 1 (
Y+1
)作为确认号。这样,服务器就可以知道客户端已经收到了服务器的 SYN-ACK 报文。
这个三次握手过程不仅重要于建立连接,还有助于防止旧的重复连接初始化造成的混乱(例如,由于网络延迟,旧的连接请求过了很久才到达服务器)。
下面是我根据 tcpdump 内容进行的连接测试,可以清楚地看到三次握手的过程:
UDP 通信
HTTP 协议
网络安全
CSRF 攻击的工作原理及防范
CSRF(Cross-Site Request Forgery,跨站请求伪造)是一种网络攻击,攻击者通过伪造用户的请求来进行未经授权的操作。下面是 CSRF 攻击的详细解释:
CSRF 攻击的工作原理
- 用户认证:
- 用户登录某个网站(如银行或社交媒体网站),服务器为用户分配一个会话或认证令牌(例如,cookies)。
- 攻击者诱导用户执行操作:
- 攻击者创建一个恶意网站或页面,其中包含伪造的请求,目标是利用用户已经登录的受信任网站。
- 例如,攻击者可以在自己的页面中插入一个表单,该表单自动提交到受信任的银行网站,执行转账操作。
- 用户访问恶意页面:
- 当用户在登录状态下访问恶意页面时,这个页面会自动向受信任的站点发送伪造的请求。
- 请求被执行:
- 因为用户已经登录,受信任的网站会认为这些请求是用户发出的,并按请求执行操作,如转账、修改设置等。
攻击实例
假设用户已登录某银行网站,银行网站的服务器为用户分配了一个会话 cookie。攻击者可以创建一个包含以下 HTML 表单的恶意网页:
<html>
<body>
<form
id="csrfForm"
action="https://bank.example.com/transfer"
method="POST"
>
<input type="hidden" name="account" value="attacker_account" />
<input type="hidden" name="amount" value="1000" />
<input type="submit" value="Submit" />
</form>
<script>
document.getElementById("csrfForm").submit();
</script>
</body>
</html>
当用户在登录状态下访问这个恶意页面时,表单会自动提交,银行网站会执行转账操作,因为请求中携带了有效的会话 cookie。
防范措施
- CSRF 令牌:
- 在每个表单或敏感请求中使用随机生成的令牌。服务器在生成表单时将令牌嵌入到表单中,用户提交表单时服务器检查令牌的有效性。
- 常见的实现方式是将 CSRF 令牌放在 HTML 表单中并在提交时进行验证。
- 检查请求来源:
- 在服务器端验证请求的来源,例如通过
Referer
或Origin
头部来确保请求来源于预期的页面。
- 在服务器端验证请求的来源,例如通过
- 使用双重身份验证:
- 对关键操作要求用户再次输入密码或进行身份验证,以确保操作是由用户主动发起的。
- 避免使用 GET 请求进行状态改变操作:
- GET 请求应该仅用于获取数据,不应改变服务器状态。将修改操作限制在 POST 请求中,有助于减轻 CSRF 风险。
常考题
TCP 和 UDP 的区别
TCP(Transmission Control Protocol,传输控制协议)和 UDP(User Datagram Protocol,用户数据报协议)是互联网协议套件中两个核心的传输层协议。
TCP 是一种面向连接的协议,提供可靠的、顺序的和基于字节流的数据传输。它通过三次握手建立连接,并使用确认和重传机制来保证数据完整性和正确顺序。
UDP 是一种无连接协议,提供快速的数据传输但不保证顺序或可靠性。它不建立连接,不确认数据,也不重传丢失的数据包,适用于对速度要求高的应用如视频流或在线游戏。
关键词: 连接性质
、可靠性
、数据流控制
、速度和效率
、报头大小
、应用场景
。
追问:如果 TCP 连接的 53 端口被占用,那么 UDP 连接还可以用 53 端口吗
可以,因为 TCP 和 UDP 是两种不同的协议,它们之间没有直接的关联,所以 TCP 连接的 53 端口被占用并不会影响 UDP 连接使用 53 端口。
从输入域名到页面显示的整个过程
- DNS 解析:浏览器将域名解析为服务器的IP地址,通常涉及本地DNS缓存查询、递归查询和根服务器查询。
- 建立连接:浏览器使用解析得到的IP地址,通过TCP协议与服务器建立连接,如果是HTTPS连接,还会进行TLS握手。
- 发送HTTP请求:浏览器向服务器发送HTTP请求,包括GET或POST等方法,请求所需资源。
- 服务器处理请求:服务器接收请求后处理,运行服务器端脚本,如PHP、Python等,访问数据库或其他操作。
- 返回响应:服务器向浏览器发送HTTP响应,包含状态码、响应头和请求的数据(如HTML、CSS、JS等)。
- 浏览器渲染:浏览器接收到数据后解析HTML、CSS和JavaScript内容,并渲染显示页面。
Session 和 Cookie 的区别
Cookie 存储在用户的浏览器上,通常用于保存用户的偏好设置或登录状态,对数据大小和安全性有限制。
单个 Cookie 的大小一般约为 4KB
Session 存储在服务器上,可以存储更多的数据,更加安全。服务器通过在 Cookie 中保存一个唯一标识符来维护与特定用户的会话。
关键词: 存储位置
、数据大小
、安全性
、有效期
、存储内容
、对服务器负载的影响
。
什么是同源策略
同源策略(Same-origin policy)是Web安全的基本概念,用于限制来自不同源的文档或脚本之间的交互。这个策略的核心目的是防止恶意文档窃取另一文档的数据。
在这个策略下,如果两个页面的协议、端口(如果有指定)和主机名都相同,它们便是"同源"。只有同源的网页才能自由地获取和修改彼此的 DOM 和相关属性,如 cookies、localStorage 和 IndexDB。如果不是同源,这些操作通常会受到限制。
HTTPS 和 HTTP 区别
HTTP 是超文本传输协议,是一种用于传输超媒体文档(如 HTML)的应用层协议。
HTTPS 是在 HTTP 的基础上加入了 SSL/TLS 加密处理数据,提供了更安全的通信方式。
另外它们在端口、URL、性能等方面也有不同。
HTTP 接口和 Web 服务接口(Web Service Interface)的区别
HTTP 接口通常指的是基于 HTTP 协议的网络接口,用于 Web 浏览器和服务器之间的通信,主要用于加载网页内容。
Web 服务接口通常指的是为程序间交互设计的接口,如 SOAP 或 RESTful API,它们使用 HTTP 协议传输数据,但专注于允许不同系统或应用之间的数据交换和集成。
严重怀疑这是正经的问题吗?
Session 存储机制中,redis 和 files 的区别是什么
Redis 基于内存,速度会快。且有更好的扩展性,支持高并发,并且有丰富的数据结构和操作命令,方便存储和操作。
files 需要进行磁盘 IO 操作,限制会更多。
WebSocket
可以配合 PHP 的 Swoole 使用。
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它允许客户端和服务器之间进行双向通信,而不是像 HTTP 协议那样的请求-响应模式。
WebSocket 的特点包括:
- 全双工通信:WebSocket 允许客户端和服务器之间进行双向通信,可以实时发送和接收消息。
- 长连接:WebSocket 连接在客户端和服务器之间保持长连接,不像 HTTP 协议那样每次通信都需要建立新的连接。
- 实时性:WebSocket 支持实时数据传输,适用于实时聊天、在线游戏、实时监控等需要高实时性的应用场景。
XSS 和 CSRF 分别是什么
XSS(Cross-Site Scripting)和 CSRF(Cross-Site Request Forgery)是两种常见的网络安全攻击手段。
XSS(跨站脚本攻击):XSS 是一种安全漏洞,允许攻击者将恶意脚本注入到其他用户会查看的正常网页中。这些脚本在用户的浏览器中执行时可以窃取 cookies、会话令牌,甚至重写网页内容。
CSRF(跨站请求伪造):CSRF 是一种攻击,通过诱使用户在已认证的会话中访问恶意网站来发送非预期的请求到另一个网站,这可以导致在没有用户意识的情况下进行非法操作(如密码更改、资金转账等)。
HTTP 和 SOCKS 代理 的区别
HTTP代理和SOCKS代理都是网络代理技术,用于转发客户端的请求到其他服务器。它们的主要区别在于支持的协议类型和透明度:
- HTTP代理:特定于HTTP协议的代理,只能代理HTTP请求。客户端发送HTTP请求到代理服务器,代理服务器再将请求转发到目标服务器。HTTP代理可以理解并修改HTTP协议的头部信息,支持缓存机制和更高级的内容过滤、监控和修改。
- SOCKS代理:支持任何形式的TCP/IP协议栈数据,比HTTP代理更通用。SOCKS代理在传输层中介数据传输,不关心应用层协议(如HTTP、FTP等),因此可以用于任何网络协议的数据转发。SOCKS协议提供的是更为透明的代理服务,不会修改传输的数据。
因此,选择哪种代理主要取决于你需要代理的应用类型和对安全性、透明性的需求。