IP 协议的相关特性
IP协议
基本概念
• 主机:配有IP地址,但是不进⾏路由控制的设备;
• 路由器:即配有IP地址,⼜能进⾏路由控制;
• 节点:主机和路由器的统称;
协议头格式
• 4位版本号(version):指定IP协议的版本,对于IPv4来说,就是4.
• 4位头部⻓度(header length):IP头部的⻓度是多少个32bit,也就是length*4的字节数.4bit表⽰最 ⼤的数字是15,因此IP头部最⼤⻓度是60字节.
• 8位服务类型(Type Of Service):3位优先权字段(已经弃⽤),4位TOS字段,和1位保留字段(必须置为 0).4位TOS分别表⽰:最⼩延时,最⼤吞吐量,最⾼可靠性,最⼩成本.这四者相互冲突,只能选择⼀个. 对于ssh/telnet这样的应⽤程序,最⼩延时⽐较重要;对于ftp这样的程序,最⼤吞吐量⽐较重要.
• 16位总⻓度(total length):IP数据报整体占多少个字节.
• 16位标识(id):唯⼀的标识主机发送的报⽂.如果IP报⽂在数据链路层被分⽚了,那么每⼀个⽚⾥⾯的 这个id都是相同的.
• 3位标志字段:第⼀位保留(保留的意思是现在不⽤,但是还没想好说不定以后要⽤到).第⼆位置为1表 ⽰禁⽌分⽚,这时候如果报⽂⻓度超过MTU,IP模块就会丢弃报⽂.第三位表⽰"更多分⽚",如果分⽚了的话,最后⼀个分⽚置为1,其他是0.类似于⼀个结束标记.
• 13位分⽚偏移(framegament offset):是分⽚相对于原始IP报⽂开始处的偏移.其实就是在表⽰当前 分⽚在原报⽂中处在哪个位置.实际偏移的字节数是这个值*8得到的.因此,除了最后⼀个报⽂之外,其他报⽂的⻓度必须是8的整数倍(否则报⽂就不连续了).
• 8位⽣存时间(Time To Live,TTL):数据报到达⽬的地的最⼤报⽂跳数.⼀般是64.每次经过⼀个路 由,TTL-=1,⼀直减到0还没到达,那么就丢弃了.这个字段主要是⽤来防⽌出现路由循环
• 8位协议:表⽰上层协议的类型
• 16位头部校验和:使⽤CRC进⾏校验,来鉴别头部是否损坏. • 32位源地址和32位⽬标地址:表⽰发送端和接收端. • 选项字段(不定⻓,最多40字节):
地址管理
⽹段划分
IP地址分为两个部分,⽹络号和主机号
• ⽹络号:保证相互连接的两个⽹段具有不同的标识;
• 主机号:同⼀⽹段内,主机之间具有相同的⽹络号,但是必须有不同的主机号;
• 不同的⼦⽹其实就是把⽹络号相同的主机放到⼀起.
• 如果在⼦⽹中新增⼀台主机,则这台主机的⽹络号和这个⼦⽹的⽹络号⼀致,但是主机号必须不能和 ⼦⽹中的其他主机重复.
通过合理设置主机号和⽹络号,就可以保证在相互连接的⽹络中,每台主机的IP地址都不相同.
那么问题来了,⼿动管理⼦⽹内的IP,是⼀个相当⿇烦的事情.
• 有⼀种技术叫做DHCP,能够⾃动的给⼦⽹内新增主机节点分配IP地址,避免了⼿动管理IP的不便.
• ⼀般的路由器都带有DHCP功能.因此路由器也可以看做⼀个DHCP服务器. 过去曾经提出⼀种划分⽹络号和主机号的⽅案,把所有IP地址分为五类,如下图所⽰。
• A类0.0.0.0到127.255.255.255
• B类128.0.0.0到191.255.255.255
• C类192.0.0.0到223.255.255.255
• D类224.0.0.0到239.255.255.255
• E类240.0.0.0到247.255.255.255
随着Internet的⻜速发展,这种划分⽅案的局限性很快显现出来,⼤多数组织都申请B类⽹络地址,导致B 类地址很快就分配完了,⽽A类却浪费了⼤量地址;
• 例如,申请了⼀个B类地址,理论上⼀个⼦⽹内能允许6万5千多个主机.A类地址的⼦⽹内的主机数更 多.
• 然⽽实际⽹络架设中,不会存在⼀个⼦⽹内有这么多的情况.因此⼤量的IP地址都被浪费掉了.
针对这种情况提出了新的划分⽅案,称为CIDR(Classless Interdomain Routing):
• 引⼊⼀个额外的⼦⽹掩码(subnet mask)来区分⽹络号和主机号;
• ⼦⽹掩码也是⼀个32位的正整数.通常⽤⼀串"0"来结尾;
• 将IP地址和⼦⽹掩码进⾏"按位与"操作,得到的结果就是⽹络号;
• ⽹络号和主机号的划分与这个IP地址是A类、B类还是C类⽆关;
可⻅,IP地址与⼦⽹掩码做与运算可以得到⽹络号,主机号从全0到全1就是⼦⽹的地址范围;
IP地址和⼦⽹掩码还有⼀种更简洁的表⽰⽅法,例如140.252.20.68/24,表⽰IP地址为140.252.20.68,⼦ ⽹掩码的⾼24位是1,也就是255.255.255.0
特殊的IP地址
• 将IP地址中的主机地址全部设为0,就成为了⽹络号,代表这个局域⽹;
• 将IP地址中的主机地址全部设为1,就成为了⼴播地址,⽤于给同⼀个链路中相互连接的所有主机发 送数据包;
• 127.*的IP地址⽤于本机环回(loop back)测试,通常是127.0.0.1
IP地址的数量限制
我们知道,IP地址(IPv4)是⼀个4字节32位的正整数.那么⼀共只有2的32次⽅个IP地址,⼤概是43亿左 右.⽽TCP/IP协议规定,每个主机都需要有⼀个IP地址.
这意味着,⼀共只有43亿台主机能接⼊⽹络么?
实际上,由于⼀些特殊的IP地址的存在,数量远不⾜43亿;另外IP地址并⾮是按照主机台数来配置的,⽽ 是每⼀个⽹卡都需要配置⼀个或多个IP地址.
CIDR在⼀定程度上缓解了IP地址不够⽤的问题(提⾼了利⽤率,减少了浪费,但是IP地址的绝对上限并没 有增加),仍然不是很够⽤.这时候有三种⽅式来解决:
• 动态分配IP地址:只给接⼊⽹络的设备分配IP地址.因此同⼀个MAC地址的设备,每次接⼊互联⽹中, 得到的IP地址不⼀定是相同的;
• NAT技术(后⾯会重点介绍);
• IPv6:IPv6并不是IPv4的简单升级版.这是互不相⼲的两个协议,彼此并不兼容;IPv6⽤16字节128位 来表⽰⼀个IP地址;但是⽬前IPv6还没有普及;
私有IP地址和公⽹IP地址
如果⼀个组织内部组建局域⽹,IP地址只⽤于局域⽹内的通信,⽽不直接连到Internet上,理论上使⽤任意 的IP地址都可以,但是RFC1918规定了⽤于组建局域⽹的私有IP地址
• 10.*,前8位是⽹络号,共16,777,216个地址
• 172.16.到172.31.,前12位是⽹络号,共1,048,576个地址
• 192.168.*,前16位是⽹络号,共65,536个地址 包含在这个范围中的,都成为私有IP,其余的则称为全局IP(或公⽹IP);
• ⼀个路由器可以配置两个IP地址,⼀个是WAN⼝IP,⼀个是LAN⼝IP(⼦⽹IP).
• 路由器LAN⼝连接的主机,都从属于当前这个路由器的⼦⽹中.
• 不同的路由器,⼦⽹IP其实都是⼀样的(通常都是192.168.1.1).⼦⽹内的主机IP地址不能重复.但是⼦ ⽹之间的IP地址就可以重复了.
• 每⼀个家⽤路由器,其实⼜作为运营商路由器的⼦⽹中的⼀个节点.这样的运营商路由器可能会有很 多级,最外层的运营商路由器,WAN⼝IP就是⼀个公⽹IP了.
• ⼦⽹内的主机需要和外⽹进⾏通信时,路由器将IP⾸部中的IP地址进⾏替换(替换成WAN⼝IP),这样 逐级替换,最终数据包中的IP地址成为⼀个公⽹IP.这种技术称为NAT(Network Address Translation,⽹络地址转换).
• 如果希望我们⾃⼰实现的服务器程序,能够在公⽹上被访问到,就需要把程序部署在⼀台具有外⽹IP 的服务器上.这样的服务器可以在阿⾥云/腾讯云上进⾏购买.