当前位置: 首页 > news >正文

【0.4 漫画计算机网络基础】

🌐 漫画计算机网络基础

🎯 学习目标:掌握计算机网络核心原理,为分布式系统和网络编程打下坚实基础


📋 目录

  1. OSI七层模型与TCP/IP
  2. HTTP/HTTPS协议详解
  3. TCP/UDP协议机制
  4. DNS解析与CDN原理
  5. 网络安全基础

🎭 漫画引言

小明: “为什么我的API调用有时候快有时候慢?”

架构师老王: “这就要从网络通信说起了!网络就像邮政系统,数据包就是信件…”


🏗️ OSI七层模型与TCP/IP

🎨 漫画场景:网络邮政系统

   发送方                          接收方┌──────────┐                    ┌──────────┐│应用层 📱 │ ←→ HTTP请求/响应 ←→ │应用层 🖥️ │├──────────┤                    ├──────────┤│传输层 📦 │ ←→ TCP/UDP分段 ←→  │传输层 📦 │├──────────┤                    ├──────────┤│网络层 🗺️ │ ←→ IP路由选择 ←→   │网络层 🗺️ │├──────────┤                    ├──────────┤│数据链路层│ ←→ 以太网帧  ←→    │数据链路层│├──────────┤                    ├──────────┤│物理层 ⚡ │ ←→ 电信号传输 ←→   │物理层 ⚡ │└──────────┘                    └──────────┘

📚 网络协议栈实现

/*** 网络协议栈模拟器*/
public class NetworkProtocolStack {// 应用层 - HTTP协议static class ApplicationLayer {public HttpRequest createHttpRequest(String method, String url, String body) {HttpRequest request = new HttpRequest();request.method = method;request.url = url;request.body = body;request.headers.put("Content-Type", "application/json");request.headers.put("User-Agent", "Java-Client/1.0");System.out.println("应用层:创建HTTP请求 " + method + " " + url);return request;}public HttpResponse parseHttpResponse(String responseData) {HttpResponse response = new HttpResponse();String[] lines = responseData.split("\n");// 解析状态行String statusLine = lines[0];response.statusCode = Integer.parseInt(statusLine.split(" ")[1]);System.out.println("应用层:解析HTTP响应,状态码:" + response.statusCode);return response;}}// 传输层 - TCP协议static class TransportLayer {public List<TcpSegment> segmentData(byte[] data, int sourcePort, int destPort) {List<TcpSegment> segments = new ArrayList<>();int mss = 1460; // 最大分段大小for (int i = 0; i < data.length; i += mss) {int segmentSize = Math.min(mss, data.length - i);byte[] segmentData = Arrays.copyOfRange(data, i, i + segmentSize);TcpSegment segment = new TcpSegment();segment.sourcePort = sourcePort;segment.destPort = destPort;segment.sequenceNumber = i;segment.data = segmentData;segment.checksum = calculateChecksum(segmentData);segments.add(segment);}System.out.println("传输层:数据分段,共" + segments.size() + "个TCP段");return segments;}private int calculateChecksum(byte[] data) {int checksum = 0;for (byte b : data) {checksum += b & 0xFF;}return checksum & 0xFFFF;}}// 网络层 - IP协议static class NetworkLayer {public IpPacket createIpPacket(TcpSegment segment, String sourceIp, String destIp) {IpPacket packet = new IpPacket();packet.version = 4; // IPv4packet.headerLength = 20;packet.totalLength = 20 + segment.data.length;packet.sourceIp = sourceIp;packet.destIp = destIp;packet.protocol = 6; // TCP协议号packet.payload = segment;System.out.println("网络层:创建IP数据包 " + sourceIp + " -> " + destIp);return packet;}public String routePacket(IpPacket packet) {// 简化的路由选择String[] destParts = packet.destIp.split("\\.");int network = Integer.parseInt(destParts[0]);if (network == 192) {System.out.println("网络层:本地网络,直接投递");return "local";} else {System.out.println("网络层:远程网络,通过路由器转发");return "router";}}}// 数据结构定义static class HttpRequest {String method;String url;String body;Map<String, String> headers = new HashMap<>();}static class HttpResponse {int statusCode;String body;Map<String, String> headers = new HashMap<>();}static class TcpSegment {int sourcePort;int destPort;long sequenceNumber;long acknowledgmentNumber;byte[] data;int checksum;}static class IpPacket {int version;int headerLength;int totalLength;String sourceIp;String destIp;int protocol;Object payload;}
}

🌐 HTTP/HTTPS协议详解

📡 HTTP协议工作流程

/*** HTTP协议模拟器*/
public class HttpProtocolSimulator {// HTTP客户端static class HttpClient {private Socket socket;public HttpResponse sendRequest(String host, int port, HttpRequest request) {try {// 建立TCP连接socket = new Socket(host, port);System.out.println("建立TCP连接:" + host + ":" + port);// 发送HTTP请求PrintWriter out = new PrintWriter(socket.getOutputStream(), true);BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));// 构造HTTP请求报文StringBuilder requestBuilder = new StringBuilder();requestBuilder.append(request.method).append(" ").append(request.path).append(" HTTP/1.1\r\n");requestBuilder.append("Host: ").append(host).append("\r\n");requestBuilder.append("Connection: keep-alive\r\n");for (Map.Entry<String, String> header : request.headers.entrySet()) {requestBuilder.append(header.getKey()).append(": ").append(header.getValue()).append("\r\n");}requestBuilder.append("\r\n");if (request.body != null) {requestBuilder.append(request.body);}System.out.println("发送HTTP请求:\n" + requestBuilder.toString());out.print(requestBuilder.toString());out.flush();// 接收HTTP响应HttpResponse response = parseResponse(in);return response;} catch (IOException e) {System.err.println("HTTP请求失败:" + e.getMessage());return null;}}private HttpResponse parseResponse(Buffer
http://www.xdnf.cn/news/1039087.html

相关文章:

  • 思科资料-ACL的基础配置-详细总结
  • UGPCL
  • 德国马克斯·普朗克数学研究所:几何朗兰兹猜想
  • 上位机开发中的设计模式(3):装饰器模式
  • SCADE Suite / Scade 6 官方参考材料介绍
  • 理论物理学中的规范场论与全息原理
  • 6.14星期六休息一天
  • 单片机 - STM32F407 ADC 模式详解:单次转换、连续转换、扫描模式、非扫描模式
  • 项目 【Http】第二讲---CGI机制的介绍
  • 【Unity】使用 C# SerialPort 进行串口通信
  • Java 常用类 Math:从“如何生成随机密码”讲起
  • LCEL:LangChain 表达式语言详解与测试工程师的实践指南
  • 钉钉机器人-自定义卡片推送快速入门
  • wget批量调用shell脚本
  • C#里与嵌入式系统W5500网络通讯(7)
  • 有关Spring事务的传播机制
  • 23. [实用] 扣子(coze)教程 | 小程序UI设计进阶(五)只此一家,标签组件攻略
  • 互联网校招腾讯26届校招暑期实习综合素质测评答题攻略及真题题库
  • monorepo使用指北
  • 123数字人视频剪辑源码搭建部署/数字人视频创作技术开发
  • React配置别名路径完整指南
  • uniapp的app项目,在华为pad上运行,页面显示异常
  • 动目标显示处理解析六(重频参差扩展盲速)
  • static的三种作用
  • 【C++】模拟实现map和set
  • [Linux入门] Linux磁盘管理与文件系统
  • YOLOv3 中的 IoU 计算详解
  • 在Ubuntu linux终端写文件的方法
  • FFmpeg开发笔记(七十一)使用国产的QPlayer2实现双播放器观看视频
  • 【Zephyr 系列 25】多芯片协同设计:主控 + BLE + LoRa 芯片的统一调度与消息系统