在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责MAC位址。
IP地址中: IPv4是32位, IPv6是128位
MAC地址是48位
===========================================================
本节内容:
一、网络程序寻址方式
编写网络程序,必须要有一种机制来表示通信的双方,所以了解寻址方式,以及相关的寻址协议是必须的
1. MAC地址
网络通信的最边缘便是LAN了,先来卡看LAN中的寻址: LAN寻址 一个LAN就是一个共享媒体访问系统。每个节点都有一个MAC(媒体接入控制)地址,该地址是工厂编程到NIC(网络接口卡)中的。一个节点在电缆中传输,而其他所有节点则收听。帧或者分配到某个节点, 或者分配到所有节点,如在广播时
1.1.1MAC子层和MAC地址:
①MAC子层功能:
解决当网络通信存在竞争关系时,谁来使用通道.MAC子层在LAN中很重要,因为广播通信时由它来控制的.
②MAC地址
MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。由IEEE管理。MAC地址长度48位
1.1.2局域网通信
适配器想要发送一个帧到其他适配器时,会将目标适配器的MAC地址插入到封包中,然后通过广播方式发送到LAN中的每一台主机(除了它自己)。其他主机会自主查看是不是自己的MAC地址,匹配上了会处理,匹配不上则直接丢弃。
当发送适配器想要LAN中所有主机都接收并处理该帧时,秩序在目的地址域插入特定的MAC广播地址即可.对于6-Byte地址的LAN来说,广播地址时48位全部设为1,即FF-FF-FF-FF-FF-FF.
1.1.3广域网通信
MAC地址仅应用在LAN中,一旦封包从LAN的网关出来进入Internet,链路层地址就用不到了,这时候就需要依靠网络层的IP地址来寻找目标主机或者目标主机所在的LAN了.
2 IP地址
互联网上的每台主机和路由器都由IP地址,它将网络号和主机号编码在一起,次组合时唯一的。一个网络接口对应一个IP地址.
网络地址时32位的数字,IP地址中: IPv4是32位,采用”点分十进制”, IPv6是128位采用冒分十六进制.
值0和-1(即所有位都是1)有特殊的意义,0表示本地网络或者主机,-1被用作广播地址来指定网络中的所有主机.
IP地址0,0,0,0由主机在引导时使用,网络号为0的IP地址表示当前网络,这些地址使得网络内的机器在不知道网络号的情况下就可以引用自己所在的网络(但是他们必须知道它的类,以便知道包含多少个0)
完全包含1的地址允许在本地网络(通常是LAN)上广播
带有恰当网络号和主机域全为1的地址,允许机器发送广播包到Internet上的任何远程LAN(不过,大部分网管都禁止这种情况)
最后,所有127.xx.yy.zz形式的地址都被保留用作回环测试,发送到这个地址的封包不会被输出到线路上,他们被当作到来的封包直接在本地处理.这允许封包发送到本地网络而发送者不必需要知道网络号
3子网寻址
1.3.1 子网概念
ip地址的组成
IP地址 = 网络地址 + 主机地址 (又称:网络号和主机号)
或者,
IP地址 = 网络地址 + 子网地址 + 主机地址
IP分类编址方案(已经弃用)将IP分为了5个类,单个A、B或者C类网络地址表示的是一个网络而不是一组LAN。为了更有效地利用IP地址,人们又将当个网络分成几个部分在内部使用,网络(这里指以太网)中的每个部分成为子网(subnet),一个LAN就可以是一个子网。
一个网络分为几个子网之后,对外面世界而言,它仍然是一个单独的网络.比如校园网。当一个封包到达主路由器时候,是如何知道要传递给哪个子网呢?有两个方案:
方法一:
在主路由器中存放一个包含65636个入口的表,记录校内的每个主机都使用哪个路由器.
方法二:
原来单独的B类地址中14位是网络号,16位是主机号,现将主机号中拿出几位以创建子网号。
为了实施子网,主路由器需要子网掩码,它制定了”网络+子网+主机”的各个部分,如:子网掩码可以写成255.255.252.0,也可以写成/22,比哦是子网掩码有22位长
1.3.2子网的工作方式
为了弄搞懂子网是如何工作的,有必要先了解以下IP封包是如何在路由器中进行处理的:
每个路由器有一个表,列出了这样的IP地址(网络, 0) 和一些这样的的IP地址(本地网络, 主机)。第一种说明封包是如何进入远程网络;第二种说明了封包如何到达本地主机。与每个表相关联的是到达目的地要使用的网络接口和其他一些信息。
当封包到达时,路由器在路由表中查找它的目的地
à如果封包是远程网络的,它就会在表中记录的接口上被传送到下一个路由器。如果封包是到本地主机的(例如,在路由器的LAN上),就会被直接发往目的地。
à如果表中没有记录,就会被转发到有着更大路由表的默认路由器上.
这种方法意味着,每个路由器仅需要知道其他网络和本地主机,而不是(网络, 主机),这就极大的缩小了路由表的大小。
引入子网划分后,路由表也要改变,添加表的入口---(本地网络, 子网掩码, 0) 和(本网络, 本子网掩码, 主机)。这样一来,在子网K上的路由器便知道如何到达所有其他的子网,也知道如何到达子网K上的主机,而不需要知道其他子网的主机详细信息。去掉其他子网的主机信息,
解析:
将IP地址和子网掩码转为二进制做AND操作,得到网络标识(检查IP是否同一网段)
把子网掩码取反后与二进制的IP地址做AND操作,得到主机标识
4. 端口号
网络层的IP地址用来寻址指定的计算机或者网络设备,而传输层的端口号用来确定运行再目标设备上的哪个应用程序应该接收这个封包.
许多公共服务都使用固定端口号,例如
万维网: 80 FTP: 21 E-mail:25 邮局协议:110 自定义: 大于1024
5. 网络地址转换(NAT)
IP地址是短缺资源,长期的解决方案便是迁移到Ipv6,它有128字节地址。过渡手段最佳解决方案便是NAT,
原理:
IP封包大多携带TCP或者UDP净荷(第8章),其中包含源端口号和目标端口号
的协议头。端口号是16位整型,它表示TCP连接是从哪里开始和结束,即这些端口号提供了NAT工作需要的域。
当进程想和远程进程建立TCP连接时,它在自己机器上绑定一个没有使用的TCP端口(源端口号),用来告诉TCP代码,这个封包是哪里发来的;同时,进程还会提供目标的端口号,用来告诉TCP代码,这个封包是发给谁的。每个外出的TCP消息都包含源端口号和目标端口号,如此就能标识两个终端使用连接的进程。端口号0~1024预留给服务,1024以上的端口才是自定义端口号。
同一个子网有可能使用同一个端口号外发封包,这说明,端口号本身不足以表示发送的进程。故替换远端口号是非常有必要的.这就使用到了NAT盒了。
具体流程为:
①每一个外发封包进入NAT盒子被转换为真是IP地址,另外,TCP源端口号被一个索引替换,该索引指向NAT中的65536个表项的转换表。表中的表项包含了原来的IP地址和原来的源端口号。最后,IP头和TCP头的校验和都会被重新计算并插入到封包中。
②接收封包时,封包从ISP到达NAT盒子时,TCP头中的源端口号被提取出来,用来在NAT盒子的映射表中当索引。从找到的表项中,内部IP地址和原来的TCP源端口号被提取出来,并插入到封包。然后IP和TCP的校验和又被重新计算,并插入到封包。最后,封包被传递到同一个局域网的内部路由器,使用虚拟地址发放到目标上。
标签:子网,封包,主机,基础,网络,第一章,地址,IP地址,端口号 From: https://www.cnblogs.com/bin84351689/p/18563126