10.28【A】

发布时间:2026/10/30 2:41:13
10.28【A】

The Design Philosophy of the DARPA Internet Protocols

论文主线

fate-sharing解决生存性

到底什么是fate-sharing?与通信相关的哪些重要状态保存到端系统?举例子说明?

哪些重要状态保存在端系统

支持多种通信服务

正是因为不同服务所需要的网络特性不同,所以才会区分出TCP/UDP等不同协议,然后IP是这些不同协议抽象出来的共同特点或底层,即传输数据行为本身;

所以TCP/UDP等才在IP更高一层,更接近应用服务

TCP/UDP概述

IP特性

容纳多种网络

互联网在设计之初就面临一个现实问题:底层并不存在一种“统一”的传输网络。有的链路是以太网,有的是令牌环,有的是分组无线网,有的是卫星链路,还有的是租用电话线。它们的带宽、时延、丢包率、最大帧长、寻址方式、可靠性和计费模型都各不相同。如果要求所有网络先改造成同一种形态再接入,那么互联网的规模永远无法扩大。因此 DARPA 架构给出的答案是:不要求底层网络统一,而是定义一个最小的公共契约,让差异被封装在网络层之下。

这个公共契约就是 IP。IP 只要求底层网络能够把一段带有目标地址的分组“尽力”送到下一跳,其余能力一概不作假设。至于底层是广播型链路还是点对点链路、是有连接还是无连接、是否保证顺序,全部由各自的链路层和驱动去处理。这样一来,新增一种网络技术时,只需要为它实现一个 IP 适配层,而不需要改动上层的 TCP、UDP 以及所有应用。这正是互联网能够不断吸纳新技术(从以太网到 Wi-Fi、从光纤到 4G/5G、从数据中心内部网络到低轨卫星)的根本原因。

为了把“容纳多种网络”落到实处,IP 层需要解决几个具体问题:

  • 统一编址:无论底层使用 MAC 地址、电话号码还是其他标识,IP 层都用一套逻辑地址(IP 地址)来标识主机,使跨网络寻址成为可能。
  • 分片与重组:不同链路的最大传输单元(MTU)不同,较大的 IP 数据报在通过 MTU 较小的链路时需要分片,到达目的端后再重组,从而屏蔽链路差异。
  • 地址解析与封装:IP 分组要交给具体链路发送,必须通过 ARP 等机制把 IP 地址映射为链路层地址,再把 IP 数据报封装进链路层帧中传输。
  • 路由与转发:不同网络通过路由器互联,路由器依据路由表完成逐跳转发,把异构网络拼接成一个逻辑上统一的网络。

这里体现的是一种典型的“最小假设 + 分层封装”思想:网络层只承诺尽力而为的交付,把可靠性、有序性、流量控制等更强的语义交给端系统去实现。底层网络越“笨”,上层就越灵活;底层差异被吸收得越彻底,互联网的可扩展性就越强。这也解释了为什么 IP 被称为“窄腰”——上面可以承载无数种应用,下面可以接入无数种链路技术,而中间的接口保持极简。

需要强调的是,“容纳多种网络”并不意味着所有网络的能力都被拉平到最低水平。相反,IP 允许不同网络在性能上存在巨大差异,只是不把这种差异暴露给上层协议。应用若对带宽、时延有特殊要求,可以在 IP 之上自行选择或构建合适的传输协议,而不是要求网络层为每种需求定制能力。这种“网络层保持中立、端系统按需适配”的分工,正是互联网设计哲学中极具生命力的一点。

datagram是什么

特点

所以IP数据报是在网络层,然后比较底层的

然后TCP,UDP是在IP的上一层

或者换句话说,先有IP数据包,然后TCP,UDP等,依据IP数据报的特性来构建自己所需要的特性

与虚电路区别

虚电路

虚电路在哪一层?

TCP和虚电路是什么关系?

能否理解TCP是虚电路的一种?

什么是DARPA互联网架构?

其顶层目标,二级目标都是什么?

现代网络的完整传输机制是怎样的,比如TCP?

NAT是什么?

Test

BCD

疑问1

互联网设计原则中,network of networks是什么?layering是什么?end to end是什么?everything over ip是什么?为什么说前三者是取得成功的关键因素?

疑问2

什么叫“允许控制信息插入字节序列空间”?什么是字节流?在传输信息数据时,本质不就是字节流吗,什么又叫设计字节流?

什么是字节流

意思是说应用写一次数据,并不意味着TCP就发一个报文段,那TCP发送报文段的时机是由什么决定的?

什么叫写入时的消息边界?如何理解UDP保留而TCP不保留?

TCP不保留

UDP保留

为什么 UDP 可以保留边界

UDP 的接收缓冲区太小会怎样

IP 分片不会破坏 UDP 边界

TCP发送报文段时机

如果发送方一次write并不等于发送一个TCP数据包,那么一次write中的ABCD数据,究竟是怎么被分配到不同的TCP数据包当中的呢?或者说一次write对应几个数据包,一个到四个都有可能吗?以及每个数据包所能容纳的数据又是由什么决定的?比如第一个TCP数据包在何时发送,是只包含A,还是AB,还是ABC,还是ABCD?

TCP如何给字节编号

为什么不按照数据包编号?

对啊,为什么不按照数据包来编号?即会话当中,发送方可能要给接收方发送4个TCP数据包,每个TCP包里记录包含字节的范围,如果某个TCP包被接收了,那么其中所有的字节自然也会被接收,并且也能知道期望的下一个包的起始字节范围,按字节编号的话,岂不是粒度更小,复杂度更高?

D为什么正确

什么叫“允许控制信息插入字节序列空间”?

为什么后来放弃了这种通用设计?