网络编程-TCP/IP协议栈-IP协议

怼烎@ 2023-02-18 08:16 208阅读 0赞

协议

  • 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<…等,以此作为游戏规则。当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进行游戏,这个方式形成的约定就是一种协议。

TCP/IP协议簇

  • 互联网早期无法进行大规模的通信使用,因为大家虽然都懂计算机的链接原理,但是每个人的链接方式都不同,所以造成这种情况。当时就衍生出了很多为了解决当前问题的协议,比如TCP协议约定大家使用TCP链接时候传输的一种协议,HTTP协议则约定了文本传输的一种协议。
  • TCP/IP协议并不是指某一个具体的协议,它是指一系列的协议栈,因此也叫TCP/IP协议栈或者TCP/IP协议簇
  • 在TCP/IP协议簇中,定义了包含对应OSI模型的每一层,上一篇中有过一个简单模型的说明。以下对OSI模型层做了细化说明处理,如下图:
    在这里插入图片描述
  • 如上图中OSI模型的七层协议,在TCP/IP中使用四层代替。
  • 在TCP/IP协议簇中每一层都有对应的协议,最终组成协议簇,上一篇也有解释,但是是一个简单版本的,一下图列出了TCP/IP四层中的每个协议所在位置:
    在这里插入图片描述
  • 如上图所示,我们常看到的TCP,UDP在协议栈的传输层,而IP协议则在协议栈的网际层,还有出现次数特别多的HTTP协议是在协议栈的应用层。
  • TCP/IP协议栈被分作多个层级,目的是为了整理硬件之间通信时的一个通用的模型,每一个层级都按照指定的协议与上下层进行信息交换,上一篇中也有一个简单的说明,我们用如下图来表示
    在这里插入图片描述
  • 通过上图归纳来一下上一篇中介绍的几个层级,也就是TCP/IP协议的总体概念,但是气内部还有很多的协议,我们介绍几个比较常见的

    • IP协议
    • TCP协议
    • UDP协议
    • HTTP协议

IP协议

  • IP协议处于TCP/IP协议簇的网际层。它提供不可靠的,无连接的服务,而且必须依赖其他层协议进行差错控制。在局域网环境,IP协议往往被封装在以太网帧中传送。而所有的TCP,UDP,ICMP,IGMP数据都被封装在IP数据报中传送。在IP协议中,有两个重要的内容,一个是IP地址概念,一个是IP协议报头
IP地址
  • 对应IP地址我们日常中接触到很多,他给每个接入互联网的计算器一个地址,从而使得其他计算机能够访问到他。与此同时,当计算机有了地址之后,才能遵循IP协议,和其他计算机进行数据的传递。
  • IP现有目前有两种IPV4,IPV6,IPV4占用32bit,而IPV6则是32字节,128bit,IPV6可用的数量是比较大的,用来解决IPV4 不够用的情况。以IPV4 为案例
  • IPV4的32bit地址中分为两个部分:网络号和主机号。同时根据不同开头可以分为五类A,B,C,D,E
    在这里插入图片描述
  • 网络号用于区分不同的网络点,比如我们公司就是一个网络的集群,我们可以通过他的网络号码确认该公司的网关,在通过主机号码确认每一台计算机。
  • 例如一个C类IP地址类型,包含21为网络号码,实际就能区分2^21 个网络号码,而每一位网络号可以区分2 ^ 8 - 2 = 254个主机(起始网络地址和最后一个为广播地址都不可用于主机)每个网络好修改一位,即使后面八位一样 那也是表示在不同网络号码下的不同主机,只不过这些主机的编码正好相同罢了,还是在不同的IP地址下。如果一个网吧采用这种方式,那么他最多能安装254台机器,如果想要更多的主机号,应该延长主机号的位数,但是相应网络号的也会减少,因为总长度是不变的
  • 我们通过子网掩码能够改变网络号的主机号尾数。通常的掩码类似:

    255.255.255.0

二进制表示:

  1. 11111111.11111111.11111111.00000000
  • 如果一个IPV4地址:192.168.1.1,那么IP地址和掩码经过与(&)运算后的结果为:192.168.1.0(192.168.001.000),这个就是我们常说的网关。

    //IP 地址二进制表示 192.168.1.1 ->
    11000000.10101000.00000001.00000001
    //&运算后还是得到原值 11000000.10101000.00000001.00000001

  • 从192.168.1.1~ 192.168.1.254 都可以作为主机号码,也即是这个网关下,可以容纳254台机器,如果将掩码改为:

    255.255.254.0
    //二进制表示
    11111111.11111111.11111110.00000000

  • 那么与ip192.168.1.1 进行与(&)运算的结果: 192.168.0.0,这个时候使用的主机号码变成来192.168.0.0~192.168.1.254 ,即可以容纳510 台机器。

IP寻址
  • 当一个IP包从一台计算器被发送,他会到达一个IP路由器。
  • IP路由器负责将这个包路由到他的目的地,直接或者通过其他路由器中专。
  • 在一个相同的通信中,一个包进经过的路径可能会和其他包不一样。而路由器负责根据通信量,网络中的错误,或者其他参数来进行正确寻址
IP协议的报头
  • 上面的数据分层中,我们看到IP协议的构成实际上是IP报头 + TCP协议内容,
  • 因此决定一个IP协议属性的关键是IP报头的内容。
  • 下面我们来看IP协议的组成,IPV4 中普通的IP首部长20字节,其中32位的源IP地址和32位目的IP地址
  • TTL生存时间,代表数据包可以进过最多路由次数,比如TTl是10 ,意思是经过10此路由转发还没到到达,则报文丢弃。
  • 8位上层协议指的是传输层承载的协议
  • 16数据报长度:指IP数据包的最大长度,16bit那么最长可以65535字节。但是通过链路的MTU不会有这么大,因此,如果数据包长度超过MTU,数据包会被分片。如果发生来分片,则需要用到16位表示以及13位分段偏移来找到分片的报文
    在这里插入图片描述

上一篇 网络编程-网络分层的意义
下一篇 网络编程-TCP/IP协议栈-TCP协议

发表评论

表情:
评论列表 (有 0 条评论,208人围观)

还没有评论,来说两句吧...

相关阅读

    相关 网络编程-TCP/IP协议-IP协议

    协议 协议就是约定的一种规则,例如扑克游戏中约定好的各种规则,2<3<4<5<…等,以此作为游戏规则。当所有人都遵循这个规则,那么久可以不需要任何多余的交流就可以进

    相关 Linux 网络编程 IP协议

    前言 学习网络编程,个人觉得还是了解下协议的具体情况比较好。我一直信奉的是:一个复杂的东西,其实只是表面复杂,是面对外界应答的策略上的复杂,机制一般都不复杂,所以我学习更