【HTTP】解码网络通信的奥秘:HTTP,IP 地址,端口,DNS及NAT地址转换的协同之舞

引言

每文学习一句诗:行一棋不足以见智,弹一弦不足以见悲**------** 《淮南子·说林训

译文:走一个棋子,不足以现出智慧;弹一根琴弦,不能够使人产生悲哀之情。

**自述:**互联网现如今已经成为每个人都离不开的一个通信工具,他渗透到生活的方方面面,在享受它为人们带来便利的同时,我们对他的工作原理也充满了好奇。下面我将介绍了HTTP的GET/POST/响应、IP 地址、端口,公内网,DNS及NAT地址转换的相关内容,让你初步了解互联网的通信过程。

如果本文对你有所帮助,那能否支持一下老弟呢,嘻嘻

✨✨ 个人主页点击✨✨

目录

​编辑

引言

IP地址(IPv4/Ipv6)

定义

分类

A类IP地址

B类IP地址

C类IP地址

特殊IP地址

IPv6地址的基本概念

端口

定义

HTTP协议

定义

工作流程

浏览器开发者工具NetWork使用

GET请求报文

POST请求报文

响应报文

状态码

​编辑

公网/内网

​编辑

NAT网络地址转换

DNS/DDNS/域名


IP地址(IPv4/Ipv6)

定义

IP地址指的是互联网中所有联网设备的**"身份证",**就好比每个人都有自己的身份证号一样。

分类

分为IPv4地址和IPv6地址

IPv4:通常以点分十进制的格式来表示,即4个8位的二进制来表示。

例如:192.168.64.24(十进制)

11000000.10101000.01000000.00011000(二进制)

IP地址由网络地址主机地址组成

A类IP地址

网络地址由第一个八位数组组成,且第一个字节以"0"开始,有效网络地址:8-1=7位

主机地址由后三个8位数组共24位(1.0.0.0-126.255.255.255)(0与127留作他用)

B类IP地址

网络地址由前两个八位数组组成,且第一个字节以"10"开始,有效网络地址:16-2=14位

主机地址由后两个8位数组共16位(128.0.0.0-191.255.255.255)

C类IP地址

网络地址由前三个八位数组组成,且第一个字节以"110"开始,有效网络地址:24-3=21位

主机地址由后一个8位数组共8位(192.0.0.0-223.255.255.255)

特殊IP地址

127.xxx.xxx.xxx :环回地址,用于本地测试

0.0.0.0:所有网络,用于指定缺省路由

1.1.1.1:广播地址,用于所有网络节点

IPv6地址的基本概念

IPv6(Internet Protocol Version 6)是下一代互联网协议,旨在解决IPv4地址枯竭问题。其核心特点包括:

  • 地址长度:128位(IPv4为32位),提供约 3.4×10383.4×1038 个地址。

  • 简化路由:层次化地址结构,优化网络管理。

  • 增强功能:原生支持安全性(IPsec)、自动配置、多播等。

端口

定义

端口(Port):是设备上的一个"逻辑通道",用于区分同一设备上运行的不同应用程序或服务。例如,Web服务、邮件服务、游戏等可以通过不同端口同时运行。

如果说IP地址是用于找到一台设备的,那么端口就是用于找到该设备中的一个运行的程序。

端口号是一个16位数字(0~65535)

|------|-------|---------|
| 端口号 | 通信协议 | 用途 |
| 80 | HTTP | 未加密网络传输 |
| 443 | HTTPS | 加密网络传输 |
| 21 | FTP | 文件传输 |
| 22 | SSH | 远程管理服务器 |
| 25 | SMTP | 发送邮件 |
| 53 | DNS | 域名解析 |
| 3389 | RDP | 远程桌面连接 |
[常见的端口号及用途]

  • 客户端:发起请求时,操作系统会随机分配一个临时端口(动态端口)。

  • 服务端:长期监听固定端口(如Web服务器监听80端口),等待请求。

当你在浏览器访问网站时:

你的电脑IP +随机端口→ 服务器的IP + 80端口

HTTP协议

定义

HTTP(HyperText Transfer Protocol)

是一种 应用层协议,用于在客户端(如浏览器)和服务器之间传输超文本(如HTML页面、图片、视频等)。它是万维网(WWW)数据通信的基础。

HTTP的底层是TCP/IP协议

工作流程

  1. 客户端在浏览器中发起请求 :用户在浏览器中输入**URL(域名),**例如www.baidu.com,此时浏览器会解析生成HTTP请求。
  2. **DNS服务器解析域名:**输入的域名会被DNS服务器解析得到目标主机的IP地址
  3. **建立TCP连接:**根据解析得到的IP地址来访问目标主机的服务器的80端口,与其建立TCP连接。
  4. **发送GET/POST请求报文:**获取目标服务器的数据(GET),向目标服务器提交数据(POST请求)。
  5. **服务器返回相应报文:**服务器会根据请求的内容来返回给客户端具体的响应。
  6. **关闭连接:**但在HTTP1.1中保持连接复用(Keep-alive)。

浏览器开发者工具NetWork使用

Eage 浏览器为例,在浏览器页面右击选择**"检查",** 点击后,选择**"网络"**

如图片所示可以看到浏览器在网络请求中的一些数据。

GET请求报文

对象:浏览器向web服务器的获取数据的请求

以下时通过浏览器开发者工具得到的请求报文:

请求行

1.GET /serach.html HTTP/1.1 b表示请求方法,请求服务器中资源路径,HTTP协议版本

请求头

2.告诉服务器可以接受的数据类型

3.告诉服务端支持的压缩算法

4.告诉服务端支持的语言

5.和服务器端保持长连接

6.服务器端的IP地址和端口号,没有显示端口号则为80

7.让客户端请求不安全请求,https则是加密的

8.用户代理

空行\r\n

总结:http的get请求报文为

请求行\r\n

请求头\r\n

空行\r\n

注意每条数据后都要有一个\r\n

POST请求报文

对象:浏览器向web服务器提交数据的请求

在"负载 "中可以看到请求体的内容,这里是JSON数据

HTTP POST请求报文

请求行\r\n

请求头\r\n

空行\r\n

请求体

响应报文

对象:服务器处理浏览器发送的请求而做出的响应。

这里面展示的是我自己写的简单服务器的响应头

响应行

HTTP/1.1 200 OK 协议版本 状态码 状态

响应头

Server:Rqtzws/1.0 服务器名称

空行\r\n

响应体

HTTP 响应报文

响应行\r\n

响应头\r\n

空行\r\n

响应体\r\n

状态码

|-----|---------|
| 状态码 | 说明 |
| 200 | 请求成功 |
| 307 | 重定向 |
| 400 | 错误请求 |
| 404 | 请求资源不存在 |
| 500 | 服务器出现错误 |

公网/内网

公网

公网是全球范围内的互联网,由无数网络设备(如路由器、服务器)通过TCP/IP协议互联而成,允许任何接入网络的设备进行公开通信。例如,访问百度、使用微信或浏览国外网站都是通过公网实现的。

特点:

  • 具有全球唯一的公网IP地址
  • 所有用户都可以访问

内网

内网是私有网络,仅在特定组织或家庭内部使用,设备通过路由器、交换机等连接。例如,家庭Wi-Fi、公司办公网络都是内网。

特点:

  • 局域网IP地址(192.168.68.23),不同局域网中可重复使用。
  • 内网设备不会直接暴露在公网内,外网用户无法根据内网地址访问该设备。
  • 相比公网速度更快(如1Gbps)

那么内网中的设备是如何访问到公网的资源的呢?如访问百度,CSDN

这就是下面要提到的NAT网络地址转换技术

为什么会有公网和内网之分呢?

因为IPV4地址资源短缺,没有办法给每一台联网设备提供公网IP。

NAT网络地址转换

家庭网络(路由器)通过光纤/DSL接入(单层NAT)

以下将详细介绍内网设备是如何通过路由器来访问外网的。

  • 首先我们从运营商中购买宽带,会得到一个公网IP。

  • 再将路由器的网线连接到宽带中,配置路由器管理页面,使得内网设备连接。

  • 此时连接的内网设备可以得到一个路由器分配的局域网IP地址

  • 此时设备如果想要访问百度

  • 设备的默认网关指向路由器的内网IP(如 192.168.1.1),所有非本地的数据包都会发送给路由器处理。

  • 设备通过路由器或运营商提供的DNS服务器(如 8.8.8.8)将域名(如 www.baidu.com)解析为公网IP地址。

  • DNS解析后发现目标的IP地址不在本地局域网中,将数据包发送到默认网关(路由器),路由器启用NAT网络地址转换

  • **NAT网络地址转换:**将设备的内网IP地址替换为路由器的公网IP,并分配给一个随机的端口,并记录NAT映射表(包含内网设备的IP和端口,路由器公网IP和端口,目标服务器(百度)IP和端口)

  • 通过网络访问百度服务器

  • 服务器数据传回内网设备:百度服务器会根据NAT映射表来将相应的数据发送给表中的有公网ip的路由器。

  • 路由器响应:路由器根据NAT映射表中的内网设备ip和端口,将数据传回内网设备。

移动网络(手机)依赖基站和蜂窝核心(多层NAT)

  • 手机在开启移动网络后,会搜索附近基站信号(如5G频段n78),建立无线连接(RRC连接)。
  • 手机向核心网发起PDN连接请求
  • 运营商网关会给手机分配一个内网ip地址,若支持IPv6,手机可呢会直接得到ipv6地址
  • 手机在浏览器中访问百度时,生成http数据包,他将通过附近的基站传输到核心网(5GC)
  • 核心网再将数据发送至运营商的网关
  • CGNAT(运营商NAT,多层) 会将手机的内网IP转换为公网ip(该公网IP属于 移动网络运营商(如中国移动、中国联通、中国电信),是运营商从**国际组织(如APNIC)**申请获得的IP地址资源池中的一部分,是有限的),并记录内网IP,公网IP,目标IP组成的映射表
复制代码
手机(内网IP:10.100.100.100)  
        ↓  
运营商第一层NAT(映射到运营商内网IP:100.64.1.1)  
        ↓  
运营商第二层NAT(映射到公网IP:120.230.45.67)  
        ↓  
    公网互联网
  • 最后再将数据包通过运营商网络发送给百度服务器。
  • 传回手机同上。

DNS/DDNS/域名

DNS定义

DNS(Domain Name System)是将人类可读的域名(如 www.example.com)转换为机器可识别的IP地址(如 93.184.216.34)的分布式数据库系统。

DNS核心功能

域名解析:将域名转换为IP地址(正向解析)。

反向解析:通过IP地址查询域名(反向解析)。

DNS工作流程 (以访问 www.baidu.com 为例):

浏览器缓存:检查本地缓存是否有域名对应的IP。

系统缓存:查询操作系统(如Windows的hosts文件)。

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

顶级域服务器:返回权威DNS服务器(如 baidu.com的NS记录)。

结果缓存:将IP地址缓存到本地供后续使用。

DDNS定义

DDNS(Dynamic DNS)是DNS的扩展,用于在设备IP地址频繁变化时(如家庭宽带动态IP),自动更新域名与IP的绑定关系.例如国内花生壳的DDNS服务。

域名定义

域名是用户访问网站或服务的易记名称,由多级标签组成(如 mail.google.com),通过层级结构(根域→顶级域→二级域→子域)管理。

通俗的来讲:就是将难记的IPv4地址转换为容易记忆的字符,换句话说就是用你的名字来代替你的身份证号一样。

域名的注册:国内如阿里云、腾讯云

根域名:.(通常省略)

一级域名(顶级域名):.com( .com(商业)、.org(非营利组织)、.net(网络服务)

二级域名:example.com

三级域名:cn.example.com

四级域名:blog.cn.example.com

上述如果有误,请大佬指正批评! 如有帮助可以支持下老弟吗

相关推荐
色的归属感44 分钟前
一款功能强大的手机使用情况监控工具
websocket·网络协议·tcp/ip·http·网络安全·https·udp
iOS技术狂热者1 小时前
【Android开发基础】手机传感器信息的获取
websocket·网络协议·tcp/ip·http·网络安全·https·udp
@hdd6 小时前
Qt实现HTTP GET/POST/PUT/DELETE请求
qt·http
swift开发pk OC开发8 小时前
如何轻松查看安卓手机内存,让手机更流畅
websocket·网络协议·tcp/ip·http·网络安全·https·udp
慵懒学者8 小时前
15 网络编程:三要素(IP地址、端口、协议)、UDP通信实现和TCP通信实现 (黑马Java视频笔记)
java·网络·笔记·tcp/ip·udp
itachi-uchiha9 小时前
关于UDP端口扫描概述
网络·网络协议·udp
学习至死qaq9 小时前
windows字体在linux访问异常
linux·运维·服务器
swift开发pk OC开发10 小时前
flutter框架中文文档,android智能手机编程答案
websocket·网络协议·tcp/ip·http·网络安全·https·udp
haoranyyy10 小时前
mac环境中Nginx安装使用 反向代理
linux·服务器·nginx
JCBP_10 小时前
数据结构3
服务器·c语言·数据结构·vscode