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

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

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

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

一、网络地址

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

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

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

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

IPv4标准的4字节IP地址 分为 网络地址 和 主机地址 , 分为 A ,B ,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类地址:

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

B类地址:

        一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,即第一段数字范围为128~191。每个B类地址可连接65534(256*256-2, 因为主机号的各个位不能同时为0,1)台主机,Internet有16383(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位是本地地址。一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达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> 中提供了相应的字节序转换函数, 函数名称 和 形参 都是相同的。

unsigned short htons(unsigned short);

unsigned short ntohs(unsigned short);



unsigned long htonl(unsigned long);

unsigned long ntohl(unsinged long);

其中:

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

        s代表short, l指的是long。htons是h、to、n、s 的组合,解释为“把short型数据从主机字节序转化为网络字节序”

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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值