【网络编程】TCP/IP四层模型、MAC和IP
1. TCP/IP的四层模型
网络模型的目的:规范通信标准,确保不同设备和系统之间能够有效通信
对比OSI模型与TCP/IP模型:
- OSI模型的七层架构(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层)
- TCP/IP模型的四层架构(网络接口层、互联网层、传输层、应用层)
2. 每一层的功能及其对应的协议
3. 数据链路层的工作机制
3.1.1. 数据链路层工作机制
- 数据链路层的主要任务是提供节点到节点之间可靠的数据传输。
- 它通过将网络层传来的数据封装成帧(Frame)来实现****,这些帧通过物理介质在局域网中传输。
常见的数据链路层协议是以太网协议(Ethernet)。
- 帧的封装:在数据链路层,网络层的数据包(如IP包)被封装成数据帧。帧通常包含以下几个部分:
- 帧头(Header):包括源MAC地址、目标MAC地址、帧类型/长度等信息。
- 数据部分(Payload):包含要传输的IP数据包。
- 帧校验序列(FCS, Frame Check Sequence):用于检测数据在传输过程中是否发生错误。
- CSMA/CD机制(以太网有线网络):
- 载波监听多路访问/碰撞检测(CSMA/CD, Carrier Sense Multiple Access with Collision Detection) 是经典的以太网机制,用于检测和处理数据帧的冲突。
- 当一个网络设备准备发送数据时,它首先监听网络介质。如果介质空闲,设备就开始发送数据;如果检测到数据冲突(如两个设备同时发送数据),设备会停止发送,等待一个随机的时间段再重试。
- MAC地址的使用:MAC地址是硬件地址,是每个网络设备的唯一标识符。数据链路层使用MAC地址来确定数据帧的发送方和接收方
3.1.2. MAC数据帧的封包格式(以太网)
3.1.2.1. IP层到MAC层的数据封装
- IP数据报:在图的最上方,我们可以看到一个IP数据报,这是来自IP层的数据包,包含了网络层的目的地址和源地址。
- MAC帧结构:
- 目的地址(6字节):目标设备的MAC地址,用于标识数据包的接收者。
- 源地址(6字节):源设备的MAC地址,用于标识数据包的发送者。
- 类型/长度字段(2字节):标识上层协议类型(如IPv4或IPv6)或表示数据长度。
- 数据字段(46到1500字节):实际传输的数据部分,这里承载的是IP数据报。
- 帧校验序列(FCS)(4字节):用于检验帧在传输过程中是否出错。
46~1500个字节,46是因为以太网MAC帧长不能小于64字节。1500是因为以太网的最大传输单元(MTU)是1500字节
3.1.2.2. MAC层到物理层的数据封装
- 前同步码(7字节):以太网帧的前导部分,用于接收方的同步,帮助它识别帧的开始。通常由一组交替的
1
和0
组成,例如:10101010...
。 - 帧开始定界符(SFD, Start Frame Delimiter)(1字节):紧随前同步码之后,用于标识帧的正式开始。通常是固定的字节(
10101011
),与前同步码的最后一个字节不同。
8个字节,前7个都是_10101010_,最后一个是_10101011_;前7字节用于“唤醒”接收适配器,并将它们的时钟和发送方的时钟同步。第8个字节的最后两个比特(即两个‘1’)警告接收适配器重要的内容要来了。
3.1.2.3. 物理层上的表示
- 物理层表示(黄色部分):
- 数据在物理层上表示为一系列的比特流(0和1),这些比特流通过电信号或光信号在网络介质(如双绞线、光纤或无线电波)上传输。
3.1.3. MAC地址的结构
MAC地址可以分为两部分:
- 前24位(3字节):组织唯一标识符(OUI, Organizationally Unique Identifier),由IEEE分配给设备制造商。例如,
00:1A:2B
。 - 后24位(3字节):设备标识符(NIC Specific),由制造商自行分配,确保在其生产的设备中唯一。例如,
3C:4D:5E
。
一个示例MAC地址:00:1A:2B:3C:4D:5E
。
https://www.wavecn.com/mac.php (这个网站可以查看MAC地址信息)
4. 网络层机制
4.1. 网络层功能
网络层是位于传输层和数据链路层之间的一个关键层。它的主要任务是负责在不同主机之间传输数据包,提供路由选择和逻辑地址的管理。在这层上工作的主要协议是IP协议。
网络层的主要功能包括:
- 路径选择(Routing): 负责根据目标地址选择数据包的传输路径。
- 数据转发(Forwarding): 将数据包从一台路由器转发到下一台路由器,直至到达目的地。
- 逻辑地址管理(Logical Addressing): 通过IP地址来标识网络中的每一台设备,确保数据能够到达正确的目的地。
- 分片与重组(Fragmentation and Reassembly): 在网络层可以将大数据包分割成更小的数据包(分片),然后在目的地重新组装。
网络层是无连接的,也就是说,在发送数据包前,它不会为每一个通信会话建立连接,数据包的发送是独立的,且无状态的。每一个数据包都单独寻址和处理,这也是为什么网络层的通信被称为"尽力而为"的服务。
4.2. IP协议
4.3 IP数据包结构
- 版本(Version): 指示IP协议的版本(如IPv4或IPv6)。
- 头部长度(Header Length): 指定IP头部的长度。
- 服务类型(Type of Service, ToS): 用于指定数据包的优先级。
- 总长度(Total Length): 指定整个数据包的长度(包括头部和数据)。
- 标识(Identification): 用于数据报的分片和重组。
- 标志(Flags): 用于控制或标识分片。
- 片偏移(Fragment Offset): 用于指示数据片在原始数据报中的位置。
- 生存时间(Time to Live, TTL): 指定数据包的最大跳数(即经过的路由器数量),TTL为0时,数据包将被丢弃。
- 协议(Protocol): 指示数据部分使用的协议类型(如TCP或UDP)。
- 头部校验和(Header Checksum): 用于验证IP头部的完整性。
- 源地址(Source Address): 指示数据包的发送方IP地址。
- 目的地址(Destination Address): 指示数据包的接收方IP地址。
- 选项(Options): 可选字段,用于提供更多的控制功能。
- 数据(Data): IP数据包的实际数据部分,通常是传输层的数据。