美好的一天!
我正在研究OSI模型。
我有一些疑惑。
在网络层,数据可以分成多个数据包并重新组装。
重组意味着“按顺序”组装,但是数据包可能在UDP(传输层协议)中是无序的。
我的问题是:
你正在混合不同的功能和层次。
在网络层中,超大数据包可以被分段,由目的地的网络层重新组装。该功能解决了在跳到跳传输期间MTU可能变得比实际分组小的问题(在IPv4中 - IPv6移除了该功能以支持路径MTU发现)。
在传输层,存在(面向连接的)协议,如TCP,将连续数据流划分为由源和目的地跟踪的段。当所有必要的段到达时,目的地重建数据流。使用跟踪重新发送丢失的片段。
UDP数据报可能需要沿途分段,需要目标重新组装。但是,如果其中一个片段丢失,则不会重新组装,也不会将数据报传递给应用程序 - 它会丢失。
UDP是一种传输数据报的“即发即弃”协议。不同的数据报可能采用不同的网络路由,可能导致它们无序到达。
当TCP段丢失时,目标无法确认。这使得源重新发送该段。承载段是否需要分段的数据包无关紧要 - 只有当所有片段都已到达时,重组的段才会传递给TCP。然后TCP确认该段并将数据传递给应用程序。
TCP还重建了段的顺序,因此数据流与发送的完全相同。为此,段被编号,当它们无序到达时,TCP(传输)层对它们进行调度。