目录

  • 1. IP协议头格式
  • 2. IP地址管理
    • 2.1 IP地址的早期划分方式
      • 2.1.1 A类
      • 2.1.2 B类
      • 2.1.3 C类
    • 2.2 现在分配IP的方式:CIDR方式
      • 2.2.1 引入子网掩码
  • 3. 路由选择

网络层:完成了路由选择和地址管理

1. IP协议头格式


(1)4位版本:标识是IPV4版本 0100
(2)4位首部长度:二进制数字计算出来的是数值,需要给计算出来的数值 * 4,才表示首部占用的字节数量
(3)8位服务类型:前三位描述的是优先级,但是已经弃用了
                                中间4位分别代表最小延时、最大吞吐量、最高可靠性、最下成本
                                最后一位为保留位
(4)16位总长度:最大标识ip数据报的长度为2162^{16}216,即65536字节

考虑问题:

  1. UDP数据长度为2162^{16}216字节,IP协议在传输UDP数据的时候,是否需要IP协议进行分片传输?

  2. TCP数据是严格按照MSS的大小进行传输的,IP协议在传输TCP数据的时候,是否需要IP协议进行分片传输?

(5)16位标识:标识ip分片是属于哪一个数据包的
          3位标志:第一位:保留位
                          第二位:禁止分片
                          第三位:1:后面还有分片
                                        0:后面没有分片了
          13位片偏移:分片相当于在原始数据当中的偏移量

回忆前提:MTU
MTU是数据链路层对到达数据链路层数据大小的规定。数据链路层进行发送数据时,是严格按照MTU进行发送数据的,数据大小不会超过MTU。
数据链路层就会要求网络层ip协议给数据链路层递交的数据大小不能超过MTU

如果IP协议传输的数据大于数据链路层对于数据的限制(MTU),IP协议就需要将数据进行分片传输。将大于MTU的数据报进行切分,以满足MTU的要求。

分片在网络当中进行传输的时候,不同的分片有可能走不同路由。分片到达对端主机的时候,有可能不是按照发送的顺序到达的。

IP协议对到达网络层的数据一定要有一个认知:当前的ip数据报是一个分片,还是一个完整的数据报。ip协议段当中的16位标识中3位标志和13位片偏移会进行确定。

13位片偏移:最大能表示的数字为2132^{13}213,即8192,但是这只是一个数值,并不是数据包当中偏移的字节数量,偏移的字节大小 = 13位偏移计算的数值 * 232^323(8)

回答上面考虑的问题:
UDP是整条数据交付给网络层,UDP协议的最大传输数据大小是2162^{16}216字节,有可能UDP递交给网络层的数据已经超过了MTU。
UDP整条交付的数据大小大于MTU,则网络层需要对UDP数据进行分片传输。将UDP数据分成不同的小片进行传输
UDP整条交付的数据大小小于MTU,则网络层不需要对UDP数据进行分片传输。

由于TCP在三次握手的过程当中已经协商了各自传输的最大报文段长度,而各自的最大报文段长度是由各自的MTU计算的来的。MSS + TCP_header + IP_header <= MTU。双方在协商的时候,采用了最小的MSS。
TCP在传输数据到网络层的时候,是严格按照MSS进行传输的。传输到网络层的数据一定是小于MTU。

分片丢了会重发分片还是所有数据一起重发?
有分片,则代表一定是UDP数据进行分片了
分片:传输一定是UDP数据+UDP协议是不保证可靠+IP协议也是不保证可靠
重发只能从应用层协议出发重传,所有数据一起重发

(6)8位生存时间:TTL,允许IP数据报最大经历的路由器数量
                                 TTL = 64:ip数据报最大经过路由器64次转发
       路由器每转发一次,TTL进行减1,如果TTL为0,还没有到达对端主机,则该ip数据报被网络丢弃,不会再进行转发。有效预防了循坏路由。
(7)8位协议:标识当前的ip数据报传递给传输层的哪一个协议。
      虽然说一个端口只能被一个进程所绑定,但是一个端口可以被TCP和UDP进程同时绑定
(8)16位首部校验和:校验数据在传输过程当中是否失真

2. IP地址管理

ipv4版本的ip地址
ip地址:本质是unit32_t的整数(无符号32位整数)
ip地址 = 网络号 + 主机号
网络号:可以在网络中标识一个子网,一个子网当中会有多个ip地址
主机号:在一个子网当中标识一个主机

2.1 IP地址的早期划分方式

2.1.1 A类


最高一位固定为0,后7位为网络号,24位为主机号
网络号的范围:共 272^727 = 128 个子网

主机号范围:一个子网共 2242^{24}224 = 16777216 个ip地址

2.1.2 B类


最高两位固定为10,14位网络号,16位主机号
网络号范围:共 2142^{14}214 = 16384 个子网

主机号范围:一个子网共 2162^{16}216 = 65536 个ip地址

2.1.3 C类


最高三位固定为110,网络号21位,主机号8位
网络号范围:共 2212^{21}221 = 2097152 个子网

主机号:一个子网共 282^828 = 256 个ip地址

2.2 现在分配IP的方式:CIDR方式

更加精细化地划分子网,一个子网当中的ip地址,可以比C类IP地址少,可以定义子网当中的IP地址数量

2.2.1 引入子网掩码

子网掩码:本质也是uint32_t的整数,子网掩码总是最高位到低位需要有连续的1存在

网络号 = 子网掩码 & ip地址
子网掩码取反 = 当前子网的主机(ip地址)数量
子网掩码取反有多少位1,则表示主机号使用多少个比特位

现在的IP地址都是经过CIDR方式分配的,不存在A类,B类,C类IP地址的说法!
IP地址是路由器设备给连接上的机器分配的,分配IP地址的时候,会分配上子网掩码。

3. 路由选择

路由选择是在为网络数据选择合适的设备进行转发
路由器上面的网口:WAN / LAN
WAN:是当前路由器连接上级路由器的网口
LAN:是子网内机器连接本路由器的网口


(网络数据的目的IP & 路由项的子网掩码)和当前路由项的网络号进行比对
对比上来,说明当前的数据是想要递交给当前路由项当中的某一个机器的(隐含的意思为:目的主机和当前的源主机在同一个子网下)
没有对比上,则最终会通过默认网关,发送到上级路由
网络层在进行选路,但是具体怎么从机器到相邻设备传输,网络层并没有关注。

【计算机网络】6. 网络基础4之详解IP协议( IP协议头格式、IP地址管理、路由选择)相关推荐

  1. 网络基础之网络层详解

    1 两种服务 1.1 网络层提供的两种服务 在计算机网络领域,网络层应该向运输层提供怎样的服务("面向连接"还是"无连接")曾引起了长期的争论.争论焦点的实质就 ...

  2. linux检查网络是否通畅_网络基础Ping命令详解(使用Ping这命令来测试网络连通)...

    相关知识点 BIOS 在计算机领域,BIOS是 "Basic Input Output System"的缩略语,译为"基本输入输出系统", 与前者读法相同.计算 ...

  3. [Python从零到壹] 九.网络爬虫之Selenium基础技术万字详解(定位元素、常用方法、键盘鼠标操作)

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  4. [Python从零到壹] 五.网络爬虫之BeautifulSoup基础语法万字详解

    欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所有文章都将结合案例.代码和作者的经验讲 ...

  5. 初识网络基础《网络七层模型详解》

    坚持原创输出,点击蓝字关注我吧 图片来自网络 目录 一.初识网络基础 二.网络七层模型详解 1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层 三.总结 一.初识网 ...

  6. [系统安全] 四十四.APT系列(9)Metasploit技术之基础用法万字详解及防御机理

    您可能之前看到过我写的类似文章,为什么还要重复撰写呢?只是想更好地帮助初学者了解病毒逆向分析和系统安全,更加成体系且不破坏之前的系列.因此,我重新开设了这个专栏,准备系统整理和深入学习系统安全.逆向分 ...

  7. python 3.x 爬虫基础---http headers详解

    python 3.x 爬虫基础 python 3.x 爬虫基础---http headers详解 python 3.x 爬虫基础---Urllib详解 python 3.x 爬虫基础---Requer ...

  8. 基础拾遗------webservice详解

    基础拾遗 基础拾遗------特性详解 基础拾遗------webservice详解 基础拾遗------redis详解 基础拾遗------反射详解 基础拾遗------委托详解 基础拾遗----- ...

  9. Java基础:volatile详解

    Java基础:volatile详解 1.volatile保证可见性 1.1.什么是JMM模型? 1.2.volatile保证可见性的代码验证 1.2.1.无可见性代码验证 1.2.1.volatile ...

最新文章

  1. 【JavaScript】 Webpack安装及文件打包
  2. CSS3 常用属性
  3. UImageview加边框 加阴影
  4. [云炬创业管理笔记]第一章测试3
  5. android学习笔记46——File存储
  6. 微软放弃IE浏览器 应尽快完成国产化替代
  7. MySQL锁机制,行锁jingran加在索引上
  8. 人脸识别时一定要穿衣服!小心被看光光......
  9. oracle_最常见的 5 个导致节点重新启动、驱逐或 CRS 意外重启的问题
  10. JSK-16014 打印字母图形【打印图案】
  11. OpenGL ES on iOS --- 光照进阶
  12. Sonic开源的云真机测试平台搭建记录
  13. HTML meta标签使用介绍
  14. python系列13:python中Path常用功能
  15. Granted QOS different to Requested QOS
  16. 孙溟㠭(展)为秘鲁总统夫人‘埃莲娜卡尔普托莱多’女士治名章篆刻印章
  17. Game Hacking Fundamentals 学习笔记1
  18. Boost库编译指南
  19. rancher 启动命令_Rancher 中文文档 —— 快速入门指南
  20. C++教程网 linux之miniShell的实战

热门文章

  1. Redis 配置文件解读
  2. ACL:是什么?目的?使用场景?
  3. v-if导致用ref取不到元素的解决办法
  4. java 控制台类_Java Console类(控制台)
  5. WRP Ultimate 3D Endless Runner Kit - 狂徒末路跑酷角色替换教程
  6. java timezone id_java – 从SimpleTimeZone获取ZoneId
  7. Java小白常问的问题大全
  8. 在 sysservers 中找不到服务器,在 sys.servers 中找不到服务器的解决办法,自己解决的...
  9. (产品求职)阿里巴巴价值观和业务图
  10. PTA 剥洋葱(超级好理解)