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 数据的完整性,防止缓存中毒。

相关推荐
云上艺旅5 分钟前
K8S学习之基础七十二:Ingress基于Https代理pod
学习·云原生·容器·https·kubernetes
老六ip加速器19 分钟前
如何改电脑网络ip地址:一步步指导
网络·网络协议·tcp/ip
旧味清欢|1 小时前
关注分离(Separation of Concerns)在前端开发中的实践演进:从 XMLHttpRequest 到 Fetch API
javascript·http·es6
网络抓包与爬虫3 小时前
Wireshark——抓包分析
websocket·网络协议·tcp/ip·http·网络安全·https·udp
仙女很美哦4 小时前
Flutter视频播放、Flutter VideoPlayer 视频播放组件精要
websocket·网络协议·tcp/ip·http·网络安全·https·udp
路由侠内网穿透5 小时前
本地部署开源流处理框架 Apache Flink 并实现外部访问
大数据·网络协议·tcp/ip·flink·服务发现·apache·consul
小吃饱了6 小时前
TCP可靠性传输
网络·网络协议·tcp/ip
q567315236 小时前
使用puppeteer库编写的爬虫程序
爬虫·python·网络协议·http
張萠飛9 小时前
Linux的TCP连接数到达2万,其中tcp_tw、tcp_alloc、tcp_inuse都很高,可能出现什么问题
linux·网络·tcp/ip