热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

网路是怎样连接的(十一)初探IP协议

思考重点封包是如何找到下一个端节点的IP地址在封包转发中扮演的角色MAC地址在封包转发中扮演的角色IP协议会为封包加上那些头部核心知识核心知识点网路层实现的目的网路层

思考重点


  • 封包是如何找到下一个端节点的
  • IP地址在封包转发中扮演的角色
  • MAC地址在封包转发中扮演的角色
  • IP协议会为封包加上那些头部

核心知识


核心知识点

网路层实现的目的

网路层,主要负责跨区段主机之间的通信,所谓跨区段就是指电脑之间不是直接的连接,而是透过多个路由器、交换机或中继器等端节点相连。该章我们主要探讨IP封包如何进行转发,以及它与MAC之间的关係


** 网路层与传输层对比**

  • 传输层提供进程与进程之间的相互连线服务
  • 网路层提供不同主机之间端到端的通讯服务

网路层目的在于解决两个重要问题,分别是如何依据IP地址进行互相通讯,以及如何透过路由控制决定下一步该往哪裡走

IP地址提供一个类似于门牌号码的功能,使得通讯有确切的目标。试想某天我们想从H市到Z市旅游,虽然路途遥远,但还好H市到Z市之间存在许多休息站。首先我们需要确认Z市的地址,并规划每经过一个休息站后要选择哪条路到达下一个休息站。这就好比查阅路由表然后将封包转发出去,并将封包送达目标端节点


IP的包转发

在数据链路层的乙太网路协定中,处于同一个网域的主机可以透过查找对方MAC地址进行直接的通讯,但是传输层与网路层只关注目标主机的IP地址,中间的封包路线实际上怎麽转发,其实是由MAC地址决定

这就导致的一个问题,既然相邻的路由器们可以透过MAC地址找到对方,那麽透过路由表得到的指定IP地址该如何判断是属于哪台路由器?因此IP协议还需要ARP协议(Address Resolution Protocol)将路由表查找结果转换成MAC地址,然后在下交给数据链路层以及物理层进行传输


数据链路层与网路层关係

从上图可以看到数据链路层的关注重点在于封包下一步该发给哪台相邻路由器,也就是说从的MAC地址表中挑选出适当的输出端口。例如途中的R5路由器跳转到R7的这个过程。相反的,网路层只需要知道我的IP位置以及对方的IP位置这样就可以了。其实从本质上来看,整个流程的起始点相当于发送方MAC地址,终点相当于接收方MAC地址

数据链路层与网路层之间存在者互补关係,就好比老闆与秘书之间的关係。老闆决定本月的公司营运方向,秘书掌握老闆行程后安排这个月必须要开的会。先抓住大方向,在决定要如何落地实践


IP协议的连接特性

网路或通讯可以依照资料传送的方法来进行分类,就是常见的面向连接非面向连接。通讯前发送方与接收方主机需要先建立连接操作的称为面向连接,如TCP协议需要进行握手才能开始收发操作。相反的不需要双方主机互相确认即可传送资料的称为非面向连接操作,例如UDP与IP协议

至于为甚麽IP协议是非面向连接的,我们试着从反向思考,如果IP协议是面向连接操作的会怎样?我们指定传输层使用TCP协议,它是一个面向连接的协议,也就是说在建立连线与断开连线都要进行握手操作,同样也假设IP协议会进行类似的握手操作

先说结论,这会导致三大问题


  1. 效率不佳
  2. 分工模煳
  3. 複杂性

首先谈谈效率问题,假若TCP发起SYN连线请求还需要IP协议先确认对方主机是否有连线,那不是多浪费时间吗?而且就算IP协议真的确认对方主机准备好进行连线了,那不是和TCP在三次握手要做的事重複了吗

软体层面,需要多在网路层编写一套负责确认双方通讯的API,什麽时候算是建立连线成功、双方握手的机制、甚麽时候将数据上缴给传输层等等,喔对了,还要修改一下IP头部,增加几个flag等等。原本这些判断机制都由TCP包办了,这样做不仅没有得到实质的效率提升,还使得网路分层更加模煳,每一层应该要做他最擅长的事才对

所以最好的方法就是IP协议只负责发送,尽可能的将封包传送到目标主机,但不保证封包会到达,TCP借助IP协议实现的功能,在传送封包的服务上又对封包的丢失、顺序错误、逾时等问题提供可靠的的解决方法,确保接收方能正确地收到封包消息


封包的跳转


IP封包传输方式

IP协议的实现目的就是要将封包发送给特定IP的端节点。途中封包会经过交换机、路由器最后到达目的地端节点。其中路由器与交换机不会实现所有的TCP/IP协议,交换机是根据乙太网工作的设备,而路由器因为需要执行路由控制所以包含了数据链路层与网路层

从上图中可以看出当发送端的封包到达交换机时,交换机会透过内建的一组MAC地址表查找封包头部对应的输出端口,然后把封包发送给路由器,整个过程不会修改原封包的MAC头部

紧接着封包到达路由器,首先路由器会捨去掉MAC头部,然后依据封包IP头部透过路由表决定下一次跳转的IP地址,但由于相邻路由器之间是靠MAC地址识别对方,所以网路层会使用ARP协议将查表得到的IP地址转换为MAC地址,再由路由器的MAC地址表决定输出端口,如此一来经过无数次跳转便可以到达目标端节点

整个封包收发流程是由TCP委託IP协议进行发送开始的,IP协议会分别为封包添加IP头部MAC头部,然后再委託数据链路层的网卡将封包转换成电信号,最后透过实体的网路线路发送出去


容易搞混的IP头部
在整个封包转发的过程,封包中的IP头部是不会改变的,只有MAC头部会不断因为跳转而改变,另外透过路由表查找到的IP地址是为了转换成MAC地址,来进行相邻节点之间的跳转,并不会将该IP地址填入IP头部



IP头部


IPv4头部

版本

IP头部版本资讯,占用4个bits。若是使用IPv4则填入4,IPv6则填入6

头部长度

IP头部长度,占用4个bits的长度,计算单位为4个bytes(上图中的一列长度)。例如一个完整且包含选项的IP封包长度为4 * 6 = 24bytes

差异式服务编码点与明示壅塞通知

DSCP栏位用来进行品质控制,长度为6个bits。ECN栏位是用来通知网路壅塞的栏位,长度为2个bits。早期IP协议将将这两个栏位,总计共8个bits定义成TOS(Type of Service),代表IP的服务的品质,通常包含封包的优先级、最低延迟、最大吞吐量等参数

封包长度

表示连同IP头部与资料的总长,通常代表的就是整个IP封包的长度,单位为byte,占用16个bits,所以可传输的最大封包长度为65535bytes

识别码

用于识别封包的序号,若是IP进行封包分割时,同一个资料拥有相同的ID编号,长度为16个bits

标誌位

长度为三个bits,但只使用其中两个bits,分别代表是否允许封包分割以及判断当前封包是否为分割包

分段偏移

表示当前被分割的封包资料内容是从完整的IP封包的第几个位元组开始的,占13个bytes

存活时间

表示封包可以经过路由器数量,每经过一台路由器TTL就会减1,若变成0封包就会被丢弃。由8bits组成,所以可以允许2的8次方也就是256次封包跳转

协议

表示封包到达目的地后要将封包中的数据交给上层应用的哪个协议,常见的像TCP: 17, UDP: 06, ICMP: 01等,长度为8个bits

头部检查码

用来检查IP封包头部在传输过程中是否发生改变,占用长度为16个bits

发送方IP

发送方的IP地址,占用长度为32个bits

接收方IP

接收方的IP地址,占用长度为32个bits

选项

通常在进行测试以及debug时才会使用,占用长度可自行调整

填充

用来将IP头部长度调整成32bits的倍数,会在比特位填入0,占用长度不一


IP封包中最重要的是接收方IP地址,它是由应用程式调用DNS解析器后,将返回值传入给IP协议的



使用ARP协定

当路由器接收到封包后,会将IP头部中的接收方IP地址与自己的路由表进行比对,决定下一次跳转的装置IP地址,不过我们都知道相邻装置之间必须透过MAC地址才能进行沟通,ARP协议实现的目的就是查询代表该IP地址装置的MAC地址


ARP协议

一般来说IP地址与MAC的对应关係会储存在一个内存空间中,我们称之为ARP表,裡面储存位于同一个区域网路中IP地址与MAC地址的对应关係,经过查表后IP协议将该地址当成新的MAC头部,然后透过MAC表决定该发给哪台相邻路由器

但假如ARP表中无法找到指定IP地址时,我们就需要使用ARP查询功能。ARP会使用ARP请求与回应来取得MAC地址,它会对位于同一个区域网路中的所有设备进行广播,当设备IP地址与请求封包的IP地址相同时,该设备就会以MAC地址作为响应回传

不过若是连ARP查找功能都无法取得指定MAC地址的话,代表有可能这个区域网路内不存在该设备,亦者是从路由表有误,这将导致这个封包被遗弃

由此我们得知IP协议会为封包加上两种头部消息,分别是IP头部与MAC头部,IP头部只有发送方才会设置,之后的路由跳转仅需要为封包更改MAC头部即可


只有IPv4可以使用ARP协议,IPv6则是使用ICMPv6来取代ARP



ARP表

每一次的ARP查询都会更新一次ARP表,其实我们使用ARP查询的目的是尽可能减少使用ARP查询,毕竟向周遭设备进行广播会一定程度上对网路造成负担。另外ARP查询不仅可以为发送请求主机更新ARP表,回应方也会依据ARP请求中的发送方MAC地址更新自己的ARP表


ARP表

在cmd中执行arp -a指定可以查看本机端的ARP表,经过ARP查询新增的映射关係称为动类型,透过手动配置的映射关係称为静态类型,不过若是一直使用ARP表也会出现问题,若IP地址发生变动就会发生错误,因此每隔一段时间ARP表中的动态类型表项就会被删除,待重新发起ARP查询时补全


其实只要安装相应的作业系统,电脑也可以当成路由器使用



MAC头部

MAC地址长度为48bits也就是6个bytes,通常用6个两两一组的hex数字表示,使用’-‘或’:'进行分割都可以

E0-D5-5E-20-D9-30
或是
E0:D5:5E:20:D9:30

最后我们来看看MAC头部包含的内容,你可以把它想像成乙太网的通行证


MAC头部

接收方MAC地址
相邻目标端节点的MAC地址,占用长度为48个bits

发送方MAC地址
发送源端节点的MAC地址,占用长度为48个bits

乙太类型
使用的协议类型,一般TCP/IP常用0800以及0806


  • 000-05DC: IEEE 802.3
  • 0800: IP协议
  • 0806: ARP协议
  • 86DD: IPv6协议

推荐阅读
  • 在Linux系统中,网络配置是至关重要的任务之一。本文详细解析了Firewalld和Netfilter机制,并探讨了iptables的应用。通过使用`ip addr show`命令来查看网卡IP地址(需要安装`iproute`包),当网卡未分配IP地址或处于关闭状态时,可以通过`ip link set`命令进行配置和激活。此外,文章还介绍了如何利用Firewalld和iptables实现网络流量控制和安全策略管理,为系统管理员提供了实用的操作指南。 ... [详细]
  • Linux入门教程第七课:基础命令与操作详解
    在本课程中,我们将深入探讨 Linux 系统中的基础命令与操作,重点讲解网络配置的相关知识。首先,我们会介绍 IP 地址的概念及其在网络协议中的作用,特别是 IPv4(Internet Protocol Version 4)的具体应用和配置方法。通过实际操作和示例,帮助初学者更好地理解和掌握这些基本技能。 ... [详细]
  • Ping 命令的高级用法与技巧
    本文详细介绍了 Ping 命令的各种高级用法和技巧,帮助读者更好地理解和利用这一强大的网络诊断工具。 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 本文回顾了作者初次接触Unicode编码时的经历,并详细探讨了ASCII、ANSI、GB2312、UNICODE以及UTF-8和UTF-16编码的区别和应用场景。通过实例分析,帮助读者更好地理解和使用这些编码。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • 在《Linux高性能服务器编程》一书中,第3.2节深入探讨了TCP报头的结构与功能。TCP报头是每个TCP数据段中不可或缺的部分,它不仅包含了源端口和目的端口的信息,还负责管理TCP连接的状态和控制。本节内容详尽地解析了TCP报头的各项字段及其作用,为读者提供了深入理解TCP协议的基础。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 虚拟机网络设置与数据库远程连接优化指南
    本文针对个人计算机上虚拟机网络配置与数据库远程连接的问题,提供了一套详细的优化指南。在探讨远程数据库访问前,需确保网络配置正确,特别是桥接模式的设置。通过合理的网络配置,可以有效解决因虚拟机或网络问题导致的连接失败,提升远程访问的稳定性和效率。 ... [详细]
  • C#中实现高效UDP数据传输技术
    C#中实现高效UDP数据传输技术 ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 本文详细解析了神州数码DCRS5980交换机的基础配置流程和技术要点。首先,通过进入配置模式(`enable`),设置主机名(`hostname 5980`),并创建VLAN,逐步介绍了设备的初始设置步骤。此外,还涵盖了端口配置、IP地址分配及安全设置等关键环节,为用户提供了全面的配置指导。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有