Ok, this is strange! At least this was my first reaction when I saw that in one of my CCIE labs that I am trying to resolve all the links between routers are addresses with a subnet /31.
Isn’t that weird that something like this you see for this first time after couple of years in networking. For me it was. It blow my mind out. I asked my more experienced networking colleagues later but for them it seemed new too. They said at first: Ok men, that’s not possible!
Well, try to type it on router interface and you will se that it is possible. It strange for sure, but it’s possible. Router OS (Cisco IOS in this case) will try to be sure that you will use this kind of subneting only for Point-to-point links. That’s why it will issue a warning message if you apply this subnet mask on an Ethernet interface. For serial it will go without the warning.
The idea behind this is of course simple if you put it this way:
On point to point links we actually do not need special broadcast address of that subnet because there’s only one way you can send a packet across point to point link. All we have is the IP address on the other side of the link. We know that if we want to send broadcast it will go there no matter that address is separate broadcast address or any other address. There cannot be more destination than one and the router will then know that broadcast will be directed on the same link as the normal unicast for the link destination address.
Why should we have network name defined as first address of a range and not being able to use it on the interface, we want to use that one too.
If we have 256 different addresses in /24 range. Why we need to divide this on 64 subnet with 4 addresses each if we want to use only two addresses on every side on the link. This is the idea. For one /24 subnet we can use /31 subnets for point-to-point links and with that get double the number of point-to-point links that we can cover.
R1(config)#int fa 0/0 R1(config-if)#ip add 192.168.0.0 255.255.255.254 % Warning: use /31 mask on non point-to-point interface cautiously R1(config-if)#