文档章节

5.网际协议版本4

alon龙武
 alon龙武
发布于 2014/11/17 08:49
字数 2512
阅读 88
收藏 7
点赞 0
评论 0

1. 网际协议IP

IP是一种不可靠的无连接数据报协议,一种尽最大努力交付的服务。尽最大努力意味着IP分组有可能损坏、丢失、失序或延迟到达,并且有可能给网络带来拥塞

IP是分组交换网络使用数据报方式的一种无连接协议。意味着每个数据报被独立处理,且各数据报可能沿着不同的路由传送到终点。如果一个源点向一个终点发送多个数据报,可能不按顺序到达,有些数据报在传输过程可能受到损伤或丢失。IP依靠更高层次的协议解决上述问题

 

2. 数据报

网络层的分组称为数据报,一个可变长度的分组,包含首部和数据两个部分。首部的长度可以是20~60字节,包含有关路由选择和交付的重要信息。习惯上,TCP/IP都是以4个字节表示首部

版本:4位比特定义IP协议的版本。首部长度:4位比特定义数据报首部的总长度,以4字节为单位计算。服务类型:指明应当如何处理数据报。总长度:16位比特定义了以字节为单位的数据报总长度(首部+数据)。存在原因:有些情况下,封装在一个帧里的不仅仅是数据报,可能附加一些填充。例如,以太网协议对能够封装在一个帧里的数据限制为46~1500字节。当一个IP数据报的长度小于46字节,必须增加一些填充字节才能满足要求。这种情况下,当主机对这个数据报进行拆装时,必须检查总长度字段,确定数据的真正长度和填充字节的长度

标识、标志和分片偏移:用于分片。生存时间:绝大多数用来控制数据报所经过的最大跳数(路由器)。当源主机发送数据报时存入一个数值。这个数值大约是任意两台主机之间的最大路由器数的两倍。每一个处理数据报的路由器都把这个数值递减1。若减1之后值变为0,路由器丢弃数据报。存在原因:因特网中的路由表可能会损坏,这个字段限制数据报的生存时间;源主机想故意限制分组的行程。协议:8位比特定义使用IP服务的高层协议。指明IP数据报必须交付给哪个最终目的协议,因为IP协议对来自不同高层协议的数据进行复用和分用,所以数据报到达最后终点时,使用这个字段值完成分用过程

 

3. 分片

每个路由器从接收到的数据帧拆解出IP数据报,进行处理,然后封装成另一个帧。接收到的帧格式与长度取决于帧刚刚经过的物理网络使用的协议,而发送出去的帧格式与长度取决于帧将要经过的物理网络使用的协议。不同的物理网络的帧格式与长度是不一样的


3.1 最大传送单元MTU

每个数据链路层协议都有自己的帧格式,格式中有一个字段是”数据字段最大长度”当数据报被封装程成帧时,数据报的总长度必须小于最大长度,由网络使用的硬件和软件的限制确定

对于不同的物理网络协议,MTU的值是不同的。例如以太网局域网的值是1500字节,FDDI局域网的值是4352字节,PPP的值是296字节。为了使IP协议与物理网络无关,设计者决定让IP数据报的最大长度等于65535字节。如果物理网络的MTU小于这个值,那么数据报需要进行分片。当数据报被分片时,每一个数据报片都有自己的首部,其中大部分的字段是重复的,有些是变化的。如果已经分片的数据报遇到更小MTU的网络,已经分片数据报可再次进行分片

数据报可以被源主机或任何路由器分片,数据报的重装只能在目的主机上进行。一方面分片的数据报可以各走不同的路由,无法控制或保证分片的数据报应当走哪一条路径;另一方面,属于同一个数据报的所有数据报分片最终总是会到达目的主机,逻辑上应当在最后终点进行重装;最后,传输期间进行重装会严重影响效率。

数据报分片时,首部一些必要的部分必须复制到所有分片。选项字段可以被复制,也可不被复制。对数据报进行分片的主机或路由器必须改变三个字段的值:标识、分片偏移和总长度。其余各字段必须被复制,不管是否进行分片,校验和的值总是需要重新计算。只有数据报中的数据是分片的


3.2 与分片有关的字段

与一个数据报的分片与重装有关的字段是:标识、标志和分片偏移

标识:16位比特标识了从源主机发出的一个数据报,与源IP地址的组合必须唯一地确定一个数据报。为了保证唯一性,IP协议使用一个计数器为数据报生成标号,初始值是一个正整数。IP协议每发送一个数据报时,计数器的当前值复制到标识字段,同时计数器的值加1数据报分片时,标识字段的值复制到所有的分片。所有的分片具有相同的标识号,终点知道所有相同标识号的分片必须组装成一个数据报

标志:3位比特的字段。第一位保留。第二位是不分片位,1表示不能对数据报进行分片,如果无法通过任何可用的物理网络转发数据报,丢弃数据报,并向源主机发送ICMP差错报文;0表示必要时对数据报进行分片。第三位是还有分片位,1表示数据报不是最后的分片;0表示最后的或唯一的分片

分片偏移:13位比特表示分片在整个数据报中的相对位置。数据在原始数据报中的偏移量,8字节为度量单位。因为分片偏移字段的长度只有13位比特,不能超过8191字节。所以数据报进行分片的主机或路由器选择每一个分片的长度时必须使第一个分片的字节数量能够被8整除

所有分片的标识字段都是一样的。另外,除最后一个分片之外,所有分片的标志字段的“还有分片”位均被置为1。如果分片本身再一次进行分片时,分片偏移值永远是相对于原始数据报的。即使各个分片采取不同的路径失序到达,最终的目的主机也能够用收到的分片重装成原始的数据报,使用策略如下:a.第一个分片的分片偏移字段为0 b.把第一个分片的长度除以8,即第二个分片偏移值 c.把第一个和第二个分片的总长度除以8,即第三个分片偏移值 d.继续以上过程,最后一个分片的“还有分片”位值为0


4. 检验和

绝大多数TCP/IP协议采用的差错检测方法称为检验和。检验和能够防止分组在传输期间出现的损坏。检验和是附加在分组上的冗余信息。发送端计算出检验和,把得到的结果与分组一起发送出去。接收端对包括检验和在内的整个分组重复同样的计算


4.1 发送端计算检验和

在发送端,分组首部划分为n位的段。这些段使用反码算术运算相加,得到的和的长度也是n位。然后把这个和取反码得出检验和。操作步骤:分组划分K段,每段的长度都是n位;反码算术运算累加所有段;最终结果取反码得出检验和


4.2 接收端计算检验和

接收端把收到的分组划分为K段,累加所有段,然后把得到的和取反码。若最后结果为0,则接受分组,否则拒绝分组


4.3 IP分组中的校验和

IP分组中,检验和的实现和上面讨论原理一样。首先,“校验和”字段置为0。然后把整个首部划分为16位的段,再将各个段相加。把结果取反码,并插入到检验和字段。

IP分组中的检验和仅覆盖首部,不包括数据。原因有两个:首先,将数据封装在IP数据报中的所有高层协议,都有一个涉及整个分组的检验和字段。其次,每经过一个路由器,IP数据报的首部需要发生变化,但是数据部分保持不变。如果检验包括数据部分,则每一个路由器必须重复计算整个分组的检验和,意味着需要花费更多的处理时间


© 著作权归作者所有

共有 人打赏支持
alon龙武
粉丝 2
博文 14
码字总数 20481
作品 0
深圳
程序员
规划和安装邮件系统

1.1.1电子邮件系统的组成部分 邮件系统是一套单独的系统,它有自己独立的服务器,目的是传递计算机用户之间的数据。电子邮件系统的做有包括书写,发送,存储和接受四个方面,用户通过邮件服务...

枫晚 ⋅ 2017/05/04 ⋅ 0

TCP/IP四层模型和OSI七层模型

TCP/IP四层模型和OSI七层模型对应表。我们把OSI七层网络模型和Linux TCP/IP四层概念模型对应,然后将各种网络协议归类。 表1-1 TCP/IP四层模型和OSI七层模型对应表 1.网络接口 网络接口把数...

晨曦之光 ⋅ 2012/03/09 ⋅ 0

第 1 章 了解 Web 及网络基础

1.web与http之间的关系 Web 使用一种名为 HTTP(HyperText Transfer Protocol,超文本传输协议 1)的协议作为规范,完成从客户端到服务器端等一系列运作流程。而协议是指规则的约定。可以说,Web ...

Jonson ⋅ 2016/04/10 ⋅ 0

基本网络概念之网络分层

网络通信的不同方面被分解为不同的层。每一层表示为物理硬件与所传输信息之间的不同抽象层次。在理论上,每一层只与紧挨其上和其下的层对话。将网络分层,这样就可以修改甚至替换某一层的软件...

柳哥 ⋅ 2014/10/04 ⋅ 0

android ------- TCP/IP

TCP/IP 是针对因特网的通信协议。 什么是 TCP/IP? TCP/IP 是供已连接因特网的计算机进行通信的通信协议。 TCP/IP 指传输控制协议/网际协议 (Transmission Control Protocol / Internet Prot...

切切歆语 ⋅ 04/20 ⋅ 0

基本网络概念之网络分层的各层介绍

主机网络层 在基于IP的Internet(Java唯一真正理解的网络)的标准参考模型中,网络中隐藏的部分属于主机网络层(host-to-work layer,也称为链路层、数据链路层或网络接口层)。主机网络层定义...

柳哥 ⋅ 2014/10/04 ⋅ 0

TCP/IP 协议简介

TCP/IP是Transmission Control Protocol and Internet Protocol的简写,翻译为“传输控制协议/网际互联协议”。1973年,斯坦福大学的两名研究员提出了TCP/IP协议,该协议在10年后被UNIX采用,...

Elvin_Wang ⋅ 2015/03/24 ⋅ 0

Group-Office 3.7.18 发布

该版本增加对 S/MIME (多用途网际邮件扩充协议 Secure Multipurpose Internet Mail Extensions)签名和加密的支持,其他还有一些小的改进和bug修复。 Group-Office 是一个基于Web的办公套件,...

红薯 ⋅ 2011/05/20 ⋅ 0

计算机专业笔试题

1、const char, char const, charconst的区别问题: Bjarne在他的The C++ Programming Language里面给出过一个助记的方法: 把一个声明从右向左读 char const cp; // ( 读成 pointer to ) cp ...

_子墨 ⋅ 2014/09/29 ⋅ 0

PHP 6 即将发布 更强大的本地化及Web 2.0支持

PHP下一个备受关注的版本6.0,已经进入snapshot阶段,不久即将发布。PHP 6.0将包含很多新的特性、语法改进,会让面向对象编程更加简单,另外还有很多重要的改进,比如Unicode的核心支持,这将...

红薯 ⋅ 2010/06/17 ⋅ 12

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android JNI 读写Bitmap的方法

Java层创建Bitmap,通过JNI将Bitmap传到C/C++进行处理 Java部分 public static native boolean greenBitmap(Bitmap bitmap); C/C++部分 JNIEXPORT jboolean JNICALL Java_com_test_Test_gree......

国仔饼 ⋅ 22分钟前 ⋅ 0

一次性让你懂async/await,解决回调地狱

什么是async? 欢迎留言讨论 async 函数是 Generator 函数的语法糖。使用 关键字 async 来表示,在函数内部使用 await 来表示异步。相较于 Generator,async 函数的改进在于下面四点: 内置执...

阿K1225 ⋅ 23分钟前 ⋅ 0

angular常用命令

.下载更新操作 1.利用npm下载angular的命令行工具AngularCLI: npm install -g @angular/cli 2.下载jquery: npm install --save jquery 3.更新npm: npm i -g npm 4.更新angular: ng update ......

消散了的诗意 ⋅ 25分钟前 ⋅ 0

window.print 页面打印

定义和用法 print() 方法用于打印当前窗口的内容。 语法 window.print(); window.print() 实际上,是浏览器打印功能菜单的一种程序调用。与点击打印功能菜单一样,不能精确分页,不能设置纸型...

初学者的优化 ⋅ 26分钟前 ⋅ 0

魔兽世界 7.0版本上 PVE装备全攻略

  T套 因为大家应该都会打穿副本的所以具体是哪个boss我就不说了。   T1: 所有套装都在【熔火之心】出   T2: 头原来是在【奥妮克希亚的巢穴】改到黑翼之巢的奈法利安了,腿是在【熔火之...

wangchen1999 ⋅ 26分钟前 ⋅ 0

java.math.BigDecimal使用小结

原文地址 java.math.BigDecimal使用小结 divide方法 使用BigDecimal.divide方法时一定要考虑: 除数是否为0 商是否是无限小数 正确的使用方式 判断除数是否为0,是0做另外的处理逻辑 调用除法...

666B ⋅ 29分钟前 ⋅ 0

关于qstring转char乱码问题。

if (OpenClipboard(NULL)) { HGLOBAL hgClip; EmptyClipboard(); QByteArray byay = FValue.toLocal8Bit(); //转latin编码 char *bochsrc_line = byay.data(); hgClip = GlobalAlloc(GMEM_DD......

backtrackx ⋅ 29分钟前 ⋅ 0

了解SSH加密和连接过程

介绍 SSH或安全shell是安全协议,也是安全管理远程服务器的最常用方式。通过使用多种加密技术,SSH提供了一种机制,用于在双方之间建立加密安全连接,对彼此进行身份验证,以及来回传递命令和...

吴伟祥 ⋅ 36分钟前 ⋅ 0

微信小程序

小程序的全局配置app.json 微信小程序的全局配置保存在app.json文件中。开发者通过使用app.json来配置页面文件(pages)的路径、窗口(window)表现、设定网络超时时间值(networkTimeout)以...

上官清偌 ⋅ 39分钟前 ⋅ 0

【转】百度坐标坐标系之间的转换(JS版代码)

/** * Created by Wandergis on 2015/7/8. * 提供了百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换 *///定义一些常量var x_PI = 3.1415926535897932...

HAVENT ⋅ 40分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部