计算机网络理论知识:IP数据报_ip协议采用数据报方式还是虚电路方式_刻苦驴啊的博客-程序员秘密

技术标签: 计算机网络  

目录

 

一、零散的知识点

二、电路交换与包交换

1、电路交换技术(circuit switching)

2、包交换技术(packet switching)

三、IP数据报

1、IP协议的服务模型

2、IP数据报格式

3、IP数据报的选项


一、零散的知识点

  • 每个数据链路层协议只涉及一个直连网,而网络层协议涉及整个网络。
  • 网络层协议负责确定把收到的包从哪条路径转发出去(forwarding),即路由选择功能。而具体的传送由数据链路层和物理层负责
  • 因特网提供的是尽力服务(best effort service)。

二、电路交换与包交换

1、电路交换技术(circuit switching)

电路交换技术通过在网络中连接多条物理电路形成一条通路后传送数据。物理电路可以是一条链路或者一条链路通过FDM或TDM形成的通道。

2、包交换技术(packet switching)

采用统计多路复用的方法通过网络传送数据包。有虚电路和数据报两种方式。

  • 虚电路:需要先建立连接然后才可以传送数据;有交换式虚电路和永久虚电路两种。交换式虚电路每次传送数据之前都要建立连接,传送完成后释放连接,而永久虚电路由管理员建立好后一直保持着,可以随时传送数据。(OSI中面向连接的网络服务就是虚电路服务)
  • 数据报(datagram):不需要建立连接便可以发送数据包,交换机根据数据包的目的地址转发包。(因特网采用的就是数据报交换技术)

三、IP数据报

1、IP协议的服务模型

  • IP协议是因特网的网络层协议;
  • IP协议是可路由的,即IP地址是唯一的、全局的、按层分配的。按层分配的意思是可以根据IP地址跟踪到具体某一台计算机。
  • IP协议提供尽力服务,即无连接无确认的数据报服务;
  • IP协议可以运行在任何网络上,即IP协议可以连接任何物理网络;

2、IP数据报格式

  • 头部长度:以4个字节为单位,所以一共可以表示60个字节。常规情况下头部必定包括前5行,即20个字节。
  • 总长度是整个数据报的长度,以字节为单位。
  • 标识、标志(DF,MF)和偏移量用于划分片段,其中偏移量以8个字节为单位。
  • 生存期用于记载经过的路由器数,每经过一个路由器生存期减1,当生存期为0时连路由器丢弃该数据报并发送一个ICMP包告知源主机;生存期的默认值为网络直径(网络最大路由器数量)的两倍。
  • TTL:每经过一个路由器减1;防止了数据报长时间滞留在因特网上,且限制了因特网的直径
  • 协议定义的是数据部分的协议:TCP=6,UDP=17,ICMP=1
  • 头部校验是头部的校验和,校验出错后路由器会丢弃出错的数据报;
  • 选项和填充位最多40个字节,与头部长度有关,填充位用于32位对齐;
  • 服务类型TOS,起初用于提出数据报的四种独立的服务要求(低延迟、高吞吐量、高可靠性和花钱最少)和优先权,现在被重新定义为区分服务
  • 如果不带选项的IP数据报被分段,这些片段头部的【头部校验和、MF、OFFSET、总长度】可能与原数据报头部字段的内容不一样。

  • 一个物理网络的最大传输单元(MTU)是该网络可以运载的最大有效载荷,即IP数据报的最大长度(以太网的MTU=1500).故如果一个数据报的大小大于其要承载它的网络的MTU,则路由器要先对该数据报进行分段(fragment)。
  • 源主机每次发送IP数据报时都会把标识字段加1,但在分段时同一数据报的各个段使用的标识的值保持不变。并且使用偏移量字段指出该片段的数据部分相对于原来的数据报的偏移量。
  • 上图数据报总长度为1420,包括是20B的头部和1400B的数据,MTU为532,所以需要分段,每一段都是头部+数据。由于头部为20B,所以每一段的有效载荷最大只有512B,因此1400B的数据要分为三段:512+512+376=1400;
  • MF标识符(more fragment):MF=0表示该段后面没有数据了,故如果没有收到MF=0的段则说明最后这一段丢失了。
  • OFFSET只记录了数据部分的偏移量;(以8个字节为单位)
  • 当目的主机收到该数据报的所有片段时,会将所有片段进行重组(reassemble),形成原来的数据报;接收第一段的时候即开启超时定时器准备重组数据报,如果到时间还有数据段未传送到,则丢弃该数据报的所有已被接收的片段。重组是按ID重组的。
  • DF(don't fragment):DF=1时表示不将帧划分为段,若该帧的长度大于MTU则路由器接收到的时候会丢弃它,可用于获取MTU。

3、IP数据报的选项

一般格式:

代码 1B

总长度 1B

数据 nB

选项最长为40B,常用的有7——记录路由,格式为:

  • 每个IP地址4个字节 ,故最多只能记录9个(=36B),36+代码1B+长度1B+指针1B=39B,最后一个B可以用0表示选。项列表结束。(记录的是该数据报经过的每个路由器的转出接口的IP地址);
  • 指针用于指向下一个IP地址的位置,同时也指明了记录的IP地址的个数(指针每次+4,当指针为4时表明还没有记录IP地址,若指针=16,则已经记录了3个IP地址)
  • 记录时间戳:一个时间戳4B,IP地址4B,所以最多记录4个(记录转发路由器自身的IP地址和当时时间)
  • 发包的时候可以设置TTL=N,则经过第N个路由器则会发回一个ICMP,这样可得知经过了哪些路由器。

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/D5__J9/article/details/90759182

智能推荐

使用vue的pull-to插件进行分页操作_vue-pull-to umd模式_round123_rr的博客-程序员秘密

1.官网地址:https://github.com/stackjie/vue-pull-to/blob/master/README.zh-CN.md2.安装:npm install vue-pull-to --save3.使用<template scope> <div class="user-page"> <div clas...

oracle 创建临时表空间/表空间,用户及授权_weixin_30367945的博客-程序员秘密

1:创建临时表空间create temporary tablespace user_temp tempfile 'Q:\oracle\product\10.2.0\oradata\Test\xyrj_temp.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; ...

SAP取历史库存(可查询期初期末库存和指定日期之库存)_sap 按期间查询库存_ChampaignWolf的博客-程序员秘密

含仓位之Table:MARD / MARDH        MARD里记载的是当前库存的数量,是实时变化的,但是期间并不一定是当月。比如:当前是2015年11月,料号A在2015年10月初至今都没有库存异动,那么现在看到MARD里料号A的期间数还是2015年09月,而非2015年11月。       当料号A发生异动时,系统将实时更新MARD数据。在更新之前,会检查此异动的过账期间和MARD...

size _t 类型介绍_freertos size_t类型_ADHERENTS的博客-程序员秘密

size _t为了增强程序的可移植性,便有了size_t,不同系统上,定义size_t可能不一样。经测试发现,在32位系统中size_t是4字节的,在64位系统中,size_t是8字节的,这样利用该类型可以增加程序移植性。...

Android性能优化系列一:启动优化_且听风吟9527的博客-程序员秘密

文章目录黑白屏优化冷/热/暖启动代码未优化造成的问题App启动时间检测方式方式一:adb命令方式二:手动打点启动优化工具选择traceview介绍Systrace介绍优雅获取方法耗时异步优化分析异步优化方案优化-启动器启动器的具体使用更优秀的延迟初始化方案更优方案黑白屏优化黑白屏原因​ 在App的启动流程中,我们已知:当系统加载并启动App时,需要消耗相应的时间,即使不到1s,用户也会感觉...

mongodb基本概念和使用_mongdb是不是结构化数据库_人生如流沙的博客-程序员秘密

一、前言:NOSQL    nosql:即not only sql,区别于应用于RDBMS(关系型数据库)的SQL(结构化查询语言)。SQL主要用于结构化存储的数据的查询与分析操作。而nosql支持类似sql的功能,但是与之相比没有那么多约束,显得更灵活。    nosql通常泛指非关系型数据库,通常分为以下四大类:键值(Key-Value)存储数据库这一类数据库主要会使用到一个哈希表,这个表中有...

随便推点

java 如何清除临时文件_如何删除Java中的临时文件?_Java架构月亮的博客-程序员秘密

java.io包的名为File的类表示系统中的文件或目录(路径名)。此类提供了各种方法来对文件/目录执行各种操作。临时文件在某些情况下,例如单元测试或某些应用程序逻辑,您可能需要创建临时文件。Java中的File类提供了一个名为createTempFile()的方法。此方法接受两个String变量,它们代表临时文件的前缀(起始名称)和后缀(扩展名),以及一个File对象,该变量代表您需要在其中创建...

python之使用functools.partial_function.partial_keyson R的博客-程序员秘密

文章目录`partial`定义`partialmethod`定义partial定义functools.partial 这个高阶函数用于部分应用一个函数。部分应用是指,基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。使用这个函数可以把接受一个或多个参数的函数改编成需要回调的 API,这样参数更少。这是一段引自Fluent Python的代码示例:>>> from operator import mul>>> from functools import

js-xlsx + handsontable + echarts实现excel上传编辑然后显示成图表_noahnee的博客-程序员秘密

js-xlsx + handsontable + echarts 实现在前端导入excel数据并生成echart报表前言最近都在做类似 ERP 的项目,所以呢,又碰到一个比较变态的需求(至少对我来说是),在前端导入 excel 文件,然后在浏览器里面预览和编辑, 最后再选择一些数据,用echarts生成报表.依赖js-xlsx 读取excel数据到jshandsontable 类似Ex...

【Spring Boot】整合 MyBatis-Plus 实现 CRUD 操作_骑着蜗牛ひ追导弹'的博客-程序员秘密

文章目录MyBatis-Plus 实现 CRUD 操作一、什么是MyBatis-Plus1.概述2.特点3.插件功能展示二、整合MyBatis-Plus1.创建数据库环境2.导入mybatis-plus依赖3.创建数据库表实体类Users4.创建UsersMapper接口5.测试补充三、CRUD3.1 查询所有 list()1.UserMapper2.UserService3.UserServiceImpl4.前端控制器实现查询所有展示3.2 分页 page()1.分页框架构建2.修改后端控制器3.修改.

stm32f429 利用stm32cube配置FMC接口_mail-mail的博客-程序员秘密

目录一、为什么使用SDRAM二、SDRAM芯片W9825G6KH三、stm32f4的fmc接口四、stm32cubemx配置fmc五、实验现象:六、源码:七、注意事项:八、参考记录:硬件平台:正点原子阿波罗stm32f429一、为什么使用SDRAMSTM32控制器芯片内部有一定大小的SRAM及FLASH作为内存和程序存储空间,但当程序较大,内存和程序空间...

NSFileHandle简单的读写文件_KumaHuang的博客-程序员秘密

NSString *savepath = [self saveFilePath:@"savepath"]; NSString *outpath = [self saveFilePath:@"outpath"]; NSString *text = @"This is test text in file."; NSData *buffer; if (![fm fileE

推荐文章

热门文章

相关标签