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

网络通信基础:互联网协议(IP)详解

互联网协议(IP)作为TCP/IP协议栈的核心组成部分,主要负责提供一种无连接且不可靠的数据包传输服务。这意味着IP并不确保数据包能够成功抵达目标地址,而是尽力而为地进行传输。此外,IP协议在数据传输过程中不维护任何连接状态,每个数据包独立处理,确保了网络的高效性和灵活性。

一、简介

    IP是TCP/IP协议族的核心协议。IP提供不可靠、无连接的数据报传送服务。

    不可靠的意思是它不能保证IP数据报能成功地到达目的地。IP仅提供最好的传输服务。任何要求的可靠性必须由上层来提供(如TCP)。

    无连接的意思是IP并不维护任何关于后续数据报的状态信息。每个数据报的处理是相互独立的。这也说明,IP数据报可以不按发送顺序接收。

二、IP首部

    IP数据报格式如下图所示,IP首部长为20个字节。


    如上图所示,最高位在左边,记为0bit,最低位在右边,记为31bit。

    4个字节的32bit值以下面的次序传输:首先是0~7bit,其次8~15bit,然后16~23bit,最后是24~31bit。这种传输次序称为大端字节序。其也可成网络字节序。在网络上传输数据前,需将首部转换为网络字节序。

    协议版本号为4时代表IPv4。首部长度是指首部占32bit字的数目,包括任何选项。由于它是一个4bit字段,因此首部最长为60个字节。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。详细介绍见书中的P25。

    总长度字段是指整个IP数据报的长度,以字节为单位。利用首部长度和总长度字段,就可以知道IP数据报中数据内容的其实位置和长度。由于此字段长16bit,所以IP数据报最长可达65535字节。

    标识字段唯一的标识主机发送的每一份数据报。通常每发送一份报文它的值就会加1。

    TTL生存时间字段设置了数据报可以经过的最多路由器数。TTL初始值由源主机设置(通常为32或64),一旦经过一个处理它的路由器,它的值就减去1.当该字段值为0时,数据报就被丢弃,并发送ICMP报文通知源主机。

    首部检验和字段是根据IP首部计算的检验和码。它不对首部后面的数据进行校验。ICMP、IGMP、UDP和TCP在他们各自的首部中均含有同时覆盖首部和数据的校验和码。校验和主要采用16bit的反码求和方式进行。

    源IP地址和目的IP地址都是32bit的IP值。

三、IP路由选择

    如果目的主机与源主机直接相连(如点对点连接)或都在一个共享网络上(以太网或令牌环网),那么IP数据报就直接送到目的主机。否则,主机把数据报发往一个默认路由器,由路由器来转发该数据报。大多数主机采用这个种简单机制。
    IP层可以配置成路由器的功能,也可以配置成主机功能。
    IP层在内存中有一个路由表,当收到一份数据报并进行发送时,它都要对该表搜索一次,当数据报来自某个网络接口时,IP首先检查目的IP地址是否为本机的IP地址之一或是IP广播地址,如果是,数据报就被送到由IP首部协议字段所指定的协议模块进行处理,如果IP数据报的目的地址不是这些,那么如果IP层被设置为路由器的功能,那么就对数据报进行转发,否则数据报被丢弃。

    IP路由选择是逐跳地(hop-by-hop)进行的。从这个路由信息可以看出,IP并不知道到达任何目地的完整路径(除了那些直接相连的目的)。所有的IP路由选择只为数据传输提供一下站路由器的IP地址。

    IP路由选择主要完成以下这些功能。

    1、搜索路由表,寻找能与目的IP地址完全匹配的表目(网络号和主机号都要匹配)。如果找到则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于标志字段的值)
    2、搜索路由表,寻找能与目的网络号相匹配的表目。如果找到,则把报文发送给该表目指定的下一站路由器或直接连接的网络接口(取决于路由表中的标志字段值)。目的网络上的所有主机都可以通过这个表目来处决。例如,一个以太网上的所有主机都是通过这个表目进行寻径的。这种搜索网络的匹配方法必须考虑可能的子网掩码。
    3、搜索路由表,寻找标为“默认(default)”的表目。如果找到,则把报文发送给该表目指定的下一站路由器。
    4、如果上面这些步骤都没有成功,那数据报就不能发送。如果不能发送的数据报来自本机,那么一般会向生成数据报的应用程序返回一个“主机不可达”或“网络不可达”的错误。
    完整主机地址匹配在网络号匹配之前执行。只有当它们都失败后才选择默认路由。默认路由以及下一站路由器发送的ICMP间接报文是IP路由选择机制中功能强大的特性。为一个网络指定一个路由器,而不必为每个主机指定一个路由器,这是IP路由选择的另一个基本特性,这样做可以极大地缩小路由表的规模。
    一般IP的路由选择过程如下:
    1、主机和路由器都是用了默认路由;
    2、数据报中的目的IP地址始终不发生任何变化;
    3、每个链路层可能具有不同的数据帧首部,而链路层的目的地址始终指向下一站的链路层地址。
    即 每当数据包发出后,IP头中的目的IP地址始终不会改变,改变的是链路层首部的目的地址(即MAC地址),MAC地址指向的始终是下一部路由的MAC地址(其中使用了ARP地址解析协议)。数据到达下一路由后在路由表中进行搜索,以确定下一部是否为目的地。如下一站地址是IP头部中的目的地址,则数据被传送到目的地。如最终找不到与IP头部中的目的地址相匹配的地址,则数据包被丢弃(数据的路由跨越是由TTL值指定的)。
四、子网寻址
    所有的主机都支持子网编址,不是把IP地址看成由单纯的一个网络号和主机号组成,而是把主机号再粉城一个子网号和一个主机号。子网的划分缩减了路由表的规模。子网对于子网内部的路由器是不透明的。
五、子网掩码
    主机除了配置主机IP地址外,还需要知道有多少比特用于子网号及多少比特用于主机号。这是引导过程中通过子网掩码确定的。掩码是一个32bit 的值,其中值为1的bit留给网络号和子网号,为0的比特留给主机号。
    给定IP地址和子网掩码后,主机就可以确定IP数据报的目的是:
    (1)本子网上的主机;(2)本网络中其他子网中的主机;(3)其他网络上的主机。
    知道本机IP地址,就知道是A类、B类或者C类地址(从IP地址的高位就可以得知),也就知道网络号和子网号之间的分界线,进而根据子网掩码也就知道子网号和主机号之间的分界线。
六、ifconfig命令
    ifconfig -a,查看当前所有子网接口的有关参数。可通过ifconfig后接网络接口名+IP地址+netmask+子网掩码来设置本机相应网络接口的基本IP地址和子网掩码。
七、netstat命令
    netstat命令也提供系统上的接口信息。-i参数打印出接口信息,-n参数则打印出IP地址,而不是主机名。
    此命令打印出每个接口的MTU、输入分组数、输入错误、输出分组数、输出错误、冲突以及当前的输出队列长度等信息。


推荐阅读
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 掌握DSP必备的56个核心问题,我已经将其收藏以备不时之需! ... [详细]
  • IIS 7及7.5版本中应用程序池的最佳配置策略与实践
    在IIS 7及7.5版本中,优化应用程序池的配置是提升Web站点性能的关键步骤。具体操作包括:首先定位到目标Web站点的应用程序池,然后通过“应用程序池”菜单找到对应的池,右键选择“高级设置”。在一般优化方案中,建议调整以下几个关键参数:1. **基本设置**: - **队列长度**:默认值为1000,可根据实际需求调整队列长度,以提高处理请求的能力。此外,还可以进一步优化其他参数,如处理器使用限制、回收策略等,以确保应用程序池的高效运行。这些优化措施有助于提升系统的稳定性和响应速度。 ... [详细]
  • ZeroMQ在云计算环境下的高效消息传递库第四章学习心得
    本章节深入探讨了ZeroMQ在云计算环境中的高效消息传递机制,涵盖客户端请求-响应模式、最近最少使用(LRU)队列、心跳检测、面向服务的队列、基于磁盘的离线队列以及主从备份服务等关键技术。此外,还介绍了无中间件的请求-响应架构,强调了这些技术在提升系统性能和可靠性方面的应用价值。个人理解方面,ZeroMQ通过这些机制有效解决了分布式系统中常见的通信延迟和数据一致性问题。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • ESP32 IRAM 内存优化策略与实践总结
    本文总结了针对ESP32 IRAM内存溢出问题的优化策略与实践经验。通过详细分析ESP32的内存结构和IRAM分配机制,提出了一系列有效的解决方案,包括代码优化、内存管理技巧和编译器配置调整,旨在帮助开发者有效解决`.espressif/tools/xtensa-esp32-elf/esp-2`等类似错误,提升系统性能和稳定性。 ... [详细]
  • Liferay Portal 中 AutoEscape 构造函数的应用与实例代码解析 ... [详细]
  • DHCP三层交换机设置方式全局模式和接口模式设置方式和命令resetsave回车输入yreboot输入n输入y重启后就恢复默认设置了默认用户名密码adminAdmin@huawei ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 优化后的标题:利用YUM高效安装与管理MySQL数据库环境 ... [详细]
  • Android目录遍历工具 | AppCrawler自动化测试进阶(第二部分):个性化配置详解
    终于迎来了“足不出户也能为社会贡献力量”的时刻,但有追求的测试工程师绝不会让自己的生活变得乏味。与其在家消磨时光,不如利用这段时间深入研究和提升自己的技术能力,特别是对AppCrawler自动化测试工具的个性化配置进行详细探索。这不仅能够提高测试效率,还能为项目带来更多的价值。 ... [详细]
  • 利用Redis HyperLogLog高效统计微博日活跃和月活跃用户数
    本文探讨了如何利用Redis的HyperLogLog数据结构高效地统计微博平台的日活跃用户(DAU)和月活跃用户(MAU)数量。通过HyperLogLog的高精度和低内存消耗特性,可以实现对大规模用户数据的实时统计与分析,为平台运营提供有力的数据支持。 ... [详细]
  • 深入RTOS实践,面对原子操作提问竟感困惑
    在实时操作系统(RTOS)的实践中,尽管已经积累了丰富的经验,但在面对原子操作的具体问题时,仍感到困惑。本文将深入探讨RTOS中的原子操作机制,分析其在多任务环境下的重要性和实现方式,并结合实际案例解析常见的问题及解决方案,帮助读者更好地理解和应用这一关键技术。 ... [详细]
  • 利用Jenkins与SonarQube集成实现高效代码质量检测与优化
    本文探讨了通过在 Jenkins 多分支流水线中集成 SonarQube,实现高效且自动化的代码质量检测与优化方法。该方案不仅提高了开发团队的代码审查效率,还确保了软件项目的持续高质量交付。 ... [详细]
author-avatar
bb
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有