关于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> 中提供了相应的字节序转换函数, 函数名称 和 形参 都是相同的。
其中:
htons中的 h代表主机(host)字节序,n代表网络(network)字节序。
s代表short, l指的是long。htons是h、to、n、s的组合,解释为“把short型数据从主机字节序转化为网络字节序”
ntohs解释为“把short型数据从网络字节序转化为主机字节序”。
————————————————
版权声明:本文为CSDN博主「Monkey Ji」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Appleeatingboy/article/details/120481548