一、网络的整体结构

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

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

·实际应用中,最常用的是 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. 高性能服务器设计需理解协议分层与进程管理

Logo

「智能机器人开发者大赛」官方平台,致力于为开发者和参赛选手提供赛事技术指导、行业标准解读及团队实战案例解析;聚焦智能机器人开发全栈技术闭环,助力开发者攻克技术瓶颈,促进软硬件集成、场景应用及商业化落地的深度研讨。 加入智能机器人开发者社区iRobot Developer,与全球极客并肩突破技术边界,定义机器人开发的未来范式!

更多推荐