地址族 与 网络字节序(大端序)

发布者:系统管理员发布时间:2017-12-25浏览次数:431

关于IP地址 和 端口号 的区别,下面分别用一句话概括:

IP是 Internet Protocol(网络协议)的简写,是为收发网络数据 而 分配给计算机的值

端口号 并非赋予计算机的值,而是为区分程序中创建的套接字 而 分配给套接字的序号。 


一、网络地址

为了使计算机接入网络并收发数据,必须向其分配IP地址。 IP地址分为两种类型


IPv4 (Internet Protocol version 6)              4个字节地址族


IPv6 (Internet Protocol version 6)              6个字节地址族


IPv4与 IPv6的主要区别是  表示IP地址所用的字节数不同。


IPv4标准的4字节IP地址 分为 网络地址 和 主机地址 , 分为 AB ,C , D, E等类型。



网络地址(网络ID)与 IP地址 的作用:


IP是为了区分计算机 , 网络ID是为了区分网络而设置的一部分IP地址。


假设向  WWW.WECHAT.COM网站传输数据,该公司内部构建了局域网, 把所有计算机连接起来。 数据传输的流程如下:


首先向WECHAT.COM传输网络传输数据,浏览4字节IP地址的网络地址(网络ID),先把数据传到WECHAT.COM的网络。  然后 WECHAT.COM网络接收到数据后,浏览传输数据的主机地址(主机ID) 并将数据传给目标计算机。


向相应网络传输数据 ,实际上是向构成网络的路由器 或 交换机 传递数据,由接收数据的路由器根据数据中的主机地址向目标主机传递数据。


二、 网络地址分类 与 主机地址边界

通过 IP地址的第一个字节即可判断网络地址占用的字节数,即 可以判断是属于哪类网络。


A类地址的首字节范围: 0~127


B类地址的首字节范围:128~191


C类地址的首字节范围:192~223


另一种描述:


A类地址 第一个字节的最高位 是 0开始


B类地址 第一个字节的最高位 是 10开始


C类地址 第一个字节的最高位 是110开始


A类地址:


可以容纳 16777214256*256*256 -2)台主机 (减2的原因是:全0的主机号字段表示该IP地址是本主机所连接到的单个网络地址 ; 全1表示所有的,表示该网络上的所有主机)。 A类地址适用于有大量主机的大型网络。


B类地址:


一个BIP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,即第一段数字范围为128191。每个B类地址可连接65534(256*256-2,因为主机号的各个位不能同时为0,1)台主机,Internet16383(2^14)B类地址 (128.0.0.0该网段已可以被指派)


C类地址:


        C类地址适用于校园网和办公网络等小型网络,每个C类网络最多可以有254台计算机,这类地址是所有的地址类型中地址数最多的,但这类网络所允许连接的计算机是最少的。这类IP地址可分配给任何有需要的人。其中192.168.0.0~192.168.255.255为企业局域网专用地址段。


        C类地址,最高的3位是110,随后的21位是网络地址,最后8位是本地地址。一个CIP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0223.255.255.255C类网络可达209万余个,每个网络能容纳254个主机。


三、用于区分套接字的端口号

IP应用于区分计算机:拥有IP地址就能向目标计算机传输数据,但仅凭IP无法传输给最终的应用程序。


计算机的NIC(Network Interface Card,网络接口卡)数据传输设备,通过NIC向计算机内部传输数据时会用到IP。 操作系统 负责把传递到内部的数据通过端口号 分配给套接字。

  


端口号是在同一个操作系统内为区分不同套接字而设置的,因此无法将1个端口号分配给不同的套接字。


端口号 由16位构成,可分配的端口号范围是: 0 — 65535


0 — 1023是知名端口(Well-known PORT),一般分配给特定应用程序,所以应当分配此范围之外的值。


四、网络字节序

CPU向内存保存数据的方式有2种,同时也意味着CPU解析数据的方式有2种:


大端序(Big Endian):     高位字节 存放到 低位地址


小端序(Little Endian):   高位字节 存放到 高位地址


比如在0x20开始的地址中保存4字节int类型数  0x12345678


大端序CPU保存方式如下图:



小端序CPU保存方式如下图:



目前主流的Intel系列 和 AMD系列 CPU都采用 小端序方式保存数据。


在两个设备进行通信的时候,如果未考虑大端序 和 小端序的问题,会出现收发错乱的问题。


在通过网络传输数据时约定为统一方式,统一为大端序,这种约定称为 网络字节序。


即先把数据数组转化为大端序格式再进行网络传输。


五、字节序转换

Linux系统中 头文件 <arpa/inet.h> 中提供了相应的字节序转换函数 ,在windows操作系统中 头文件 <winsock2.h> 中提供了相应的字节序转换函数, 函数名称 和 形参 都是相同的。

其中:


        htons中的 h代表主机(host)字节序,n代表网络(network)字节序。


        s代表short, l指的是longhtonshtons的组合,解释为“把short型数据从主机字节序转化为网络字节序”


        ntohs解释为“把short型数据从网络字节序转化为主机字节序”。

————————————————

版权声明:本文为CSDN博主「Monkey Ji」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/Appleeatingboy/article/details/120481548