From owner-freebsd-net@FreeBSD.ORG Fri Aug 9 23:13:19 2013 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id 6671D84B for ; Fri, 9 Aug 2013 23:13:19 +0000 (UTC) (envelope-from kpaasial@gmail.com) Received: from mail-qc0-x22b.google.com (mail-qc0-x22b.google.com [IPv6:2607:f8b0:400d:c01::22b]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id 21C5A28BE for ; Fri, 9 Aug 2013 23:13:19 +0000 (UTC) Received: by mail-qc0-f171.google.com with SMTP id o11so498629qcv.2 for ; Fri, 09 Aug 2013 16:13:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=T8ff5lLF1ZdMAGq4zwEyhvZgVa48tW4jq+Ep4fgJ2eE=; b=lZ9YS8LWPkvrZHm/6MifLh5MXTuUMDdRQnDb0kg+xX3lM6432GWKCQeI84Ek/EN7ah QqtqP5LUhANwmIAiZ9dP/tZF699hvLBFfBujee2A1udYs159MiNs8Ar1P37skAm2wTXZ pQDdb6jRl+igBRVBrb44mIcu5qxrTUKVywlLPQlpQ710zj+4DRKUPOVgX3VgZPlKAdBa PBJrymeyHcl2erLQouE++GPZ9+Q5otkq7lUukdduk7LjA2CxlcIUvT7ivLHbGIOIdjx4 VTfqh5bexczP8BU3gv00p1o/E96CahBXD3o2GolsPZBYByBuljrmMbosv/XD4xqSFXK+ 4FFg== MIME-Version: 1.0 X-Received: by 10.49.127.196 with SMTP id ni4mr3081865qeb.5.1376089998102; Fri, 09 Aug 2013 16:13:18 -0700 (PDT) Received: by 10.224.5.195 with HTTP; Fri, 9 Aug 2013 16:13:18 -0700 (PDT) In-Reply-To: References: <8B53C542-5CC3-45E6-AA62-B9F52A735EE5@my.gd> Date: Sat, 10 Aug 2013 02:13:18 +0300 Message-ID: Subject: Re: how calculate the number of ip addresses in a range? From: Kimmo Paasiala To: Peter Wemm Content-Type: text/plain; charset=UTF-8 Cc: FreeBSD Net , Fleuriot Damien , s m X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 09 Aug 2013 23:13:19 -0000 On Sat, Aug 10, 2013 at 2:07 AM, Kimmo Paasiala wrote: > On Sat, Aug 10, 2013 at 1:44 AM, Peter Wemm wrote: >> On Fri, Aug 9, 2013 at 9:34 AM, Fleuriot Damien wrote: >>> >>> On Aug 8, 2013, at 10:27 AM, Peter Wemm wrote: >>> >>>> On Thu, Aug 8, 2013 at 12:04 AM, s m wrote: >>>>> hello guys, >>>>> >>>>> i have a question about ip addresses. i know my question is not related to >>>>> freebsd but i googled a lot and found nothing useful and don't know where i >>>>> should ask my question. >>>>> >>>>> i want to know how can i calculate the number of ip addresses in a range? >>>>> for example if i have 192.0.0.1 192.100.255.254 with mask 8, how many ip >>>>> addresses are available in this range? is there any formula to calculate >>>>> the number of ip addresses for any range? >>>>> >>>>> i'm confusing about it. please help me to clear my mind. >>>>> thanks in advance, >>>> >>>> My immediate reaction is.. is this a homework / classwork / assignment? >>>> >>>> Anyway, you can think of it by converting your start and end addresses >>>> to an integer. Over simplified: >>>> >>>> $ cat homework.c >>>> main() >>>> { >>>> int start = (192 << 24) | (0 << 16) | (0 << 8) | 1; >>>> int end = (192 << 24) | (100 << 16) | (255 << 8) | 254; >>>> printf("start %d end %d range %d\n", start, end, (end - start) + 1); >>>> } >>>> $ ./homework >>>> start -1073741823 end -1067122690 range 6619134 >>>> >>>> The +1 is correcting for base zero. 192.0.0.1 - 192.0.0.2 is two >>>> usable addresses. >>>> >>>> I'm not sure what you want to do with the mask of 8. >>>> >>>> You can also do it with ntohl(inet_addr("address")) as well and a >>>> multitude of other ways. >>> >>> >>> Hold on a second, why would you correct the base zero ? >>> It can be a valid IP address. >> >> There is one usable address in a range of 10.0.0.1 - 10.0.0.1. >> Converting to an integer and subtracting would be zero. Hence +1. >> >> -- > > To elaborate on this, for every subnet regardless of the address/mask > combination there are two unusable addresses: The first address aka > the "network address" and the last address aka the "broadcast > address". There may be usable address in between the two that end in > one of more zeros but those addresses are still valid. Some operating > systems got this horribly wrong and marked any address ending with a > single zero as invalid, windows 2000 was one of them. > > -Kimmo Of course I should have mentioned that there are special cases to address/mask combinations, /31 and /32 masks have to be treated specially or there are no usable addresses at all. -Kimmo