网络:IP协议与寻址
TCP/IP协议族中最核心的协议,提供不可靠、无连接的数据报传输服务。
· 不可靠:不能保证IP数据报能成功送达。
· 无连接:并不维护后续数据报的状态信息,每个数据报的处理都是相互独立。数据报可能不会按照发送顺序接收。同一站点向另一站点发送的多个数据报可能经过不同的路由到达。
帧格式
IP数据报格式如下。
IP包头字段说明
版本:4位,指定IP协议的版本号。
包 头长度(IHL):4位,IP协议包头的长度,指明IPv4协议包头长度的字节数包含多少个32位。由于IPv4的包头可能包含可变数量的可选 项,所以这个字段可以用来确定IPv4数据报中数据部分的偏移位置。IPv4包头的最小长度是20个字节,因此IHL这个字段的最小值用十进制表示就是5 (5x4 = 20字节)。就是说,它表示的是包头的总字节数是4字节的倍数。
IP协议包头最长:20+40 = 60字节 正好等于:15*4 = 60
服务类型:定义IP协议包的处理方法,它包含如下子字段
过程字段:3位,设置了数据包的重要性,取值越大数据越重要,取值范围为:0(正常)~ 7(网络控制)
延迟字段:1位,取值:0(正常)、1(期特低的延迟)
流量字段:1位,取值:0(正常)、1(期特高的流量)
可靠性字段:1位,取值:0(正常)、1(期特高的可靠性)
成本字段:1位,取值:0(正常)、1(期特最小成本)
未使用:1位
长度:IP包的总长
认证:
标志:是一个3位的控制字段,包含:
保留位:1位
不分段位:1位,取值:0(允许数据报分段)、1(数据报不能分段)
更多段位:1位,取值:0(数据包后面没有包,该包为最后的包)、1(数据包后面有更多的包)
段偏移量:当数据分组时,它和更多段位(MF, More fragments)进行连接,帮助目的主机将分段的包组合。
TTL:表示数据包在网络上生存多久,每通过一个路由器该值减一,为0时将被路由器丢弃。
协议:8位,这个字段定义了IP数据报的数据部分使用的协议类型。常用的协议及其十进制数值包括ICMP(1)、TCP(6)、UDP(17)。
校验和:16位,是IPv4数据报包头的校验和。
源IP地址:
目的IP地址:
选项(IP Options):本书不讨论。
填充(Padding):当IP报文头长度不是32比特的整数倍时,填充0来凑齐32比特整数倍,没有实际意义。
数据(Data):来自第4层的数据段。
IPv4的头部结构如图2-1所示。其长度通常为20字节,除非含有可变长的选项部分。
4位版本号(version)指定IP协议的版本。对IPv4来说,其值是4。其他IPv4协议的扩展版本(如SIP协议和PIP协议),则具有不同的版本号(它们的头部结构也和图2-1不同)。
4位头部长度(header length)标识该IP头部有多少个32bit字(4字节)。因为4位最大能表示15,所以IP头部最长是60字节。
8位服务类型(Type Of Service,TOS)包括一个3位的优先权字段(现在已经被忽略),4位的TOS字段和1位保留字段(必须置0)。4位的TOS字段分别表示:最小延 时,最大吞吐量,最高可靠性和最小费用。其中最多有一个能置为1,应用程序应该根据实际需要来设置它。比如像ssh和telnet这样的登录程序需要的是 最小延时的服务,而文件传输程序ftp则需要最大吞吐量的服务。
16位总长度(total length)是指整个IP数据报的长度,以字节为单位,因此IP数据报的最大长度为65535(216-1)字节。但由于MTU的限制,长度超过MTU 的数据报都将被分片传输,所以实际传输的IP数据报(或分片)的长度都远远没有达到最大值。接下来的3个字段则描述了如何实现分片。
16位标识(identification)唯一地标识主机发送的每一个数据报。其初始值由系统随机生成;每发送一个数据报,其值就加1。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片都具有相同的标识值。
3位标志字段的第一位保留。第二位(Don’t Fragment,DF)表示“禁止分片”。如果设置了这个位,IP模块将不对数据报进行分片。在这种情况下,如果IP数据报长度超过MTU的话,IP模 块将丢弃该数据报并返回一个ICMP差错报文。第三位(More Fragment,MF)表示“更多分片”。除了数据报的最后一个分片外,其他分片都要把它置1。
13位分片偏移(fragmentation offset)是分片相对原始IP数据报开始处(仅指数据部分)的偏移。实际的偏移值是该值左移3位(乘8)后得到的。由于这个原因,除了最后一个IP分 片外,每个IP分片的数据部分的长度必须是8的整数倍(这样才能保证后面的IP分片拥有一个合适的偏移值)。
8位生存时间(Time To Live,TTL)是数据报到达目的地之前允许经过的路由器跳数。TTL值被发送端设置(常见的值是64)。数据报在转发过程中每经过一个路由,该值就被路由器减1。当TTL值减为0时,路由器将丢弃数据报,并向源端发送一个ICMP差错报文。TTL值可以防止数据报陷入路由循环。
8位协议(protocol)用来区分上层协议,我们在第1章讨论过。/etc/protocols文件定义了所有上层协议对应的protocol 字段的数值。其中,ICMP是1,TCP是6,UDP是17。/etc/protocols文件是RFC 1700的一个子集。
16位头部校验和(header checksum)由发送端填充,接收端对其使用CRC算法以检验IP数据报头部(注意,仅检验头部)在传输过程中是否损坏。
32位的源端IP地址和目的端IP地址用来标识数据报的发送端和接收端。一般情况下,这两个地址在整个数据报的传递过程中保持不变,而不论它中间经过多少个中转路由器。关于这一点,我们将在第4章进一步讨论。
IPv4最后一个选项字段(option)是可变长的可选信息。这部分最多包含40字节,因为IP头部最长是60字节(其中还包含前面讨论的20字节的固定部分)。可用的IP选项包括:
记录路由(record route),告诉数据报途经的所有路由器都将自己的IP地址填入IP头部的选项部分,这样我们就可以跟踪数据报的传递路径。
时间戳(timestamp),告诉每个路由器都将数据报被转发的时间(或时间与IP地址对)填入IP头部的选项部分,这样就可以测量途经路由之间数据报传输的时间。
松散源路由选择(loose source routing),指定一个路由器IP地址列表,数据报发送过程中必须经过其中所有的路由器。
严格源路由选择(strict source routing),和松散源路由选择类似,不过数据报只能经过被指定的路由器。
关于IP头部选项字段更详细的信息,请参考IP协议的标准文档RFC 791。不过这些选项字段很少被使用,使用松散源路由选择和严格源路由选择选项的例子大概仅有traceroute程序。此外,作为记录路由IP选项的替 代品,traceroute程序使用UDP报文和ICMP报文实现了更可靠的记录路由功能,详情请参考文档RFC 1393。
IP路由选择
对于主机,如果目的主机和源主机直接相连,或者处于同一个网络中,IP数据报就直接发送到目的主机。否则,主机将数据报发送给默认的路由器,由路由器来转发包。
IP层可以配置成路由器的功能,也可以配置成主机功能。区别是,主机不转发数据报,而路由器需要转发包。
IP层在内存中都有一个路由表,当收到数据报进行发送时,都要搜索该表。
路由表每项包含的信息:
· 目的IP地址。可以是主机地址,也可以是网络地址,由下述的标志来标示。
· 下一跳路由器的IP地址,或者是直接连接的接口。
· 标志。一个标志标示目的IP是网路地址还是主机地址,另一个标志指示下一站路由器是否为真正的下一站路由器,还是一个直连的接口。
· 为数据报的传输指定一个网络接口。
IP路由选择主要完成下面的功能:
1) 搜索路由表,寻找与目的IP完全匹配的条目。如果找到,则把报文发给下一站路由或者直连接口(取决于标志字段的值)
2) 搜索路由表,寻找与目的网络号匹配的条目。找到的处理同上。这种搜索网络的匹配方法必须考虑可能的子网掩码。
3) 搜索路由表,寻找标为“默认(default).类似192.168.0.1”的条目。如果找到,处理同上。
如果上述都没成功,则丢弃该包,并返回主机不可达或者网络不可达的错误。
数据包在传输过程中,经过不同的链路层或不同的网络会构造不同的链路层首部,但是IP部分不会更改(忽略路由器的NAT功能)。链路层的目的地址(如果有的话),始终是下一站的链路层地址。
子网寻址
最早:IP地址 = 网络号 + 主机号
子网编址:IP地址 = 网络号 + 子网号 + 主机号
子网对于子网以外的路由器都是透明的,对于子网内部的路由器不透明。
RFC 1009允许含有子网的一个网络使用多个子网掩码。
IP地址编址方案:将IP地址划分为A,B,C,D,E五类,其中A,B,C为基本类,D,E类作为多播和保留使用。
网络类别 |
最大网络数 |
IP地址范围 |
最大主机数 |
私有IP地址范围 |
A |
126(2^7-2) |
1.0.0.0--126.255.255.255 |
16777214 |
10.0.0.0--10.255.255.255 |
B |
16384(2^14) |
128.0.0.0--191.255.255.255 |
65534 |
172.16.0.0--172.31.255.255 |
C |
2097152(2^21) |
192.0.0.0--223.255.255.255 |
254 |
192.168.0.0--192.168.255.255 |
内部私有地址:
A类 10.0.0.0--10.255.255.255
B类 172.16.0.0--172.31.255.255
C类 192.168.0.0--192.168.255.255
特殊的IP地址:
0表示所有的比特为0,-1表示所有的比特位全为1,netid、subnetid和hostid分别表示不为全0或全1的对应字段。子网号栏为空表示该地址没有进行子网划分。
一、概念
将IP地址中的主机号再分成一个子网号和主机号。而不是把IP地址看成单纯的网络号+主机号。举例来说:一个B类网络地址,网络位为16位,主机位为16位。若划分子网则需要对这16主机位继续进行划分,比如在这16bit中将8bit用于子网号,8bit用于主机号,那么就允许有254个子网,每个子网可以有254台主机(由于全0或全1的主机号都是无效的,因此为256-2=254)。
二、特点
子网对外部路由器来说隐藏了内部网络组织的细节。比如在一个所有IP地址都有一个B类网络号140.252的网络例子中,划分30个子网(140.252.1.X~140.252.30.X),每个子网上拥有一定数量的主机。与直接使用30个C类地址相比,使用子网寻址功能的好处就是可以缩小Internet路由表的规模。B类地址140.252被划分成子网对除了140.252子网之外的Internet路由器来说都是透明的。如果这里最终访问外部Internet的地址是通过 gateway IP地址140.252.104.1进行的,那么为了到达任何以140.252开头的主机,外部路由器仅需要知道到达IP地址140.252.104.1的路径,这意味着对于整个140.252网络仅需要一条路由表项。而不是像30个C类地址需要30个路由表项那样。
PS: 子网划分对于子网内的路由器是不透明的。至于如何到达路径,则是根据IP路由选择进行的。
IP地址
每个计算机必须有一个 IP 地址才能够连入因特网。
每个IP 包必须有一个地址才能够发送到另一台计算机。
IP标识网络中的节点主机,端口号标识节点主机的进程。
IP 地址包含 4 组数字:
TCP/IP 使用 4 组数字来为计算机编址。每个计算机必须有一个唯一的 4 组数字的地址。
每组数字必须在 0 到 255 之间,并由点号隔开,比如:192.168.1.60。
32 比特 = 4 字节
TCP/IP 使用 32 个比特来编址。一个计算机字节是 8 比特。所以 TCP/IP 使用了 4 个字节。
一个计算机字节可以包含 256 个不同的值:
00000000、00000001、00000010、00000011、00000100、00000101、00000110、00000111、00001000....... 直到 11111111。
现在,您应该知道了为什么 TCP/IP 地址是介于 0 到255 之间的 4 组数字。
IP V6
IPv6 是 "Internet Protocol Version 6" 的缩写,也被称作下一代互联网协议,它是由 IETF 小组(Internet 工程任务组Internet Engineering Task Force)设计的用来替代现行的IPv4(现行的)协议的一种新的 IP 协议。
我们知道,Internet 的主机都有一个唯一的 IP 地址,IP 地址用一个 32 位二进制的数表示一个主机号码,但 32 位地址资源有限,已经不能满足用户的需求了,因此 Internet 研究组织发布新的主机标识方法,即 IPv6。
在RFC1884 中(RFC 是 Request forComments document 的缩写。RFC 实际上就是Internet 有关服务的一些标准),规定的标准语法建议把 IPv6 地址的 128 位(16 个字节)写成 8 个 16 位的无符号整数,每个整数用 4 个十六进制位表示,这些数之间用冒号(:)分开,例如:3ffe:3201:1401:1280:c8ff:fe4d::db39。
域名
12 个阿拉伯数字很难记忆。使用一个名称更容易。
用于 TCP/IP 地址的名字被称为域名。w3cschool.cc 就是一个域名。
当你键入一个像 http://www.w3cschool.cc 这样的域名,域名会被一种 DNS 程序翻译为数字。
在全世界,数量庞大的 DNS 服务器被连入因特网。DNS 服务器负责将域名翻译为 TCP/IP 地址,同时负责使用新的域名信息更新彼此的系统。
当一个新的域名连同其 TCP/IP 地址一起注册后,全世界的 DNS 服务器都会对此信息进行更新。
网络:IP协议与寻址相关推荐
- Linux网络-IP协议
文章目录 零.前言 一.网络层 理解路由选择 二.IP协议 三.网段划分 四.IP地址数量限制 五.私有和公网IP地址 NAT技术 六.路由 零.前言 本章主要讲解学习网络层的作用, 深入理解IP协议 ...
- 网络-IP协议详解(报文格式、分类、NAT、子网、CIDR、抓包分析)
目录 简介 报文格式 IPv4地址 分类 网络地址转换NAT 子网划分与子网掩码 CIDR 实战 参考 简介 IP(网际互连协议,Internet Protocol)是TCP/IP协议族中最为核心的协 ...
- TCP/IP协议簇简介
参考: https://blog.csdn.net/wuzhiwei549/article/details/105965493 https://blog.csdn.net/weixin_4419896 ...
- 网络层IP协议—ipv4
什么是IP协议? IP 协议(Internet Protocol)是一个处于垄断地位的网络层协议. IPv4 就是 IP 协议的第 4 个版本,是目前互联网的主要网络层协议.IPv4 为传输层提供 H ...
- 计算机网络-网络层篇-IP协议
目录 虚拟互连网络 IP地址 回顾一下 IP协议的转发流程 虚拟互连网络 实际的计算机网络是错综复杂的 物理设备通过使用IP协议,屏蔽了物理网络之间的差异 当网络中的主机使用IP协议连接时,则无需关注 ...
- 网络协议——TCP/IP协议
简介: TCP(传输控制协议)和 IP(网际协议)是两个独立且紧密结合的协议,负责管理和引导数据报文在 Internet上的传输.二者使用专门的报文头定义每个报文的内容.TCP 负责和远程主机的连接, ...
- 网络编程基础之C/S架构和TCP/IP协议
一.何谓C/S架构 C指的是client(客户端软件),S指的是Server(服务端软件),既然我们的的标题是网络编程基础, 那我们就一起来学习怎样写一个C/S架构的软件,实现服务端与客户端软件基于网 ...
- 网络基础知识-TCP/IP协议各层详解
TCP/IP简介 虽然大家现在对互联网很熟悉,但是计算机网络的出现比互联网要早很多. 计算机为了联网,就必须规定通信协议,早期的计算机网络,都是由各厂商自己规定一套协议,IBM.Apple和Micro ...
- 网络编程-TCP/IP协议栈-IP协议
协议 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<-等,以此作为游戏规则.当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进行游戏,这个 ...
最新文章
- android仿ios城市选择,Android 省市区三级联动选择器(仿iOS滚轮实现)
- 2016/07/11 常用正则表达式大全 (转)
- baseline发布!OPPO安全AI挑战赛,人脸识别对抗攻击赛题详解
- XVII Open Cup named after E.V. Pankratiev. GP of Tatarstan
- php定时某个时间循环做,PHP定时循环执行脚本
- 阿尔法贝塔阀原理_图总结 - 阿尔法个贝塔 - 博客园
- 百度地图SDK使用注意其代理的处理
- java数据类型double保留两位小数
- 如何删除github上的文件
- 手把手教你进行R语言的安装及安装过程中相关问题解决方案...
- DragSortListView可拖拽ListView的注意事项
- 软考:软件设计师(历年真题汇总)|希赛网
- postman接口测试
- 使用JFlash往Nordic nRF系列芯片烧写程序
- JavaScript:实现PigeonHoleSort鸽巢排序算法(附完整源码)
- 计算机硬盘电源接口,硬盘电源接口图解
- 程序员土豆原创诗四首回顾
- miui11升级鸿蒙,MIUI11稳定版首批推送来了 12款小米机型可升级
- vue导出excel文件损坏
- Booth(布斯)算法——补码乘法运算过程