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

深入解析TCP/IP协议分层与通信原理

一、网络的整体结构

·网络是由局部组成整体的系统。

·协议是通信的约定,目的是减少通信成本。

·实际应用中,最常用的是 TCP/IP 协议。

·协议具有分层结构,所有软件系统也呈现层状结构。

二、TCP/IP 协议分层及通信流程

1. 分层设计的原因与本质

·TCP/IP 是一种解决方案,其分层设计源于问题本身的分层。

·主机之间的通信本质上是协议栈之间的通信。

2. 报文结构与处理流程

·协议报头 + 有效载荷。

·报文封装、解包和分用是通信的基本流程。

·同层之间视为直接通信,但必须贯穿操作系统和协议栈。

3. 通信流程简述

·发送(封装):数据入栈。

·接收(解包):数据出栈。

·操作系统(OS)是硬件的基础。

三、TCP/IP 协议分层结构

  1. 应用层:请求与应答。
  2. 传输层:数据段。
  3. 网络层:数据报。
  4. 数据链路层:数据帧。

地址体系:

  1. MAC 地址:局部地址,当前网络有效。
  2. IP 地址:全局地址,标识长远目标。

四、协议细节与报文处理

1. 报头与有效载荷分离

  1. 报头必须具备与有效载荷分离能力。
  2. 报头中需包含将有效载荷交付给上一层具体协议的信息。

2. 报文丢弃机制

  1. 数据链路层收到非本机报文时直接丢弃。
  2. 网络层具备路由功能:路由过程中 IP 地址不变,MAC 地址随局域网变化。

3. 网络层虚拟化意义

·网络层和 IP 实现“一切皆 IP”,为全球网络提供虚拟化层。

4. 网络通信本质

  1. 本质是不同主机的进程间数据交互(进程间通信)。
  2. 端口号标识主机中进程的唯一性。
  3. IP + 端口号标识网络上某一主机的某一进程。
  4. 套接字(socket)= IP + 端口号。

五、TCP与UDP协议及端口号

1. TCP(传输控制协议)与UDP(用户数据报协议)

  1. 进程有 PID,但端口号用于网络通信标识。
  2. 不是所有进程都需要网络通信,端口号与操作系统解耦。

2. Socket 编程基础

  1. 创建 socket 文件描述符(TCP/UDP,客户端与服务器)int socket(int domain, int type, int protocol);
  2. AF_TNET SOCK_DGRAM (UDP) 0
  3. 返回值:成功返回文件描述符,失败返回 -1

绑定端口号(TCP/UDP,服务器)

int bind(int socket, const struct sockaddr *address, socklen_t address_len);

·返回值:成功返回 0,失败返回 -1

3. UDP通信流程

  1. recvfrom() 接收数据
  2. sendto() 既可读又可写(全双工)
  3. 客户端无需显示绑定端口号,由系统自动完成,避免端口冲突
  4. 服务端需显示绑定端口号,且端口号不能随意更改

4. 端口绑定注意事项

  1. bind 公网 IP 不行
  2. bind 127. 或内网 IP 可以
  3. server bind 内网 IP,但用 127. 访问时无法访问
  4. 使用 netstat -anup 查看 UDP 协议端口

客户端访问需使用 server 端绑定的地址信息。

  1. 创建套接字 socket
  2. 绑定 socket 信息(IP 和端口)
  3. 填充 socketaddr_in 结构体
  4. 本地环回用于网络测试

六、系统调用与网络协议栈

常用系统调用与操作:

  1. 宏 ##(合并左右两端符号)
  2. 传输层(TCP)、网络层(IP)
  3. 网络协议栈注定为层状结构
  4. 网络是操作系统的一部分,Windows 和 Linux 都有协议栈
  5. 协议即通信双方约定好的结构体

协议通信两大问题(基于TCP):

  1. 必须具备序列化与反序列化功能
  2. 保证读取时获取完整报文
  1. TCP读取可能出现“粘包”问题
  2. 常用函数:recv(), read(), write(), send()
  3. TCP有接收和发送缓冲区,UDP只有接收缓冲区

常用序列化工具:

  1. json、jsoncpp(C++ 库)
  2. json::value
  3. toStyledString() 转换为字符串
  4. FastWriter(数据量小)、StyledWriter(可读性好)

七、网络通信标准与分层优势

·多种局域网通信标准 + 一种广域网通信标准

结论:

  1. 两种视角:用户视角与工程师视角
  2. 只有同层之间可以通信
  3. 分层设计可对任意层替换,实现强解耦

八、进程与会话管理

1. 网络协议层结构

  1. 应用层(顶层)
  2. 表示层(协议层)
  3. 会话层(服务端)

2. 进程管理相关概念

  1. PGID:进程组
  2. SIG:会话 ID
  3. 进程组等价于任务(作业)

3. 常用命令与操作

  1. jobs:查看系统当前后台任务
  2. fg 任务号:将指定任务切到前台(foreground)
  3. ctrl+c:终止前台任务
  4. ctrl+z:暂停前台进程,自动切换到后台
  5. bg 任务号:让后台任务运行
  6. 只能有一个前台进程,后台进程可有多个

4. 会话与守护进程

  1. 登录 Windows 时即建立会话过程
  2. 守护进程(精灵进程):独立会话,不能是进程组长
  3. setsid() 创建守护进程会话
  4. int daemon(int nochdir, int noclose)
    1. nochdir 0:切换到根目录;1:保持当前目录
    2. noclose 0:显示丢弃;1:正常
  5. chdir(路径):更换工作路径
  6. dup2():重定向

九、网络代码与高性能服务器设计

  1. 网络协议层为分层结构
  2. 网络代码涉及 socket、UDP、TCP
  3. 代码实现:应用层、字节流、序列化
  4. 网络原理(4层)
  5. 高性能服务器设计需理解协议分层与进程管理

http://www.dtcms.com/a/391555.html

相关文章:

  • 【人工智能通识专栏】第二十讲:科创项目选题
  • 数据治理系列(三):SQL2API 平台格局与发展趋势
  • 软考-系统架构设计师 软件项目管理详细讲解
  • three.js添加CSS2DRenderer对象
  • 磁共振成像原理(理论)9:射频回波 (RF Echoes)-三脉冲回波(2)
  • 栈的主要知识
  • question:使用同一请求数据且渲染顺序不确定时复用
  • Redis群集三种模式介绍和创建
  • 【LeetCode 每日一题】1935. 可以输入的最大单词数
  • eeprom和flash的区别
  • [vibe code追踪] 分支图可视化 | SVG画布 | D3.js
  • [硬件电路-264]:数字电路的电源系统的主要特性包括哪些
  • 算法题(212):01背包(空间优化)
  • TP4054和TP4056对比
  • AD5165(超低功耗逻辑电平数字电位器)芯片的详细用法
  • 38、多模态模型基础实现:视觉与语言的智能融合
  • 租赁合同管理系统如何使用?功能深度解析
  • 构建高质量RAG知识库,文档解析破解AI应用的数据质量难题
  • CS课程项目设计17:基于Face_Recognition人脸识别库的课堂签到系统
  • 跨平台开发地图:客户端技术选型指南 | 2025年9月
  • 隐私保护 vs 技术创新:AI 时代数据安全的边界在哪里?
  • 如何在网页开发中建立数字信任?
  • 网站模版 网站建站 网站设计源码模板
  • 访问飞牛NAS的时候为啥要加:5667?不能隐藏它吗?啥是重定向?HTTPS为啥是红的?
  • 端口切换导致 mcp 和 gimini cli 连接失败
  • (论文速读)KL-CLIP:零采样异常分割的K均值学习模型
  • FlexE实践笔记
  • 搭建Redis群集模式
  • 视觉SLAM第13讲:实践,设计SLAM系统
  • 【论文阅读】WebWalker: Benchmarking LLMs in Web Traversal