TCP、HTTP、HTTPS、DNS的原理

TCP三次握手与四次断开的原理:
1.TCP 三次握手

TCP 三次握手是建立 TCP 连接的过程,确保双方都准备好进行通信。以下是三次握手的详细步骤:

第一次握手(SYN):

客户端向服务器发送一个 SYN(同步序列号)包,表示请求建立连接。

客户端进入 SYN_SENT 状态。

第二次握手(SYN-ACK):

服务器收到 SYN 包后,回复一个 SYN-ACK 包,表示同意建立连接。

服务器进入 SYN_RECV 状态。

第三次握手(ACK):

客户端收到 SYN-ACK 包后,发送一个 ACK 包,确认连接已建立。

客户端和服务器都进入 ESTABLISHED 状态,连接建立完成。
2. TCP 四次断开

TCP 四次断开是终止 TCP 连接的过程,确保双方都确认连接已关闭。以下是四次断开的详细步骤:

第一次断开(FIN):

客户端发送一个 FIN(结束)包,表示不再发送数据。

客户端进入 FIN_WAIT_1 状态。

第二次断开(ACK):

服务器收到 FIN 包后,发送一个 ACK 包,确认收到 FIN。

服务器进入 CLOSE_WAIT 状态。

客户端进入 FIN_WAIT_2 状态。

第三次断开(FIN):

服务器发送一个 FIN 包,表示不再发送数据。

服务器进入 LAST_ACK 状态。

第四次断开(ACK):

客户端收到 FIN 包后,发送一个 ACK 包,确认收到 FIN。

客户端进入 TIME_WAIT 状态,等待 2MSL(最大段生存时间)后完全关闭连接。

服务器进入 CLOSED 状态,连接关闭。

HTTP原理:

1.客户端请求:

客户端(如浏览器)向服务器发送HTTP请求,请求包含请求方法、URI、HTTP版本、请求头和请求体。

2.服务器响应:

服务器接收到请求后,处理请求并返回HTTP响应,响应包含状态码、响应头和响应体。

3.无连接和无状态:

HTTP是无连接的,每次请求和响应都是独立的。

HTTP是无状态的,服务器不保存客户端的请求状态。

4.请求方法:

常见的请求方法包括GET、POST、PUT、DELETE等,用于指定操作类型。

5.状态码:

服务器返回的状态码表示请求的处理结果,如200 OK、404 Not Found等。

HTTPS工作流程:

客户端(浏览器)访问 https://www.baidu.com 百度网站;

百度服务器返回 HTTPS 使用的 CA 证书;

浏览器验证 CA 证书是否为合法证书;

验证通过,证书合法,生成一串随机数并使用公钥(证书中提供的)进行加密;

发送公钥加密后的 随机数给百度服务器;

百度服务器拿到密文,通过私钥进行解密,获取到随机数(公钥加密,私钥解密,反之也可以);

百度服务器把要发送给浏览器的内容,使用随机数进行加密后传输给浏览器;

此时浏览器可以使用随机数进行解密,获取到服务器的真实传输内容;

DNS解析原理:

1.域名解析流程

用户请求:用户在浏览器中输入域名(如 example.com),浏览器向本地 DNS 缓存查询。

本地 DNS 缓存:如果本地缓存中没有该域名的记录,则向递归 DNS 服务器发送查询请求。

递归 DNS 服务器:递归 DNS 服务器(通常是 ISP 提供的 DNS 服务器)负责向其他 DNS 服务器查询域名的 IP 地址。

根 DNS 服务器:递归 DNS 服务器向根 DNS 服务器查询域名的顶级域名(TLD)服务器。

TLD 服务器:根 DNS 服务器返回负责该域名的顶级域名服务器(如 .com 的 TLD 服务器)的地址。

权威 DNS 服务器:递归 DNS 服务器向 TLD 服务器查询域名的权威 DNS 服务器。

获取 IP 地址:权威 DNS 服务器返回域名的 IP 地址。

返回结果:递归 DNS 服务器将 IP 地址返回给用户,用户使用该 IP 地址访问目标网站。

  1. 递归查询与迭代查询

递归查询:客户端向 DNS 服务器发送请求,DNS 服务器负责完成所有查询步骤,直到找到域名的 IP 地址并返回给客户端。

迭代查询:DNS 服务器在查询过程中逐步向其他 DNS 服务器查询,直到找到最终的权威 DNS 服务器。

  1. DNS 缓存

本地缓存:浏览器和操作系统会缓存 DNS 查询结果,以减少重复查询。

递归 DNS 服务器缓存:递归 DNS 服务器会缓存查询结果,提高查询效率。

  1. DNS 安全

缓存中毒:恶意攻击者可能篡改 DNS 缓存,导致用户访问错误的 IP 地址。

DNSSEC:通过数字签名验证 DNS 数据的完整性,防止缓存中毒。

相关推荐
我的golang之路果然有问题29 分钟前
案例速成GO+Socket,个人笔记
开发语言·笔记·后端·websocket·学习·http·golang
zym大哥大2 小时前
HTTP协议重定向及交互
网络·网络协议·http
戒不掉的伤怀3 小时前
Arkts完成数据请求http以及使用axios第三方库
网络·网络协议·http
Zz_waiting.5 小时前
网络原理 - 11(HTTP/HTTPS - 2 - 请求)
运维·网络·网络协议·mysql·http·https·抓包
lifewange5 小时前
jmeter-Beashell获取请求body data
网络协议·jmeter·http
尽兴-7 小时前
TCP vs UDP:核心区别、握手过程与应用场景(附对比图)
java·网络协议·tcp/ip·udp
小芳矶7 小时前
neo4j暴露公网ip接口——给大模型联通知识图谱
tcp/ip·知识图谱·neo4j
whoarethenext8 小时前
c网络库libevent的http常用函数的使用(附带源码)
网络·c++·http·libevent
薯条不要番茄酱10 小时前
【网络原理】从零开始深入理解HTTP的报文格式(一)
网络·网络协议·http
南川琼语10 小时前
TCP概念+模拟tcp服务器及客户端
linux·服务器·网络·tcp/ip