【计算机网络】网络层(二)ipv4头部分析

207 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第9天,点击查看活动详情 这也是第11篇文章

背景知识——网络层的设计原则(意译)

  • 保证它能跑起来 在没有确定它一定能跑起来之前不要急着最终确定标准
  • 简单
  • 有明确的选择 做同一件事情只需要通过一种方式
  • 利用模块化 模块分离,一个模块出现问题不影响其他
  • 简单、通用、灵活以适应不同环境
  • 避免静态选项和参数 如果一定会用到参数,也最好是收发双方协商好一个值,而不是写死了的固定的参数
  • 设计不需要十全十美 好的设计是满足大多数人的要求,如果有人有一些奇怪的、特殊的要求,就让他们自己想办法
  • 对发送给别人的信息要高要求,对收到的信息可以容忍有瑕疵 严以律己,宽以待人
  • 要考虑规模 如果系统的规模是百万甚至亿级规模的,不要再用中心化的数据库,一定要考虑负载均衡的问题
  • 考虑性能和成本

IP地址

IPv4头部

image.png

可以这么记忆: 头部的必备部分分为五行:

  • 第一行是与包的长度相关
  • 第二行是成帧相关
  • 第三行是传输相关
  • 第四行是源地址,第五行是目标地址

下面是对各部分的详细解读:

version:版本号

是ipv4还是ipv6

IHL:ip header length

头部大小=IHL(10)x4

IHL的取值范围为5~15 所以对应头部大小取值范围为20~60

Differentiated service

image.png

total length:整个数据报的大小

total length=头部大小(IHL(10)X4)+数据部分

identification

来自同一个包的帧有相同的值

我的理解:便于组装

image.png

DF、MF、fragment offset作用

  • DF:don't fragment,所以为1时不分片
  • MF:more fragment,所以为1时分片未完,为0时分片结束
  • fragment offset:确定fragment在包中的位置 这个标志位有13位,表示单个packet最多可容纳2^13个fragment (回顾:total length是16bit,其实很逼近了)

time to live

最大为255. 递减规则:

  • 按秒递减
  • 每经过一跳(指从一个路由到另一个路由)
  • 当长时间在一个路由的队列中等待,应急速递减 值为0时该包解体,并回传警告包给源主机

协议

在接收方传到上层的什么协议 TCP or UDP?

image.png

optional

注意:现在一般不怎么讲这个,因为很多路由不认,了解即可

  • security:一般会被路由忽略,还有种此地无银三百两的意味,让有心人知道它很重要
  • strict source routing:指定完全路径
  • loose source routing:类似于公交车一定得经过某几个站点一样,此处一定得经过某几个路由
  • record route:告诉路由加上它的ip地址到包里
  • timestamp:告诉路由加上它的ip地址+时间戳

参考书籍

《计算机网络 第五版》Andrew等著(小蓝书)