TCP/IP协议栈中,为什么选择IP层负责分片?

原创 2013年12月06日 10:14:35

这是知乎上被邀请的一个问题TCP/IP协议栈中,为什么选择IP层负责分片?,我从没思考过这个问题甚至不认为这是个有意义的问题,但是当我研究思考后却发现这么一个小问题也许正是当初设计TCP/IP协议栈时的一种考量。


TCP/IP是一个分层协议,协议栈的最底层是链路层,接下来依次是网络层,传输层,应用层。

100859505.jpg

可以看见

  • 链接层负责建立电路连接,是整个网络的物理基础;

  • 网络层负责分配地址和传送二进制数据,主要协议是IP协议;

  • ......

再来看看几个概念

  • PDU:计算机网络各层对等实体间交换的单位信息称为协议数据单元(protocol data unit,PDU),比如分节(segment)是对应于TCP传输层的PDU,IP数据报(IP datagram)对应网络层实体间交换的PDU;

  • SDU:按照协议与服务之间的关系,除了最低层(物理层)外,每层的PDU通过由紧邻下层提供给本层的服务接口,作为下层的服务数据单元(service data unit,SDU)传递给下层,并由下层间接完成本层的PDU交换。如果本层的PDU大小超过紧邻下层的最大SDU限制,那么本层还要事先把PDU划分为若干个合适的片段让下层分开载送,再在相反方向把这些片段重组为PDU。

  • :链路层实体间交换的PDU称为帧,其长度取决于具体的接口;

  • MTU:我们进行分片的依据是MTU,而MTU是网络层和链路层之间的接口属性;


我们可以很清楚的看到如果要在最低层的数据链路层做分片,你必须要去对不同的物理网络的驱动程序做更改; 如果要在上层的传输层或者应用层做分片,既然数据都要通过网络层实际上就是各协议对分片功能的重复造轮子,我们有必要付出这种成本去实现分片吗?我想IP层就是我们在软件设计里常用的适配层,着这里做分片是成本最低的选择。

参考书籍《UNIX网络编程卷1》


相关文章推荐

TCP/IP协议栈关于IP分片重组

最近学习网络层协议的时候,注意到了IP协议中数据包分片的问题。下图是IP协议头的数据字段的示意: 如图所示,IP协议理论上允许的最大IP数据报为65535字节(16位来表示包总长)。但是因为协议栈网...

TCP/IP协议栈之四---------链路层

4.1接收帧  由硬件驱动在中断处理程序中直接调用netif_rx  netif_rx(skb)★     (dev.c/core)----将接收到的消息挂在每CPU的输入队列中     if(...

TCP/IP协议栈 -----链路层

这节说一下链路层和ARP RARP协议链路层: 在协议栈中链路层的目的有三个:1. 为IP模块发送或接受数据包 2.为ARP模块发送或接受ARP请求 3. 为RARP模块发送或接受RARP请求。 让...

TCP/IP协议栈之三---------网络层

3.1IP发送  网络层中主要的发送函数有以下三个:ip_push_pending_frames,ip_queue_xmit,raw_send_hdrinc     (ip_output.c/ipv...

TCP/IP协议栈概述及各层包头分析

一、摘要   对之前几篇博文涉及到的网络通信协议进行分析,概述出TCP/IP的协议栈模型,最后根据实例对各层包头进行分析。   二、标准TCP/IP协议栈模型   标准TCP/...
  • zdzh1
  • zdzh1
  • 2014年03月18日 21:51
  • 1697

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列9: 基础知识之 - 操作系统中常用存储介质详解

操作系统中常用存储介质详解 说明:本文介绍了包括ROM、RAM和FLASH的各种变体 ROM和RAM指的都是半导体存储器,ROM是ReadOnly Memory的缩写,RAM是Random Acces...

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列11: 再话Linux系统调用

题记:本系列文章的目的是抛开书本从源代码和使用的角度分析Linux内核和相关源代码,byhankswang和你一起玩转linux开发轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswan...

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列3: bridge(网桥)FDB表中MAC地址的更新

题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈, 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com 博文2:TCP...

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列6:linux 系统调用中断向量表

题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com linux...

Linux从用户层到内核层系列 - TCP/IP协议栈部分系列5:内核定时器的定义与使用及STP定时器

题记:本系列文章的目的是抛开书本从Linux内核源代码的角度详细分析TCP/IP协议栈 轻松搞定TCP/IP协议栈,原创文章欢迎交流, byhankswang@gmail.com 在L...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TCP/IP协议栈中,为什么选择IP层负责分片?
举报原因:
原因补充:

(最多只允许输入30个字)