【Linux Socket 编程入门】03 - 关于IP,Subnet,Port你应该知道的那些事儿

来源:互联网 发布:python cookbook mobi 编辑:程序博客网 时间:2024/06/05 18:03

本文主要介绍IP地址的分类,子网,子网掩码,端口号(port)等相关知识,这些知识都属于socket编程最最基本的东西。

(一) IP地址的分类

目前,IP地址分为两类,IPv4 (Internet Protocol Version 4)与IPv6 (Internet Protocol Version 6).

IPv4

IPv4是以点号分隔的一组数字,比如192.168.1.1。IPv4的地址由4个bytes 共32 bits组成,byte之间由点号隔开。但是IPv4所能表示的IP地址非常有限,现目前通常利用NAT(Network Address Translationt),DHCP动态主机设置协议 等技术来拓宽IPv4的地址。


IPv6

由于IPv4数量的限制,IPv6应运而生。 IPv6的地址拓展到128 bits,比IPv4整整多了96 bits。IPv6能够表示的IP数目为2^128,这几乎是一个庞大的天文数字了。

IPv6地址通常由16进制数表示,以冒号隔开,比如 :
0001:0db8:c9d2:aee5:73e3:934a:a5ae:9551


IPv6地址也可以有缩写,我们把两个冒号之间的2 bytes的数据称为byte-pair。如果byte-pair数字全部为0,则可以省略这个byte-pair,用两个冒号代替。同时,也可以省略每个byte-pair开头的0,举例如下:

3002:0db8:c9d2:0012:0000:0000:0000:0051 = 3002:db8:c9d2:12::513002:0db8:ab00:0000:0000:0000:0000:0000 = 3002:db8:ab00:: 0000:0000:0000:0000:0000:0000:0000:0001 = ::1




(二) 子网(subnet)

为了对IP地址进行有效的管理,常常将IP地址分成两个部分,一部分称为“网络部分”(network portion),另一部分称为“主机部分”(host portion)。不同的子网的网络部分和主机部分的byte数不一样,目前通常情况下将子网分为三种类型:
  • class A:网络部分占 1 个byte,主机部分占 3 个bytes。
  • class B:网络部分占 2 个bytes,主机部分占 2 个bytes。
  • class C:网络部分占 3 个bytes,主机部分占 1 个byte。

子网掩码

对于三种类型(class A,B,C)的网络部分,通常用子网掩码来表示。子网掩码与IP地址进行按位与(bitwise-AND)操作,能够获得网络部分的数字。比如对于class C的IP地址,子网掩码通常为:255.255.255.0。如果IP地址为192.168.1.108,与子网掩码进行按位与操作,得到网络部分为:192.168.1.0


IPv4中常见的特殊IP地址

点击查看:IPv4常见的特殊地址


(三) 端口号(port)

端口号是一个16 bits的数,它主要在socket编程中,与IP地址搭配,定位到具体的应用。打个比方,IP地址就像是一条街道的地址,而端口号则表示这条街道上具体某一家人的门牌号。这样有了街道地址和门牌号,就能知道具体是和谁通信了。对应到我们的计算机上,同一个计算机可能有多个网络应用程序,比如邮件,和web浏览器等,但是同一台计算机只有一个IP地址,这个时候,就是靠端口号来进行区分的。

很多应用程序都有自己默认的端口号,在linux下面,可以通过/etc/services查看。比如常见应用的端口号:
  • HTTP(web)端口号为 80.
  • telnet 端口为 23.
  • SMTP端口为 25.
  • ...
注意:1024以下的端口号通常认为是保留的。通常为一些需要特殊OS服务的应用而保留。

0 0
原创粉丝点击