网络模型概述

为了使得多种设备能通过网络相互通信,并解决各种不同设备在网络互联中的兼容性问题,国际标准化组织(ISO)制定了开放式系统互联通信参考模型(OSI模型)。与此同时,TCP/IP模型作为实际应用中更为广泛的模型,成为了互联网的基石。本文将详细介绍OSI七层模型和TCP/IP四层模型,并深入探讨HTTP、TCP等核心协议的工作原理、常见问题及优化方法。

网络模型概述
OSI七层模型
TCP/IP四层模型
应用层: 提供接口
表示层: 数据格式转换
会话层: 管理会话
传输层: 端到端传输
网络层: 路由与转发
数据链路层: 帧传输与MAC
物理层: 物理传输
应用层: HTTP/SMTP等
传输层: TCP/UDP
网络层: IP协议
链路层: 物理传输

OSI七层模型

OSI模型是一个理论上的网络通信模型,由7个层次组成,每一层负责不同的功能:

  • 应用层:负责为应用程序提供统一的接口,使应用程序能够使用网络服务
  • 表示层:负责把数据转换成兼容另一个系统能识别的格式,包括数据加密、压缩等
  • 会话层:负责建立、管理和终止表示层实体之间的通信会话
  • 传输层:负责端到端的数据传输,提供可靠或不可靠的数据传输服务
  • 网络层:负责数据的路由、转发和分片,实现不同网络之间的通信
  • 数据链路层:负责数据的封帧和差错检测,以及MAC寻址
  • 物理层:负责在物理网络中传输数据帧,定义电气特性和物理连接

由于OSI模型过于复杂且仅为理论模型,实际应用中我们更多使用TCP/IP模型。

TCP/IP模型

TCP/IP模型是互联网实际使用的网络模型,由上到下分成4层:

应用层

支持HTTP、SMTP、FTP等最终用户进程的协议,为用户提供网络服务接口。

传输层

处理主机到主机的通信,主要协议有TCP和UDP。

网络层

负责寻址和路由数据包,核心协议是IP协议。

链路层

通过物理媒介(电线、电缆或无线信道)传输数据比特。

TCP与UDP详解

TCP(传输控制协议)

TCP是一种面向连接的、可靠的传输层协议,提供以下特性:

  • 连接管理:通过三次握手建立连接,四次挥手断开连接
  • 可靠性:通过序列号、确认应答和超时重传机制保证数据可靠传输
  • 流量控制:通过滑动窗口机制防止发送方过快地发送数据
  • 拥塞控制:通过慢启动、拥塞避免等算法防止网络拥塞
// Java示例:简单的TCP客户端
import java.net.*;
import java.io.*;public class YA33_TCPClient {public static void main(String[] args) {try {Socket socket = new Socket("localhost", 8080);OutputStream out = socket.getOutputStream();PrintWriter writer = new PrintWriter(out, true);writer.println("Hello from YA33");InputStream in = socket.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(in));String response = reader.readLine();System.out.println("Server response: " + response);socket.close();} catch (IOException e) {e.printStackTrace();}}
}

UDP(用户数据报协议)

UDP是一种无连接的、不可靠的传输层协议,提供以下特性:

  • 无连接:不需要建立连接即可发送数据
  • 不可靠:不保证数据包的顺序和可靠性
  • 高效:头部开销小,传输效率高
  • 适用场景:实时应用如视频流、语音通话等
// Java示例:简单的UDP客户端
import java.net.*;public class YA33_UDPClient {public static void main(String[] args) {try {DatagramSocket socket = new DatagramSocket();InetAddress address = InetAddress.getByName("localhost");byte[] sendData = "Hello from YA33".getBytes();DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, address, 8080);socket.send(sendPacket);byte[] receiveData = new byte[1024];DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);socket.receive(receivePacket);String response = new String(receivePacket.getData(), 0, receivePacket.getLength());System.out.println("Server response: " + response);socket.close();} catch (IOException e) {e.printStackTrace();}}
}

HTTP协议详解

HTTP基本概念

HTTP(超文本传输协议)是应用层协议,用于在Web浏览器和服务器之间传输超文本内容。

HTTP报文结构

HTTP报文分为请求报文和响应报文两种类型。

请求报文

请求行:包含请求方法、请求目标(URL或URI)和HTTP协议版本
请求头部:包含关于请求的附加信息,如Host、User-Agent、Content-Type等
空行:请求头部和请求体之间用空行分隔
请求体:可选,包含请求的数据,通常用于POST请求等需要传输数据的情况

响应报文

状态行:包含HTTP协议版本、状态码和状态信息
响应头部:包含关于响应的附加信息,如Content-Type、Content-Length等
空行:响应头部和响应体之间用空行分隔
响应体:包含响应的数据,通常是服务器返回的HTML、JSON等内容

HTTP状态码

HTTP状态码分为5大类,用于表示请求的处理结果:

HTTP状态码
1xx: 信息响应
2xx: 成功响应
3xx: 重定向
4xx: 客户端错误
5xx: 服务器错误
200: 请求成功
301: 永久重定向
302: 临时重定向
404: 页面未找到
405: 方法不允许
500: 服务器内部错误
502: 错误网关
504: 网关超时

HTTP请求方法

  • GET:请求获取指定资源,通常用于获取数据
  • POST:向服务器提交数据,通常用于提交表单数据或进行资源的创建
  • PUT:向服务器更新指定资源,通常用于更新已存在的资源
  • DELETE:请求服务器删除指定资源
  • HEAD:类似于GET请求,但只返回资源的头部信息

GET与POST的区别

根据RFC规范,GET和POST有以下区别:

  1. 语义不同:GET用于获取资源,POST用于处理资源
  2. 参数位置:GET参数在URL中,POST参数在请求体中
  3. 安全性:GET是安全且幂等的,POST是不安全且不幂等的
  4. 缓存:GET请求可以被缓存,POST请求不能被缓存
  5. 数据限制:GET有URL长度限制,POST无长度限制

HTTP长连接

HTTP协议采用"请求-应答"模式。HTTP短连接每次请求都需要建立和断开TCP连接,效率低下。HTTP长连接通过Keep-Alive机制,允许多个HTTP请求/应答使用同一个TCP连接,提高了效率。

HTTP默认端口:80
HTTPS默认端口:443

HTTPS与安全

HTTP为什么不安全

HTTP是明文传输,存在以下安全风险:

  • 窃听风险:通信内容容易被窃取
  • 篡改风险:内容容易被修改
  • 冒充风险:容易伪装成合法网站

HTTPS如何解决安全问题

HTTPS在HTTP与TCP之间加入SSL/TLS协议,通过以下方式解决安全问题:

  • 信息加密:防止数据被窃取
  • 校验机制:防止数据被篡改
  • 身份证书:验证服务器身份

HTTPS握手过程

HTTPS通过TLS握手建立安全连接,传统RSA算法的握手过程如下:

  1. 客户端Hello:客户端发送支持的TLS版本、随机数和密码套件列表
  2. 服务器Hello:服务器确认TLS版本、发送随机数、确认密码套件和数字证书
  3. 客户端验证:客户端验证证书,发送预主密钥(用服务器公钥加密)
  4. 服务器确认:服务器使用私钥解密预主密钥,生成会话密钥

JWT令牌

JSON Web Token(JWT)是一种跨域认证解决方案,由三部分组成:

  • 头部(Header):包含令牌类型和签名算法
  • 载荷(Payload):包含声明(用户信息等)
  • 签名(Signature):用于验证令牌的完整性
// Java示例:简单的JWT生成和验证
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import io.jsonwebtoken.Claims;
import java.util.Date;public class YA33_JWTExample {private static final String SECRET_KEY = "YA33_secret_key";public static String generateToken(String username) {return Jwts.builder().setSubject(username).setIssuedAt(new Date()).setExpiration(new Date(System.currentTimeMillis() + 864000000)) // 10天.signWith(SignatureAlgorithm.HS256, SECRET_KEY).compact();}public static Claims parseToken(String token) {return Jwts.parser().setSigningKey(SECRET_KEY).parseClaimsJws(token).getBody();}
}

DNS解析过程

DNS(域名系统)是将域名转换为IP地址的分布式数据库系统。DNS解析过程如下:

  1. 客户端查询本地DNS缓存
  2. 本地DNS服务器查询根域名服务器
  3. 根域名服务器指向顶级域名服务器
  4. 顶级域名服务器指向权威域名服务器
  5. 权威域名服务器返回IP地址
  6. 本地DNS服务器缓存并返回IP地址

DNS使用UDP协议,默认端口53,因为UDP具有低延迟、简单快速和轻量级的特性。

网络攻击与防护

DDoS攻击

分布式拒绝服务(DDoS)攻击通过大量流量淹没目标服务器,使其无法正常服务。防护措施包括:

  • 增强网络基础设施
  • 使用防火墙和入侵检测系统
  • 流量清洗和负载均衡
  • 配置访问控制策略

SQL注入

SQL注入发生在应用程序直接将用户输入用作SQL查询时。防护措施包括:

  • 输入验证和转义
  • 使用参数化查询
  • 限制数据库权限
  • 实施输入过滤

XSS攻击

跨站脚本(XSS)攻击通过在Web页面插入恶意脚本盗取用户信息。分为存储型、反射型和DOM型。防护措施包括:

  • 输入验证
  • 输出编码
  • 使用Content Security Policy(CSP)
  • 设置HttpOnly标记

CSRF攻击

跨站请求伪造(CSRF)攻击诱导用户执行恶意操作。防护措施包括:

  • 验证用户会话
  • 使用双重验证
  • 防止跨站请求
  • 避免自动提交表单

网络故障排查

网页加载慢的排查思路

  1. 确定是服务端还是客户端问题
  2. 检查DNS解析是否正常
  3. 检查TCP连接是否建立
  4. 查看HTTP响应状态码
  5. 检查网络带宽和流量

服务器连接问题排查

  1. 检查IP地址和端口是否正确
  2. 检查防火墙设置
  3. 检查网络代理设置
  4. 根据错误状态码进行相应排查

总结

本文详细介绍了网络模型、TCP/IP协议族、HTTP/HTTPS协议、DNS解析过程以及网络安全相关的知识。通过理解这些基础概念和原理,能够更好地进行网络编程、故障排查和安全防护。在实际应用中,需要根据具体场景选择合适的协议和技术方案,确保网络通信的效率和安全性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/94518.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/94518.shtml
英文地址,请注明出处:http://en.pswp.cn/web/94518.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

idea将服务封装为一个jar包

你使用的是 IntelliJ IDEA 2018,这个版本虽然不是最新的,但完全支持通过 图形化界面 打 JAR 包(无需命令行),非常适合你在公司内部将 Snowflake 模块打包成通用组件。下面我将 手把手、一步一步、图文流程式地教你&…

ZYNQ [Petalinux的运行]

一、下载ubuntu 下载地址很多,这里提供了一个:http://mirrors.aliyun.com/ubuntu-releases/14.04/ 推荐开始浏览器下载之后复制下载链接使用迅雷下载。 二、虚拟机安装Ubuntu vmware中安装Ubutun–这部分不展示 安装ssh sudo apt install openssh-s…

excel 破解工作表密码

破解Excel工作表密码可通过易用宝工具、VBA脚本或修改文件格式实现,具体方法需根据文件类型和密码保护类型选择。 ‌使用易用宝工具(推荐)‌ 适用于Excel 2007及以上版本,操作简便且无需编程基础: 下载安装Excel易用…

Deepseek + RAGFlow 搭建本地知识库问答系统

Deepseek RAGFlow 搭建本地知识库问答系统原因为什么要本地部署RAG模型和微调模型区别本地部署流程1. 下载 ollama ,通过ollama把Deepseek模型下载到本地运行。2. 下载RAGFlow 源代码和 Docker ,通过Docker部署RAGFlow。3. 在RAGFlow中构建个人知识库并…

elementui附件上传自定义文件列表,实现传完即可预览、下载、删除,二次封装el-upload

背景当前 elementui 的文件上传组件在上传完文件之后只支持删除,用户希望可以看到附件信息,还可以预览自己刚刚上传但未提交的文件,还希望可以下载,因为公司的下载功能当前是通过 OnlyOffice 实现了文件格式转换,所以我…

linux的conda配置与应用阶段的简单指令备注

1.新建某虚拟环境 conda create -n 虚拟环境名 pythonPython版本号 (-y)2.退出当前虚拟环境 conda deactivate3.查看当前conda环境下所有的虚拟环境 conda info --envs4.查看conda版本和位置 conda --versionwhich conda5.激活某个conda虚拟环境 conda activate 虚拟环境名

虚拟化技术 ——KVM

一、KVM 技术简介 KVM(Kernel-based Virtual Machine,基于内核的虚拟机)是 Linux 内核原生支持的全虚拟化解决方案,依托 CPU 的硬件虚拟化技术(Intel VT-x/AMD-V)实现高效的虚拟机运行。它将 Linux 内核转…

线程间Bug检测工具Canary

Canary1.Introduction2.Approach2.1.数据依赖分析2.2.线程间依赖分析3.Bug检测4.Evaluation参考文献1.Introduction 主要做跨线程value-flow bug检查,下面代码中两个函数中存在指向关系:1. x→o1x \rightarrow o_1x→o1​, b→o2b \rightarrow o_2b→o2…

AEB 强制来临,东软睿驰Next-Cube-Lite有望成为汽车安全普惠“破局器”

AEB 强制时代正在悄然谱写“普惠安全”的行业底色。日前,备受关注的强制性国家标准《轻型汽车自动紧急制动系统技术要求及试验方法》(以下简称“新国标”)意见征求阶段已经结束。该标准将替代现行国标GB/T 39901-2021,计划于2028年…

css的white-space: pre

用户从别的地方复制的配置文件,粘贴到输入框内,需要保留原始格式发送给后端。核心步骤:### 1. 格式保持机制 - white-space: pre :这是最关键的CSS属性,确保所有空格、制表符、换行符都被保留 - wrap"off" &…

【AI解读源码系列】ant design mobile——Space间距

前言 笔者目前业务主要围绕ant design mobile组件库来交付H5前端工作。 故此出此专栏来解读每一个组件是如何实现的。 本文基于AI来解读Space组件。 文档链接: https://mobile.ant.design/zh/components/space 源码: https://github.com/ant-design/ant-…

《用餐》,午餐食堂即景小诗分享(手机/小视频/光盘/养生)

大妈食堂碎碎念,怪罪手机延工期。 笔记模板由python脚本于2025-08-21 19:34:46创建,本篇笔记适合喜欢友善生活和诗的coder翻阅。 学习的细节是欢悦的历程 博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。 Python官…

高通平台WIFI学习-- 基于WCN6750 Tri-Band 2x2 MIMO 802.11ax的讲解

一 前言: 官方资料显示WLAN支持如下的Key features ■ Compliant with IEEE 802.11a/b/g/n/ac/ax ■ Supports 2x2 multi-user multiple-input multiple-output (MU-MIMO) ■ Up to 2.9 Gbps data rate (2x2 160 MHz) ■ Tri-band 2.4 GHz/5 GHz/6 GHz support ■ 20 MHz…

javaweb开发笔记——XML_Tomcat10_HTTP

第四章 XML_Tomcat10_HTTP 一 XML XML是EXtensible Markup Language的缩写,翻译过来就是可扩展标记语言。所以很明显,XML和HTML一样都是标记语言,也就是说它们的基本语法都是标签。 可扩展 三个字表面上的意思是XML允许自定义格式。但这不代…

Python从入门到自动化运维

文章目录IPO编程方式、print、input函数print() -- 输出信息到屏幕input() -- 读取用户的输入基本数据类型int、float、bool、str常用 str 操作方法格式化字符串的三种方式数据验证方法字符串拼接字符串去重数据类型转换函数容器类型列表(list):可变、可重复、有序元…

【数据可视化-98】2025年上半年地方财政收入Top 20城市可视化分析:Python + Pyecharts打造炫酷暗黑主题大屏

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…

【基础-单选】向服务器提交表单数据,以下哪种请求方式比较合适

向服务器提交表单数据,以下哪种请求方式比较合适A.RequestMethod.GET B.RequestMethod.PUT C.RequestMethod.POST D.RequestMethod.DELETE 解释如下: 在HarmonyOS应用开发中,向服务器提交表单数据,C. RequestMethod.POST 是比较合…

论文阅读:Code as Policies: Language Model Programs for Embodied Control

地址:Code as Policies: Language Model Programs for Embodied Control 摘要 针对代码补全任务训练的大型语言模型(LLMs)已被证实能够从文档字符串(docstrings)中合成简单的 Python 程序。研究发现,这些…

Vue 3 customRef 完全指南:自定义响应式引用的终极教程

📖 概述 customRef() 是 Vue 3 中用于创建自定义响应式引用的组合式 API。它允许开发者完全控制响应式数据的读取和写入行为,为复杂的响应式逻辑提供了强大的灵活性。 🎯 基本概念 什么是 customRef? customRef() 是一个工厂函数…

Java项目-苍穹外卖_Day1

项目来源: 【黑马程序员 Java项目实战《苍穹外卖》】 [https://www.bilibili.com/video/BV1TP411v7v6] ZZHow(ZZHow1024) 软件开发整体介绍 软件开发流程 需求分析:需求规格说明书、产品原型。设计:UI 设计、数据库设计、接口设计。编码…