算算分几片

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

本节的算术:

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)))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论