TCP/IP之IP协议

互联网层是TCP/IP 的心脏。

IP 相当于OSI 参考模型的第3 层——网络层

网络层的主要作用:实现终端节点之间的通信。这种终端节点之间的通信也叫“点对点(end-to-end) 通信”。

数据链路层的主要作用:在互连同一种数据链路的节点之间进行包传递。而一且跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。

IP 地址属于网络层地址

数据链路的MAC地址是用来标识同一个链路中不同计算机的一种识别码。作为网络层的IP, 也有这种地址信息。一般叫做IP 地址。IP 地址用千在“连接到网络中的所有主机中识别出进行通信的目标地址"。因此,在TCP/IP 通信中所有主机或路由器必须设定自己的IP 地址。

IP地址和MAC地址的关系:MAC地址是刻录在网卡这个物理设备上的,一般是无法改变的。在跨网通信时是需要IP地址的。因为需要通过IP地址来判断是网内通信还是网外通信。IP地址和MAC地址的概念并不矛盾。他们之间是不同层次的,就像有了领导还必须有群众才可以,谁也离不开谁。数据从一点传到另外一点,要经过几个网络,网络路线是怎样的,需要使用IP地址来解决。而网内传输需要使用MAC地址来传输。可见没有网内真正的通信传输,何以实现网络之间的通信。而如果没有网络路由的路径的话,数据是不可能到达目的地的,因为方向都没有。

MAC地址和IP地址在标识一个通信主体时虽然都具有唯一性,但是只有IP地址具有层次性。

MAC地址的作用:假设两点在一个网络内。在这种情况下,只需要MAC地址就可以了。当A点要将数据传递给B点时,会在数据的首部添加B的MAC地址,即目标地址。当然在首部中也有源地址,即发送方的MAC地址,还有其它一些信息,例如用于校验的等等。组装好的这个数据称为帧。然后A点就将帧通过网卡发送出去。此时交换机收到这个帧后,查找自己的转发表。转发表主要有两列,一列是MAC地址,另外一列是该MAC地址对应的端口。查找的结果只有两种情况:找到或没找到。如果找到就将数据从该MAC对应的端口转发出去。如果没找到,很简单,交换机会把帧向所有端口广播(除了该帧进入的端口),因此肯定会有一个合适的端口收到的。这个广播的方法很粗暴,也很奏效。

IP地址的作用:如果两点不在一个网络内。这时就需要IP地址了。因为IP地址含有两个部分,一个是网络地址,一个是主机地址。因此,通过对方的IP地址,是可以判断出对方是否和本机在一个网络内。如果在一个网络内,如上所述,只需要知道对方的MAC地址即可通信。如果不在一个网络内,本机的网络层就认为数据应该发送给网关。要想把数据发给网关,同样需要知道网关的MAC地址,如何知道网关的MAC地址呢?这就涉及到ARP协议。电脑缓存里有一张ARP表,该表主要有两列:一列是IP地址,另外一列是MAC地址。这张表不是天生就有的,是随着网卡收到网络中的各种通信数据,不断学习增加的。如果ARP表中有网关IP地址对应的MAC地址,则问题就转化为网内数据发送。如果ARP表中没有网关IP地址对应的MAC地址,则启动ARP协议,即向网内广播,询问该IP地址的MAC地址。在跨网通信时是需要IP地址的。因为需要通过IP地址来判断是网内通信还是网外通信。

路由控制表:为了将数据包发给目标主机,所有主机都维护着一张路由控制表,该表记录IP 数据在下一步应该发给哪个路由器。

IP分片处理:不同数据链路有个最大的区别,就是它们各自的最大传输单位(MTU: Maximum Transmission Unit) 不同。MTU 的值在以太网中是1500 字节,在FDDI 中是4352 字节,而ATM 则为9180 字节。IP 的上一层可能会要求传送比这些MTU 更多字节的数据,在线路上传送比包长还要小的MTU 。所谓分片处理是指,将较大的IP 包分成多个较小的IP 包。

分片的作用:使得数据链路的抽象化。从IP 的上次层看,它完全可以忽略数据包在途中的各个数据链路上的MTU, 而只需要按照源地址发送的长度接收数据包。 IP 就是以这种方式抽象化了数据链路层,使得从上层更不容易看到底层网络构造的细节。

IP属于面向无连接型

面向有连接型:需要事先建立连接。如果对方主机关机或不存在,也就不可能建立连接。反之,一个没有建立连接的主机也不可能发送数据过来。

面向无连接型:即使对端主机关机或不存在,数据包还是会被发送出去。反之,对千一台主机来说,它会何时从哪里收到数据也是不得而知的。

IP为什么采用该方式:一是为了简化,二是为了提速。面向有连接比起面向无连接处理相对复杂。甚至管理每个连接本身就是一个相当繁琐的事情。此外,每次通信之前都要事先建立连接,又会降低处理速度。

TCP 采用面向有连接型

IP 提供尽力服务(Best Effort) ,意指“为了把数据包发送到最终目的地址,尽最大努力。”然而,它并不做“最终收到与否的验证”。IP 数据包在途中可能会发生丢包、错位以及数据量翻倍等问题。如果发送端的数据未能真正发送到对端目标主机会造成严重的问题。因此提高通信的可靠性很重要。TCP 就提供这种功能。如果说IP 只负责将数据发给目标主机,那么TCP 则负责保证对端主机确实接收到数据。

IP地址的定义

IPv4 地址由32 位正整数来表示。TCP/IP 通信要求将这样的IP地址分配给每一个参与通信的主机。将32 位的IP 地址以每8 位为一组,分成4 组,每组以“.“隔开,再将每组数转换为十进制数。

IP 地址总数有:2^32 = 4 294 967 296 即43亿台计算机连接到网络。

让43 亿台计算机全部连网其实是不可能的:实际上, IP 地址并非是根据主机台数来配置的,而是每一台主机上的每一块网卡(NIC) 都得设置IP 地址~。通常一块网卡只设置一个IP 地址,其实一块网卡也可以配置多个IP 地址。此外,一台路由器通常都会配置两个以上的网卡,因此可以设置两个以上的IP 地址。

IP地址=网络标识(网络地址)+主机标识(主机地址),可以通过设置网络地址和主机地址,在相互连接的整个网络中保证每台主机的IP地址都不会相互重叠。即IP地址具有了唯一性。

网络标识的作用:IP包能够进行路由。仅有网络标识就能判断出是否为该网段内的主机。

注意:主机地址,不可以全部为0 或全部为1 。因为全部为只有0 在表示对应的网络地址或IP地址不可获知的情况下才使用。而全部为1 的主机地址通常作为广播地址。

IP地址的分类

(1)A类,首位以“0" 开头的地址。从第1 位到第8 位是它的网络标识。用十进制表示的话, 0. 0. 0. 0-127. 0. 0. 0 是A 类的网络地址。A 类地址的后24 位相当于主机标识。(2)B类,前两位为“10" 的地址。从第1 位到第16 位是它的网络标识。用十进制表示的话, 128. 0. 0. 0-191. 255. 0. 0 是B 类的网络地址。B 类地址的后16位相当于主机标识。(3)C 类IP 地址是前三位为“110" 的地址。从第1 位到第24 位是它的网络标识。用十进制表示的话, 192. 168. 0. 0-239. 255. 255. 0 是C 类的网络地址。地址的后8 位相当于主机标识。(4)D 类IP 地址是前四位为“1110" 的地,是它的网络标识。用十进制表示的话, 224. 0. 0. 0 - 239. 255. 255. 255 是D 类的网络地址。D 类地址没有主机标识,常被用于多播。

广播:分为本地广播和直接广播两种广播方式。广播的前提都是将主机地址全部都设为1,区别在于本地广播的网络地址相同,直接广播的网络地址不同。是不可靠传输(IP属于面向无连接型)

多播:广播无法穿透路由,不能在多个网段发送同样的包,多播可以穿透路由,可以实现给特定组网络发送数据包。多播使用D 类地址。因此,如果从首位开始到第4 位是“1110", 就可以认为是多播地址。而剩下的28 位可以成为多播的组编号。

子网掩码

背景:IP地址确定了IP类别(A,B,C,D)就确定了网络标识和主机标识。A类和B类相对于C类,主机地址非常多,那么这两类常用于数据中心,这些需要分配大量主机的设备和场景。但是一般情况下同一个链路(即同一网络地址)上不可能连很多个人主机(即主机地址),同时A,B类就没有更多的链路选择,在这个层面上直接使用A类B类造成了IP资源浪费。

子网掩码:IP地址可以不受限于地址的类别而是由一个叫做“子网掩码"的识别码通过子网网络地址细分出比A 类、B 类、C 类更小粒度的网络。这种方式实际上就是将原来A 类、B 类C 类等分类中的主机地址部分用作子网地址,可以将原网络分为多个物理网络的一种机制。

一个IP地址=IP地址+子网掩码。子网掩码这也是32位,对应IP地址网络标识部分的位全部为1,对应IP主机标识的部分全部为0.因此IP地址可以不受限于自己的类别,而是可通过子网掩码自由定位自己的网络标识长度。

子网掩码的表示:一种是将IP地址和子网掩码地址分别使用两行来表示。另一种,在每个IP地址后面追加网络地址的位数,用“/”隔开。

例子:自由定位自己的网络标识长度,为26位;那么剩下的6位是主机地址。下面使用两种方式表示,左边为分行,右边为追加:

              

CIDR(无类型域间选路)方式的背景:IP地址的分类导致地址严重匮乏,人们开始放弃IP地址的分类,采用任意长度分割IP地址的网络标识和主机标识。

VLSM(可变长子网掩码)方式的背景:CIDR方式应用的网络内部采用固定长度的子网掩码机制。也就是说,当子网掩码的长度被设置为/25 以后,域内所有的子网掩码都得使用同样的长度。人们需要使用可变长度、高效的IP地址分类方式。因此产生了这种可以随机修改组织内各个部门的子网掩码长度的机制。

私有IP背景:起初,互联网中的任何一台主机或路由器必须配有一个唯一的IP 地址。如果一直按现行的方法采用唯一地址的话,会有IP 地址耗尽的危险。

宗旨:不要求为每一台主机或路由器分配一个固定的IP 地址,而是在必要的时候只为相应数量的设备分配唯一的IP 地址。

私有IP和全局IP

私有IP地址:最早没有计划连接互联网,而是只用千互联网之外的独立网络;现在,配有私有地址的主机通过NAT技术可以与配有全局地址的互联网主机通信。私有IP地址不需要在整个互联网范围内保持唯一,只要在同一个域里保证唯一即可。在不同的域里出现相同的私有IP 不会影响使用。

全局IP地址:基本上上要在整个互联网范围内保持唯一,在使用任播的情况下,多台主机或路由器可以配置同一个IP。

互联网现状:私有IP 地址结合NAT 技术已成为现在解决IP 地址分配问题的主流方案。由千现在IPv6 还没有得到普及, IPv4 地址又即将耗尽,人们正在努力使用IPv4和NAT 技术解决现有的问题。

IP地址和路由控制

关系:IP地址中的网络地址用于进行路由控制。路由控制表中中记录着网络地址与下一步应该发送至路由器的地址。如果路由表中下一个路由器的位置记录着某个主机或路由器网卡的IP 地址,那就意味着“发送的目标地址属于同一个链路。

特殊路由地址:(1)默认路由由一般标记为0.0.0.0/0 或default。这里的0.0.0.0/0 并不是指IP地址是0.0.0.0 。由于后面是“/0"' 所以并没有网络标识地址。它只是为了避免人们误以为0.0.0.0 是IP 地址。(2)"IP 地址/32" 也被称为主机路由(Host Route) 。例如, 192. 168. 153. 15/32, 就是一种主机路由。它的意思是整个IP 地址的所有位都将参与路由。进行主机路由,意味着要基于主机上网卡上配置的IP 地址本身,而不是基于该地址的网络地址部分进行路由。主机路由多被用千不希望通过网络地址路由的情况。(3)环回地址是在同一台计算机上的程序之间进行网络通信时所使用的一个默认地址。计算机使用一个特殊的IP 地址127.0.0. 1 作为环回地址。与该地址具有相同意义的是一个叫做localhost 的主机名。使用这个IP 或主机名时,数据包不会流向网络。

IP分割和再构成处理

背景:不同数据链路的最大传输单元(MTU)相异,因为不同数据链路的使用目的不同。由于IP属于数据链路层上一层,所以不受限于MTU的大小,即抽象化了底层的数据链路。

分片和重组:往往在网络上遇到比较大的报文无法一下子发送出去时才会进行分片处理。经过分片之后的IP 数据报在被重组的时候,只能由目标主机进行。路由器虽然做分片但不会进行重组。

路径MTU发现技术的背景:分片机制一方面使得路由器处理负荷加重,路由器的传输速度、安全处理、网络过滤等工作越来越多,因此不希望路由器承担分片工作;另一方面,分片处理一旦某个分片丢失,则会导致IP数据报废,使得链路的利用率下降。

路径MTU技术:从发送端主机到接收端主机之间不需要分片时最大MTU 的大小。即路径中存在的所有数据链路中最小的MTU 。

特点:进行路径MTU 发现,就可以避免在中途的路由器上进行分片处理,也可以在TCP 中发送更大的包。

IPV6

IPv6 (IP version 6) 是为了根本解决IPv4 地址耗尽的问题而被标准化的网际协议。IPv4 的地址长度为4 个8 位字节,即32 比特。而IPv6 的地址长度则是原来的4倍,即128比特。

困境:从IPv4 切换到IPv6 极其耗时,需要将网络中所有主机和路由器的IP地址进行重新设置。当互联网广泛普及后,替换所有IP 地址会是更为艰巨的任务。

特点:

IPv6 的IP 地址长度为128 位。如果将1Pv6 的地址像1Pv4 的地址一样用十进制数据表示的话,是16 个数字的序列(1Pv4 是4 个数字的序列)。

IPv6 和IPv4 在标记方法上进行区分。一般人们将128 比特IP 地址以每16比特为一组,每组用冒号(":")隔开进行标记。而且如果出现连续的0 时还可以将这些0 省略,并用两个冒号("::")隔开。但是,一个IP 地址中只允许出现一次两个连续的冒号。

IPV6地址结构:网络标识+主机标识。

全局单播地址:全局单播地址是指世界上唯一的一个地址。它是互联网通信以及各个域内部通信中最为常用的一个1Pv6 地址。

IPV6分片处理不需要采用路径MTU发现技术:1Pv6 的分片处理只在作为起点的发送端主机上进行,路由器不参与分片。这也是为了减少路由器的负荷,提高网速。因此, 1Pv6 中的“路径MTU 发现“功
能必不可少。不过1Pv6 中最小MTU 为1280 字节。因此,在嵌人式系统中对于那些有一定系统资源限制的设备来说,不需要进行“路径MTU 发现“,而是在发送IP 包时直接以1280 字节为单位分片送出。

IPV4首部

通过IP 进行通信时,需要在数据的前面加人IP 首部信息。

版本(Version):4比特,标识IP首部的版本号

首部长度(IHL):4比特,表明IP 首部的大小,单位为4 字节(32 比特)。对于没有可选项的IP 包,首部长度则设置为“5" 。也就是说,当没有可选项时, IP 首部的长度为20 字节(4x5=20) 。

区分服务(TOS):由8 比特构成,用来表明服务质量。每一位的具体含义如表4.5 所示。但是实际中实现TOS控制非常复杂,几乎没有被投入使用,因此有人将TOS字段本身再分成DSCP和ECN两个字段。

          

总长度(Total Length):16 比特,表示IP 首部与数据部分合起来的总字节数。因此IP 包的最大长度为65535 (= 2^16) 字节。

标识(ID):16 比特,用于分片重组。同一个分片的标识值相同,不同分片的标识值不同。通常,每发送一个IP 包,它的值也逐渐递增。此外,即使ID 相同,如果目标地址、源地址或协议不同的话,也会被认为是不同的分片。

标志(Flags):3比特,表示包被分片的相关信息。下面是每一位的含义:

片偏移(FO):13 比特,用来标识被分片的每一个分段相对于原始数据的位置。

生存时间(TTL):8比特,起初是以秒为单位记录当前包在网络上应该生存的期限。然而,在实际中它是指可以中转多少个路由器的意思。每经过一个路由器,TIL 会减少1, 直到变成0 则丢弃该包。

协议(Protocal):8比特,表示IP 首部的下一个首部隶属于哪个协议。

首部校验和(Header Checksum):16比特,该字段只校验数据报的首部,不校验数据部分。它主要用来确保IP 数据报不被破坏。

源地址(Source Address):32比特,表示发送段IP地址。

目标地址(Destination Address):32比特,表示接收端IP地址。

可选字段(Options):长度可变,通常只在进行试验或者诊断时使用。该字段包含了安全级别、源路径、路径记录、时间戳。

填充(Padding):在有可选项的字段的情况下,首部长度可能不是32比特的整数倍。为此,通过像字段填充0,调整32比特的整数倍。

数据(Data):存入数据,将IP上层协议的首部也作为数据进行处理。

IPV6首部格式

IPv6 中为了减轻路由器的负担,省略了首部校验和字段。因此路由器不再需要计算校验和,从而也提高了包的转发效率。此外,分片处理所用的识别码成为可选项。为了让64 位CPU 的计算机处理起来更方便, IPv6 的首部及可选项都由8 字节构成。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值