【计网】TCP/IP四层模型(一)
OSI七层模型
OSI(Open Systems Interconnection)七层模型是国际标准化组织(ISO)提出的网络通信框架,用于标准化不同厂商设备之间的通信流程。
-
物理层(Physical Layer)
作用:传输原始比特流(0和1),定义物理介质(电缆、光纤、无线)的电气、机械特性(如电压、接口形状)。
关键协议/设备:网线、光纤、集线器(Hub)。 通俗比喻:相当于“公路”本身,负责车辆(数据)的物理运输。 -
数据链路层(Data Link Layer) 作用: 将比特流组织成帧(Frame),进行差错检测(如CRC校验)。
通过MAC地址实现同一局域网内设备的直接通信(如交换机转发)。
关键协议/设备:以太网(Ethernet)、MAC地址、交换机(Switch)。
通俗比喻:像“邮递员”,在同一个社区(局域网)内根据门牌号(MAC地址)精准投递信件(数据帧)。 -
网络层(Network Layer)
作用:
通过IP地址实现不同网络间的路由选择(如路由器跨网转发)。
解决拥塞控制、分组拆分与重组。
关键协议/设备:IP协议、路由器(Router)、ICMP(Ping)。
通俗比喻:像“GPS导航系统”,规划跨城市(跨网络)的最佳路径(路由),确保包裹(IP数据包)到达目标城市。 -
传输层(Transport Layer) 作用:
提供端到端(应用程序到应用程序)的可靠传输(如TCP)或高效传输(如UDP)。
通过端口号区分不同服务(如80端口对应HTTP)。 关键协议:TCP(可靠传输)、UDP(快速传输)。
通俗比喻:像“快递公司”,TCP是顺丰(保证包裹不丢失),UDP是普通邮政(可能丢件但速度快)。 -
会话层(Session Layer) 作用: 建立、管理、终止应用程序之间的会话(如断点续传、身份验证)。
解决“谁可以通信”和“如何同步通信”问题。 关键协议:RPC(远程过程调用)、SSH会话。
通俗比喻:像“电话秘书”,负责拨通电话(建立会话)并在通话结束后挂断(终止会话)。 -
表示层(Presentation Layer) 作用: 数据格式转换(如加密/解密、压缩/解压、字符编码转换)。
确保发送方和接收方“说同一种语言”。 关键协议:SSL/TLS(加密)、JPEG/MPEG(多媒体编码)。
通俗比喻:像“翻译官”,将中文(发送方数据格式)翻译成英文(接收方可读格式)。 -
应用层(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 | 必需(地址不足) | 可选(地址充足) |
关键区别说明
-
地址空间
- IPv4仅支持约43亿地址,早已耗尽(依赖NAT缓解)
- IPv6地址数量足够为地球每粒沙子分配一个IP
-
地址表示
- IPv4使用点分十进制(4段,每段0-255)
- IPv6使用冒号分十六进制(8段,每段0-FFFF),支持压缩写法(
::
替换连续全零段)
-
性能优化
- 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来标识,这里为什么还要用到端口号呢,那是为了解耦,防止网络编程和系统进程管理强耦合。