GO_网络编程---网络协议

一、网络协议基础

1. 协议定义

网络协议是通信双方约定好的沟通规则,用于保障设备之间能够正常交互数据。

  • 原始协议:双方最初约定、未经过迭代完善的基础通信规则
  • 标准协议:在原始协议基础上持续迭代、补充、优化后,形成行业通用规范的协议

二、网络分层架构

分层核心优势:职责拆分、分工明确,解耦各层功能,单独修改某一层协议不影响其他层。

1. OSI 七层参考模型(标准理论模型)

从上至下:应用层 → 表示层 → 会话层 → 传输层 → 网络层 → 数据链路层 → 物理层

2. TCP/IP 四层实际架构(开发常用,Go 网络编程基于这套)

从上至下:应用层 → 传输层 → 网络层 → 链路层

补充说明:OSI 的物理层、数据链路层在 TCP/IP 中统一合并为链路层

三、各分层对应核心协议

每一层都配套专属协议,各司其职,快速区分技巧:

  1. 链路层(MAC 地址相关):ARP、RARPARP:IP 地址解析为 MAC 地址;RARP:MAC 反向解析 IP
  2. 网络层(IP 地址相关):IP、ICMP、IGMP
  3. 传输层(端口号相关):TCP、UDP(日常统称 TCP/IP 协议簇)
  4. 应用层(业务数据格式):FTP、Telnet、TFTP、NFS

四、三层地址核心概念(通信三要素)

1. 链路层:MAC 地址(物理地址)

  • 标识硬件网卡,全球唯一,固化在网卡硬件中
  • 通信范围:设备到设备,MAC 到 MAC 直连通信
  • MAC 获取方式:局域网广播查询(ARP 广播)
  • 仅靠链路层通信缺陷:无网段隔离,全网广播会产生广播风暴,网络拥堵

2. 网络层:IP 地址(逻辑地址)

为解决广播风暴问题引入 IP,对网络做网段划分:

  • 广播仅限制在当前局域网,不会跨网段扩散,规避广播风暴
  • 作用:定位互联网中哪一台主机
  • 数据包携带:源 IP、目的 IP

3. 传输层:端口号

一台主机可能同时运行多个网络程序,端口用来区分主机内不同进程:

  • 作用:定位目标主机上哪一个应用程序 / 进程
  • 数据包携带:源端口、目的端口
  • 端口约束:同一台操作系统内,一个端口同一时间只能被一个程序绑定;不同主机可使用相同端口

通信三要素总结(建立网络通信必备条件)

  1. 网卡 + MAC 地址:硬件标识,底层自动处理,无需开发者手动操作
  2. IP 地址(逻辑地址):定位目标主机,代码中需要手动指定
  3. 端口号:定位主机内目标程序,代码中需要手动指定

五、四层数据封装(组包)与解包流程

以发送数据 Hello World 为例:发送端自上而下逐层封装(加头部),接收端自下而上逐层解封装(拆头部),类似快递层层打包、拆快递。

1. 发送端组包过程(从上到下封装头部)

  1. 传输层 :添加传输层头部(源端口、目的端口)数据包:[源端口 | 目的端口 | Hello World]
  2. 网络层 :添加网络层头部(源 IP、目的 IP)数据包:[源IP | 目的IP | 源端口 | 目的端口 | Hello World]
  3. 链路层 :添加链路层头部(源 MAC、目的 MAC)完整数据包:[源MAC | 目的MAC | 源IP | 目的IP | 源端口 | 目的端口 | Hello World]

数据包通过网线 / 无线网络传输至目标主机网卡。

2. 接收端解包过程(从下到上拆解头部)

  1. 链路层:解析 MAC 头部,匹配本机 MAC,拆除链路层头,向上交付网络层
  2. 网络层:解析 IP 头部,匹配本机 IP,拆除 IP 头,向上交付传输层
  3. 传输层:解析端口头部,匹配程序监听端口,拆除端口头,将原始数据Hello World交付对应应用程序

六、分层快速判断口诀(复习速记)

  1. 涉及 MAC、ARP/RARP → 链路层
  2. 涉及 IP、ICMP、IGMP → 网络层
  3. 涉及端口、TCP/UDP → 传输层
  4. 剩余业务数据、FTP/Telnet 等 → 应用层

七、分层通信范围总结

  • 链路层:设备 ↔ 设备(硬件通信)
  • 网络层:主机 ↔ 主机(跨局域网主机通信)
  • 传输层:进程 ↔ 进程(同一主机内程序通信)
  • 应用层:应用程序 ↔ 应用程序(业务数据交互)
相关推荐
小疆智控5 分钟前
工业跨网通讯实践EtherCAT转TCPIP网关关键技术
网络·网络协议
和煦的糖果6 分钟前
项目1: TurtleBot3 自主导航的第一阶段学习
网络
名字还没想好☜23 分钟前
Go 的 io.Reader/Writer 组合实战:io.Copy、TeeReader、MultiWriter 优雅处理数据流
开发语言·后端·golang·go·iphone
fhqlongteng35 分钟前
TCP服务器断开客户端的方法
服务器·网络·tcp/ip
啦啦啦啦啦zzzz42 分钟前
5种IO模型
运维·服务器·网络·c++
打妖妖灵滴哪吒1 小时前
OSI七层网络参考模型(图文版)
网络
CodeJourney_J2 小时前
网络安全简述-加密技术
网络·安全·密码学
xiaoxiangsiyan2 小时前
企业网络运维自动化与管理协议深度指南
linux·运维·服务器·网络·学习·自动化
乱七八糟的屋子2 小时前
libnice 超完整使用教程|C语言ICE/P2P公网穿透入门到高阶实战
网络协议·内网穿透·p2p·libnice·ice协议·stun/turn·webrtc底层
zhao3266857512 小时前
除了网页浏览,HTTP和HTTPS代理还能干啥?适用场景有哪些
网络协议·http·https