【计网】TCP/IP四层模型(一)

OSI七层模型

OSI(Open Systems Interconnection)七层模型是国际标准化组织(ISO)提出的网络通信框架,用于标准化不同厂商设备之间的通信流程。

  1. 物理层(Physical Layer)​​

    ​​作用​​:传输原始比特流(0和1),定义物理介质(电缆、光纤、无线)的电气、机械特性(如电压、接口形状)。

    ​​关键协议/设备​​:网线、光纤、集线器(Hub)。 ​​通俗比喻​​:相当于"公路"本身,负责车辆(数据)的物理运输。

  2. 数据链路层(Data Link Layer)​​ ​​作用​​: 将比特流组织成​​帧(Frame)​​,进行差错检测(如CRC校验)。

    通过MAC地址实现同一局域网内设备的直接通信(如交换机转发)。

    ​​关键协议/设备​​:以太网(Ethernet)、MAC地址、交换机(Switch)。

    ​​通俗比喻​​:像"邮递员",在同一个社区(局域网)内根据门牌号(MAC地址)精准投递信件(数据帧)。

  3. 网络层(Network Layer)​​

    ​​作用​​:

    通过​​IP地址​​实现不同网络间的路由选择(如路由器跨网转发)。

    解决拥塞控制、分组拆分与重组。

    ​​关键协议/设备​​:IP协议、路由器(Router)、ICMP(Ping)。

    ​​通俗比喻​​:像"GPS导航系统",规划跨城市(跨网络)的最佳路径(路由),确保包裹(IP数据包)到达目标城市。

  4. 传输层(Transport Layer)​​ ​​作用​​:

    提供端到端(应用程序到应用程序)的可靠传输(如TCP)或高效传输(如UDP)。

    通过​​端口号​​区分不同服务(如80端口对应HTTP)。 ​​关键协议​​:TCP(可靠传输)、UDP(快速传输)。

    ​​通俗比喻​​:像"快递公司",TCP是顺丰(保证包裹不丢失),UDP是普通邮政(可能丢件但速度快)。

  5. 会话层(Session Layer)​​ ​​作用​​: 建立、管理、终止应用程序之间的会话(如断点续传、身份验证)。

    解决"谁可以通信"和"如何同步通信"问题。 ​​关键协议​​:RPC(远程过程调用)、SSH会话。

    ​​通俗比喻​​:像"电话秘书",负责拨通电话(建立会话)并在通话结束后挂断(终止会话)。

  6. 表示层(Presentation Layer)​​ ​​作用​​: 数据格式转换(如加密/解密、压缩/解压、字符编码转换)。

    确保发送方和接收方"说同一种语言"。 ​​关键协议​​:SSL/TLS(加密)、JPEG/MPEG(多媒体编码)。

    ​​通俗比喻​​:像"翻译官",将中文(发送方数据格式)翻译成英文(接收方可读格式)。

  7. 应用层(Application Layer)​​ ​​作用​​:直接面向用户提供网络服务(如网页浏览、邮件发送)。

    ​​关键协议​​:HTTP(网页)、FTP(文件传输)、SMTP(邮件)。

    ​​通俗比喻​​:像"手机APP",用户直接操作微信(应用层)发送消息,无需关心底层如何传输。

TCP/IP四层(或五层)模型

OSI七层模型理论完整,但在实际中并未被完全采用,而是将其简化为了TCP/IP四层模型,降低了复杂性,减少了冗余,应用更为广泛。

TCP/IP四层模型:

  • 网络接口层(物理+数据链路)
  • 网络层(IP)
  • 传输层(TCP/UDP)
  • 应用层(会话+表示+应用)
    TCP/IP五层模型:
  • 物理层(硬件)
  • 数据链路层(mac)
  • 网络层(IP)
  • 传输层(TCP/UDP)
  • 应用层(会话+表示+应用)


为什么要有TCP/IP协议

TCP/IP协议是互联网的基础通信协议,它的存在解决了​​不同设备、不同网络之间的互联互通问题​​。

  • 在早期互联网中,计算机是由不同厂商各种使用自己的通信协议来进行通信,不同计算机之间不能实现互联互通,而TCP/IP定义了一套完整的通信协议,就想你和朋友之间有一个暗号一样,就算没有互相看见彼此,也能通过暗号识别出对方,而TCP/IP也是这样,定义了一套完整的通信协议,屏蔽了底层差异,只要能够支持TCP/IP的计算机就能够进行通信。
  • 随着两台主机之间距离变远,如何保证数据传输过程不会发生丢失,如何保证数据准确传输到对方主机上,如何保证对方主机能够识别出我发送的消息等一系列问题出现,为了解决这些问题,就出现了TCP/IP协议,所以协议本质上是一种解决问题的方案。

网络传输基本流程

局域网通信

为了实现两台主机在同一个局域网之间能够通信,那就要保证,主机之间的唯一性,而 MAC地址 就是用来标识主机之间唯一性的。

MAC地址
  • MAC用来识别数据链路层中相连的节点
  • 长度为 48 位,一般用16进制加上冒号的形式来标识,(例如:08:00:27:03:fb:19),在电脑上命令窗口输入 ipconfig /all就可以查看到自己主机的MAC地址
  • MAC地址在网卡出厂时候就已经设定,不能修改,通常是唯一的(虚拟机中的MAC地址是虚拟的MAC地址,可能会冲突,有些网卡也支持用户自定义MAC地址)。
局域网通信
早期局域网通信过程
  • 在以太网中,同一时刻只允许一台机器向网络中发送消息
  • 如果有多台主机同时发送消息,就会发生数据碰撞
  • 所有发送数据的主机都需要进行碰撞检测和碰撞避免
  • 没有交换机的情况下,一个以太网就是一个碰撞域
  • 早期局域网通信,没有交换机的情况下,主机发送消息给其他主机是通过广播的形式发送的,每台主机都能收到消息
  • 主机确认收到的是否是发给自己的是通过确认目标MAC地址是否是自己
现代局域网通信
  • 现代局域网通信每台主机独立交换机端口,相当于每台主机都有一个专用的电话线,不会发送消息碰撞。
局域网通信过程(图解)

当我们发送你好的时候,需要经过TCP/IP四层模型,每经过一层都需要进行封装报头,在传输给另一台主机的时候,另一台主机就需要对封装的报文进行解包和分用,传输给上层

报文
  • 报头对应协议层的结构体字段
  • 除去报头,剩下的就叫做有效载荷
  • 报文 = 报头 + 有效载荷
数据包封装过程

当数据从应用层向下传递时,每一层都会添加自己的头部(Header),形成新的数据单元:

  • 应用层:生成原始数据(如HTTP请求)。
  • 传输层:添加 TCP/UDP头 → 形成段(Segment)或数据报(Datagram)。
  • 网络层:添加 IP头 → 形成 数据包(Packet)。
  • 数据链路层:添加 MAC头 + CRC校验 → 形成 帧(Frame)。
  • 物理层:转换为 比特流(Bit Stream) 发送到网络。

不同协议层对数据包有不同的称呼:

  • 物理层:比特流
  • 数据链路层: 帧(Frame)
  • 网络层:数据包(Packet) 或 IP数据报(IP Datagram)
  • 传输层:TCP(段(Segment))和 UDP(数据报(Datagram))
  • 应用层:消息(Message) 或 数据流(Data Stream)
数据分用的过程

跨局域网传输(广域网传输)

IP地址

IP地址有两个版本IPV4和IPV6

IPv4 vs IPv6 特性对比

特性 IPv4 IPv6
地址长度 32位(4字节) 128位(16字节)
表示形式 点分十进制(如 192.168.1.1 冒号分十六进制(如 2001:0db8:85a3::8a2e:0370:7334
地址总数 约43亿(2³²) 约3.4×10³⁸(2¹²⁸)
分块大小 每段8位(0-255) 每段16位(0-FFFF)
地址类型 单播、组播、广播 单播、组播、任播(取消广播)
报文头大小 20-60字节(可变) 固定40字节
NAT 必需(地址不足) 可选(地址充足)

关键区别说明

  1. 地址空间

    • IPv4仅支持约43亿地址,早已耗尽(依赖NAT缓解)
    • IPv6地址数量足够为地球每粒沙子分配一个IP
  2. 地址表示

    • IPv4使用点分十进制(4段,每段0-255)
    • IPv6使用冒号分十六进制(8段,每段0-FFFF),支持压缩写法(::替换连续全零段)
  3. 性能优化

    • IPv6固定40字节报文头,去除了校验和等字段
    • 取消广播,改进组播和任播支持
    • 原生支持移动IP和QoS标记
网络通信过程(图解)


网络通信过程中IP地址和MAC地址区别:

  • 源IP地址和目的IP地址在整个通信过程中一直不变。
  • 源MAC地址和目的MAC地址在整个通信过程中一直变。
  • MAC地址用于局域网中通信,IP地址用于广域网中通信
端口号

端口号是传输层协议的内容

  • 端口号是一个2字节16位的整数
  • 端口号用来标识主机上的唯一进程
  • IP地址 + 端口 用来标识唯一主机上的唯一进程
  • 一个端口号只能被一个进程占用
端口号范围
  • 0 - 1023: 知名端口号, HTTP(80), FTP(20和21), SSH(22) 等这些广为使用的应用层协议, 他们的
    端口号都是固定的
  • 1024 - 65535: 操作系统动态分配的端口号. 客户端程序的端口号, 就是由操作
    系统从这个范围分配的
    (一个进程可以绑定多个端口号,但一个端口号只能被一个进程绑定)
端口号和进程ID

标识唯一进程可以用进程的pid来标识,这里为什么还要用到端口号呢,那是为了解耦,防止网络编程和系统进程管理强耦合。

相关推荐
Bright166831 分钟前
mkcert实现本地https
网络协议·http·https
hgdlip40 分钟前
重启路由器ip不变怎么回事?原因分析与解决方法
网络协议·tcp/ip·智能路由器
锐成19191 小时前
FTPS、HTTPS、SMTPS以及WebSockets over TLS的概念及其应用场景
网络协议·https·ssl
leona_nuaa1 小时前
关于udp——mqtt运行注意事项
网络·网络协议·udp
hgdlip2 小时前
手机上网可以固定ip地址吗?详细解析
网络·tcp/ip·智能手机
2501_915921432 小时前
高敏感应用如何保护自身不被逆向?iOS 安全加固策略与工具组合实战(含 Ipa Guard 等)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915106322 小时前
App 上线后还能加固吗?iOS 应用的动态安全补强方案实战分享(含 Ipa Guard 等工具组合)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
靡樊4 小时前
Socket编程UDP\TCP
网络·c++·学习·tcp/ip·udp
2501_915918414 小时前
iOS 项目怎么构建稳定性保障机制?一次系统性防错经验分享(含 KeyMob 工具应用)
websocket·网络协议·tcp/ip·http·网络安全·https·udp
2501_915909064 小时前
从零搭建到 App Store 上架:跨平台开发者使用 Appuploader与其他工具的实战经验
websocket·网络协议·tcp/ip·http·网络安全·https·udp