算算分几片
本节的算术:
IP_HDR = 20 UDP_HDR = 8
max_payload(mtu) 一个不分片的数据报最多装多少应用数据 = mtu - 28
fragments(size, mtu) size 字节应用数据会被 IP 切成几片(每片数据长是 8 的倍数,最后一片除外)
loss_prob(n, p) n 片各以概率 p 丢,整个数据报丢的概率MTU 1500:分别看 1472、1473、3000、10000 字节应用数据各分几片,以及不分片上限:
IP_HDR = 20
UDP_HDR = 8
def max_payload(mtu):
"""一个不分片的 UDP 数据报最多装多少字节的应用数据。"""
return mtu - IP_HDR - UDP_HDR
def fragments(size, mtu):
"""应用数据 size 字节,走 MTU 为 mtu 的链路会被 IP 切成几片(每片的数据长度是 8 的倍数,最后一片除外)。"""
total = size + UDP_HDR
per = (mtu - IP_HDR) // 8 * 8
return (total + per - 1) // per
def loss_prob(n, p):
"""n 片各以概率 p 丢,整个数据报丢的概率。"""
return round(1 - (1 - p) ** n, 4)
print(str(max_payload(1500)) + "/" + ",".join(str(fragments(n, 1500)) for n in (1472, 1473, 3000, 10000)))
全部评论