网际协议(IP)

协议介绍

IP (Internet Protocol)协议是TCP/IP最核心的协议,它承载着TCP,UPD,ICMP,IGMP等协议的数据传输功能,计算机网络路由机制的核心协议。
RFC 791定义IP首部格式如下图:
4位版本:值位4表示IPV4,现在还有IPV6。
4位首部长度:单位DWORD(4字节),最大首部长度为60(15*4)字节。
IP最小首部长度为20字节,因此IP首部选项最多40字节。
8位服务类型:不常用,参见RFC 1349对其对说明。
16位总长度: 单位Byte(字节),包括IP首部长度和IP数据长度,最大长度65535。
16位标识:是每个IP数据包的唯一标识,对于需要分片的IP报文,每个分片的标识是一致的。
3位标记: 第一位未使用。
第二位DF(不允许分片),路径MTU发现机制使用IP这一特性。
第三位MF (是否有更多分片),IP报文分片时,除最后一个分片不设置该标记,其他分片设置该标记为1。
13位偏移:是指当前分片在整个IP报文中的位置,比如0表示是第一个IP分片。
8位生存时间:每经过一个路由器减1,防止广播风暴,目前常用64。
8位协议:区分上层协议,比如ICMP,IGMP,TCP,UDP。
16位首部校验和:交换IP首部数据是否正确。
32位源IP地址: 源端IP地址。
32位目的IP地址:目的端IP地址。
选项:不常用。可选择如下项。
安全和处理限制、记录路径、时间戳、宽松的源站路由、严格的源站路由。
IP地址为我们所熟知,通常使用点分十进制表示,譬如我的主机IP地址为(192.168.1.104),一个看似简单的数字却包含了不少学问。
1)IP地址可以按照网络类型进行划分,还可以在网络号上进行子网划分。
2)IP是路由的基础,路由机制又涉及更多机制,ARP, 路由表,ICMP重定向,动态选路等等。
3)有了IP协议和路由机制,可以让主机互相进行通讯,发展后来出现安全隐患,人们开始建立安全意识,就有了防火墙、NAT、DMZ等等安全措施,
这些衍生功能都建立在IP协议的基础之上。随着这些衍生功能又发展了更多的应用层协议DNS、DDNS、UPNP、DHCP等等。
可以说IP协议是网络的核心,本章只是初识IP协议,更多IP协议的详细分析会在后面的章节陆续进行阐述。

ICMP协议

协议介绍

ICMP(Internet Control Message Protocol)Internet控制报文协议。 基于IP协议,提供网络控制的服务,TCP、UDP等都会使用该协议控制报文进行对应处理。ICMP协议又服务于IP协议,比如网络重定向、需要进行分片导致传输失败、子网掩码获取等等。因此ICMP协议定位为网络层协议是比较合适的。经典的ping,traceroute命令就是基于ICMP协议进行开发的客户端。
RFC 792定义ICMP首部格式如下图:
8位类型:描述不同的ICMP控制。
8为代码:相同类型的ICMP分为不同的代号。
16为校验和: 检测整个ICMP报文的数据一致性。
数据部分:根据不同类型,数据部分长度不同。
下图列举ICMP的类型和代码。

应用

ping

ping命令主要用途是用于测试目的主机是否可达到,ping的请求ICMP类型0,代码0,回应类型8,代码0。大多数情况下可以使用ping命令检测对方主机是否可达到,为什么说是大多数,出于安全性的目的,会禁止对ping的请求进行应答,防止主机IP地址暴露。
ping命令还可以用于测试达到对方主机的往返时间,用于验证网络情况好坏。
ping命令可以使用IP记录路径选项的功能,获得达到对方主机所经过路由器的IP地址。ping命令也可以使用IP时间戳选项的功能记录路径路由器的时间戳。
如果网络不可达到、主机不可达到、端口不可达到会使用ICMP协议返回一个差错报文,这个是上层协议经常使用到的ICMP报文。

traceroute

traceroute命令主要用途是跟踪达到目的主机经过的路由选择。实际上ping利用IP记录路径也可以实现相同工作,为什么traceroute还需要支持该功能?
原因在于IP记录路径有两点限制,一是有些路由器可以不实现该功能,二是记录IP路由地址存放在IP首部,IP首部只有40个字节可供使用,去掉4个字节的记录路径选项,最多可以记录9个IP地址。
traceroute跟踪达到目的主机的原理是这样的,通过设置IP头部的TTL字段,依次设置TTL值为1,2。。。,由于路由器检测到TTL值为1时就会产生一个ICMP报文,类型11,意为超时,如此就能够通过ICMP报文的源地址获得路由器的地址,因此可以依次获取到第一跳,第二跳。。。的路由地址,但是应该如果判断目的地址已经达到目的主机了呢?traceroute还需要发送一个UDP报文,端口是一个随机的较大值,假设目的主机没有利用该端口,会回复一个ICMP报文,类型3,代码3,意为端口不可达到。如此可以通过ICMP端口不可达到的报文获得对方的IP地址,如果IP地址和目的地址一致,则表示寻路结束。
traceroute命令还可以用于发现路径MTU,上一讲提到过路径MTU概念,路径MTU同样重要,如果中间路由器不主动进行IP分片,它可能影响到报文是否能够送达,就算中间路由器进行IP分片,不影响包的达到,那还是会影响到传输效率。
traceroute发现路径MTU的原理是这样的,通过设置IP头部标记DF(不允许分片),发送源端MTU大小的报文,如果中间路由有MTU小于该值,并且判断出DF标记,会向源主机发送一条ICMP报文,类型3,代码4,意为不分片无法通过。并且有些路由器会返回它的MTU值,如此源端获得这条iCMP报文后会使用返回的MTU大小进行再次尝试,直到不再产生由于不分片无法通过的ICMP报文。

广播与多播

有时我们需要向同一网络的所有主机发送报文,这就是广播,上一讲的ARP,RARP的请求就是广播。但是也有这样的需求,向网络的一部分主机发送报文,就不适合使用广播,因为使用广播的话,那些并不关心该广播报文的主机却要处理报文,实在是浪费,因此可以使用多播。

广播

广播主要分为下面四种IP地址类型,我们依次进行介绍。
1)受限的广播
受限的广播地址为255.255.255.255。该地址用于主机启动过程,此时主机还不知道自己的IP和网络掩码。理论上路由器收到该类型的广播后,不在进行广播,使它只出现本地网络内。
2)指向网络的广播
指向网络的广播地址主机号全为1。比如A类网络的广播是 *.255.255.255。C类网络则是*.*.*.255。
3)指向子网的广播
假设B类网络是128.1.0.0,划分一个子网为128.1.1.0,子网掩码就是255.255.255.0。如此改子网的广播地址就是128.1.1.255。
4)指向所有子网的广播
还是上面的那个例子,如果划分了子网128.1.1.0,子网掩码是255.255.255.255,那么指向子网的广播地址,子网号和主机号全为1,因此128.1.255.255就是所有子网的广播地址。
例子:
我的主机号192.168.1.104,网络号192.168.1.0,网络掩码是255.255.255.0。是一个局域网,没有划分子网,因此可以使用192.168.1.255进行局域网内广播。
ping 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.104: icmp_seq=0 ttl=64 time=0.061 ms
64 bytes from 192.168.1.1: icmp_seq=0 ttl=64 time=27.772 ms
64 bytes from 192.168.1.100: icmp_seq=0 ttl=64 time=263.093 ms
64 bytes from 192.168.1.104: icmp_seq=2 ttl=64 time=0.167 ms
64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=4.617 ms
64 bytes from 192.168.1.100: icmp_seq=2 ttl=64 time=97.854 ms
^C
--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +4duplicates, 0.0% packet loss

发现除了自己有回复外,路由器1.1,另一台主机1.100都对其进行回复。

应用案例:
我们公司有一个实际使用广播的案例,我们公司的产品型号有很多种,提供客户一全套的解决方案,假设产品都在同一个局域网内,如何获取到局域网内我公司的产品和产品类型呢?这就是一个比较适合使用广播的应用场景,开发了一个XXXSearch的客户端,向局域网内发送广播报文,有对应报文格式,公司的每种产品都必须接收广播报文并且进行处理,返回自己的型号等等信息。

多播

IP地址分为(A,B,C,D,E)五类,多播属于D类IP地址。D类地址的划分是最高字节的前4个bit是1110,多播组ID为28位,如下图。
根据D类IP地址规则,多播组的地址范围是224.0.0.0 - 239.255.255.255。
一些多播组地址被IANA确定为知名地址,被当做永久主机组。例如224.0.0.1代表“该子网内的所有系统组”,224.0.0.2代表“该子网内的所有路由器”,224.0.1.1用于网络时间协议NTP。
多播理论上可以划分2的28次方个多播组,每个多播组可以让主机自由的加入和退出,这就涉及到后续的IGMP协议。
多播实际上是对广播的一种补充,形成一个主机组,如果主机组内的主机相互通信就可以使用多播进行,而不至于影响其他不在多播组内的其他主机的性能。多播还可以在使两个不同网络的主机加入到一个多播组,实现不同网络上主机的交互。
应用案例:
我们公司一个实际的多播多播案例,在同一个局域网内,有N个视频源(实时视频流),有M个客户端(用户),当有M个客户端同时播放同一个视频源时,最差的实现方式是发出M路视频流,其次的方案是可以利用服务器,负载均衡的分发出视频源,更好的方案可以利用客户端P2P互相传输(互联网时经常使用),我们提供一套方案就是将M个客户端和这个视频源加入一个多播组,然后由视频源发送多播报文,M个用户能够同时收到该视频源的实时流(局域网内很有效),可以很好的减少局域网内的网络流量。

IGMP协议

协议介绍

IGMP (Internet Group Management Protocol) Internet组管理协议,基于IP协议,用于管理主机的多播组。
RFC 1112定义IGMP协议首部格式如下图:
4位版本:目前该值为1。
4位类型: 1为查询报文,2为报告报文。
16校验和:校验IGMP数据一致性。
32组地址:多播组地址。
主机如何加入和退出多播组:
1)当第一个进程加入组时,主机就发送一个IGMP报告。如果有多个进程加入同一个组,只需发送一次即可,路由器只关心是否有主机加入了多播组。
2)进程离开时无需发送任何报文,如果所有进程都离开,那么路由器发送组查询报文时,不对其进行报告即可。
3)多播路由器定时发送IGMP查询来了解是否还有主机还属于多播组。多播路由器必须对每个接口都进行查询,查询报文的组地址被设置为0,表示查询主机所有的多播组。
4)主机通过发送报告相应多播路由器的查询请求,对至少有一个进程加入的多播组均要报告。
多播路由对每个接口保存一直记录表,记录是否还存在一个主机属于该多播组,如果存在,收到多播报文时就通过该接口转发多播报文,以到达向另一个网络传输的功能。
其工作原理如下图:

小结

本章主要介绍了IP协议,重点介绍ICMP协议及其应用,广播和多播简单的入门概念讲解,IGMP作为多播协议的基础进行介绍。实际上可以大致的看出网络层协议主要负责工作和其分工,为日后使用上层协议打好基础。IP协议作为核心协议,主要分析IP协议的首部字段,IP主要工作,并没有深入的对其进行讲解,后续会陆续的进行各个击破,如果没有站在一个更高的抽象层面去看待网络协议,就无法领略网络协议的全貌。所以我计划几个章节对网络协议进行一个概况,不一定面面俱到,希望可以将描绘整张蓝图。

参考

《TCP/IP详解-协议》卷一     W.Richard Stevens

修订

初稿                                       2014-10-25                Simon

计算机网络协议第三章,网络层协议相关推荐

  1. JavaWeb --第三章 HTTP协议详解

    JavaWeb --第三章 HTTP协议详解 Http 什么是HTTP HTTP: 超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常 ...

  2. 第三章 计算机网络技术,计算机网络技术第三章习题

    计算机网络技术第三章习题 1.网络协议是指网络数据交换而制定的规责.约定与标准的集合,它由______._______.________三部分组成 2.计算机网络采用_______的体系结构,网络中两 ...

  3. 《计算机网络》第三章作业

    <计算机网络>第三章作业 复习题 R3 考虑在主机A和主机B之间有一条TCP连接.假设从主机A传送到主机B的TCP报文段具有源端口号x和目的端口号y.对于从主机B传送到主机A的报文段,源端 ...

  4. 计算机网络:第三章 数据链路层

    数据链路层中使用的信道主要有以下两种类型: 点对点信道:这种信道使用一对一的点对点的通信方式. 广播信道:这种信道使用一对多的广播通信方式. 3.1 使用点对点信道的数据链路层 3.1.1 数据链路和 ...

  5. 【计算机网络】第三章 数据链路层的共同问题、点对点协议PPP

    文章目录 3 数据链路层 3.1 数据链路层的共同问题 3.2 点对点协议PPP (Point to Point Protocol) 3.2.1 PPP协议的特点 3.2.2 PPP帧的格式 3 数据 ...

  6. 计算机网络安全技术(第3版)pdf,《计算机网络安全技术第三章》.pdf

    <计算机网络安全技术第三章>.pdf 第三章 对称密码技术 3 .1 密码学的基本概念 密码是一门古老的技术,它已有几千年的历史,自从人类 社会有了战争就出现了密码,但1949年以前的密码 ...

  7. 网络协议(三) HTTP协议

    网络协议(三) HTTP协议 1. HTTP协议简介 2. HTTP协议基础 2.1 TCP/IP协议 5. HTTP协议 5.1 HTTP简介 5.2 HTTPS 简介 5.3 HTTPS 和HTT ...

  8. 什么是计算机网络协议叙述协议的三要素,网络协议的含义及三要素是什么

    什么是网络协议?相信很多人都会疑惑,下面是小编整理的一些关于网络协议的相关资料,供你参考. 网络协议介绍 网络协议为计算机网络 中进行数据交换而建立的规则.标准或约定的集合.例如,网络中一个微机用户和 ...

  9. 王道考研 计算机网络笔记 第三章:数据链路层

    本文基于2019 王道考研 计算机网络: 2019 王道考研 计算机网络 个人笔记总结 第一章:王道考研 计算机网络笔记 第一章:概述&计算机网络体系结构 第二章:王道考研 计算机网络笔记 第 ...

最新文章

  1. 8G+256G固态笔记本,结合这款IDEA插件,写代码飞起!
  2. Splunk高管:中国才有真正意义的大数据
  3. 计算机辅助分析及应用论文,故障树计算机辅助分析及应用研究-机械制造及自动化专业论文.docx...
  4. Django 应用分库,数据迁移成功,数据库没有生成表
  5. 朋友易得 ,知已难求
  6. Python中用正则表达式搜索本地英汉词典,找到具有某种pattern的单词
  7. excel VBA会说话的工作表
  8. linux gpio管脚功能配置API
  9. 部队计算机专业培训申请书,《计算机专业奖学金申请书》.docx
  10. PUG转HTML格式
  11. KITTI下使用SGBM立体匹配算法获得深度图
  12. 2022Mothercup建模比赛
  13. win7系统安装VS 2019
  14. KeyTweak(笔记本键盘设置工具) V2.20 中文版
  15. 视频格式转换器哪个好?用什么软件转换格式
  16. C#的循环控制语句(break,continue)语句
  17. xdoj系统_【战疫情】西电计科院教学在行动(6)——对话全面线上服务的万波老师...
  18. vue项目push 遇到send-pack: unexpected disconnect while reading sideband packetclient_loop: send disconn
  19. Filament 渲染引擎剖析 之 FrameGraph 1 虚拟资源的定义与创建
  20. Varnost slovenskih GSM omrežij III

热门文章

  1. mysql 分批处理数据库_mysql 如何分批 读取数据
  2. 哈工大 计算机系统 大作业
  3. 显式曲线 隐式曲线 曲率公式推导
  4. 我与R语言的相识与相知
  5. Jmeter中写入csv文件时保留 逗号 和 双引号
  6. python爬虫租房信息在地图上显示
  7. 【文本匹配】之 RE2论文详解
  8. kali linux 安装CobaltStrike-4.4
  9. @Query注解及@Modifying注解
  10. rapidjson创建json字符串