第四十六讲——逻辑地址(IP) 本文共有4075个字,关键词: 为什么主机能够知道接收方是否和发送方在同一网络?我们这一讲带着这个疑问进行学习。 我们的逻辑地址是使用点分十进制表示的四段,这个逻辑地址被分为两段,网络地址和主机地址。网络地址用于标识不同的网络,主机地址用于标识本地网络内不同的主机。为了将网络地址和主机地址能够被识别,我们还需要请出子网掩码这把杀猪刀,就是它将一个完整的逻辑地址一刀劈成两段,你一段,我一段……当然这是开玩笑的。 网络地址 主机地址 通过子网掩码的和逻辑地址的运算,就可以得出网络地址和主机地址,我们也就可以通过子网掩码进行判断,逻辑地址中的哪一段是网络地址,哪一段是逻辑地址。 子网掩码:子网掩码的格式同逻辑地址,只是子网掩码的数值比较特别。当子网掩码转换成二进制时,应当是连续不断的1组成,其余为0。例如 十进制的子网掩码可以为255.255.255.0,将其展开成二进制为 1111 1111 . 1111 1111 . 1111 1111 . 0000 0000 这就是24位连续的1。 我们为了方便记忆和使用,将二进制的数字转换成了十进制,所以在将子网掩码和逻辑地址进行与运算之前,我们要先将子网掩码和逻辑地址转换成二进制。然后再进行与运算。 在与运算中,0和1相与得0,1和1相与得1,0和0相与得0。 我们的逻辑地址的每一段的取值为0-255,即每一段为八位二进制表示 0000 0000 为最小 十进制为0 1111 1111 为最大 十进制为255 所以主机在通信之前将IP同子网掩码进行与运算,如果源地址与接收方的网络地址一样,则在同一个网络,否则主机不在同一个网络,这时就需要通过网关进行转发。 所以任何时候,网络中的主机要同网关在同一网络中,才能实现网关接收数据并进行转发。在路由上,也有将IP地址同子网掩码相与得过程,用于判断接收方的IP地址是否在同一网络中。 一个交换机可以连接多个不同的冲突域。 一个路由可以连接多个不同的广播域。 在路由也像交换机一样,内部维护有一张表,里面记录了(维护了)要到达什么地方通过哪个接口。这张表称为路由表。 在这张图中,1.1要与4.1通信,首先1.1的主机要将自己的IP地址同子网掩码相与,再将目标地址与子网掩码相与,判断两主机是否存在于同一网络,如果不在同一网络则将数据包转发给路由R1,R1在路由表中查询(通过手动指定指向关系),知道到达4.1主机所在的网络需要进过路由R2,于是路由R1将数据转发给R2,R2在接收到数据后通过查看报头比对IP(同源码进行与运算),发现不在本地网络,于是查路由表知道通过路由R3能够到达4.1所在主机的网络,将数据转发给路由R3,R3接收到数据后,进行IP比对,在路由表中查询4.1所在网络的端口(网关),并通过该端口将数据转发给交换机(switch4),交换机收到数据后进行广播通知4.1主机,取得4.1主机的回应(取得MAC地址)后,将源地址MAC和4.1主机MAC封装报文,发送给4.1主机。于是4.1主机收到以后拆开数据报文,获得数据中的内容。 路由具有自动学习的功能,其利用某种协议(RIP2、USPF等),假设在某一传输线路上某一设备故障,那么之前学习的内容是有效的,导致数据始终发送给故障的设备,导致数据无法到达,所以路由自动学习是实时的,当某个链路不通时,可以快速的响应并删除其指向。 如果是在一个主机相对稳定的环境中,应当采用手动指定的方式,指定路由的对应关系,如果在这种环境中使用动态学习,则会占用一些硬件资源,并且需要一定的时间。所以东财学习常常使用在主机经常变动的网络。 在路由器中,由于某个条目的改变,整个链路从一种状态转换成另一种稳定状态之前的过程,我们称为路由表的收敛过程。 路由协议(RIP2、OSPF等),他们支持的网络规模不同,其收敛时间也不同,算法也不一样,生成路由表的效率也会不一样。所以路由器要以什么样的协议去学习需要根据需要选择。 IP为被路由协议。在整个的传输过程中,IP地址都不会改变,从而实现了主机到主机的通信,能标识主机和目标主机。 MAC:本地网络设备之间的通信,物理设备之间的通信,它的范围不能超出本地网络。 在我们的主机上,并不是说网卡与网卡进行通信,我们要知道,网卡只是一个传输的介质,其实际上是运行在主机上的进程(运行在主机上的程序称为进程)之间的通信,这些进程依赖网卡与其他主机的进程进行通信。 而且,每一个主机上都是由多个进程的,因此,我们为了标识主机上哪个进程与其他的进程,还需要一个地址。这个地址就是端口号,通过不同的端口号来标识不同的进程。 每一台主机上的可用端口为0-65535之间的端口,端口与进程之间没有必然的联系,这就意味着对方的进程工作的端口不确定。 于是对这些端口就进行了规范,用于定义端口的服务,这个规范的定制者为国际上的名称地址分配机构。 例如80端口分配给WEb服务,一些著名的服务应当有固定的服务端口,而不能随意的使用其他的端口,以确保能为他人提供服务(服务端)。 对于客户端来说,使用的额端口是随机的,没有被使用的端口。且一个端口只能属于一个进程,且这个进程会对端口进行监听。 对于服务端端口来说来说,端口是被动打开的,对客户端来说访问服务端端口是主动打开。 为了使数据能够到达目的地,端口与IP地址相关联,且与MAC地址县关联。 如果本地主机上有两块网卡,且每块往卡上都有IP地址,都可以使用各自的端口,也就是说两个地址就有相同的端口可以使用且不相互影响,因为端口同IP、MAC相关联。对于当前主机如何区分相同端口的不同IP信息?这就意味着必须将IP同端口绑定起来,这种绑定叫做套接字。 IP:port 绑定起来的一组称为SOCKET,一个套接字。 所以在将来我们启动某个进程的时候,监听在某个套接字上,也就是说启动一个WEB服务器,这个WEb服务的进程将监听这个地址的80端口,这就意味着这个主机就跟这个地址的80端口绑定起来了,也就意味着和这个套接字绑定起来了。 我们不能手动绑定,而是通过某个进程将IP和端口进行关联到这个进程上。从而实现主机间的通信。 例如A主机发送一个报文到目标主机的80端口,只要报文能够到达B主机,B主机的80端口就能够接收到报文。 我们的主机在通信时所加的port、IP、MAC信息在接收方能够正确理解才能实现信息的传输,因此主机之间就需要一种约定,也就是协议。 这些协议就是互联网通信中的关键几环,而这些协议每一个对应的步骤是根据对方的那个相同的功能建立关联关系的,发送方的IP由接收方解析,MAC由对方解析,端口由端口解析,也就是说每一个都称为一个子系统,或者子功能,专门用于管理IP、MAC、端口,这个就叫做协议的分层。将一个大的任务划分为小的任务。 协议的层级结构以OSI七层模型为例: OSI由国际标准化组织ISO提供,将一个报文从源地址到目标地址要经过的所有过程分为7个子功能 应用层——具体的应用 表示层——加密解密,是否压缩等等 会话层——双如何建立回话 传输层——封装源端口、目标端口 网络层——封装IP(源IP、目标IP) 链路层——封装源MAC和目标MAC 物理层——用于封装数据报文的首部,这一步会封装一大串的1或者0,用于分割报文,称为报文的前导码。 虽然我们通过端口能到达对方的WEB服务器,但是对方的WEb服务器也可以提供多个网页(一个站点上可能会有多个网页)标识同一服务上的不同页面就需要应用层协议,例如HTTP协议(应用层协议)。 「一键投喂 软糖/蛋糕/布丁/牛奶/冰阔乐!」 赞赏 × 几人行 (๑>ڡ<)☆谢谢老板~ 2元 5元 10元 50元 100元 任意金额 2元 使用微信扫描二维码完成支付 版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。 给自己讲linux 2017-01-15 评论 1625 次浏览