TCP/IP协议

1.IP协议是什么

        之于网络层的一个非常重要的协议:IP协议,相信很多人都对其有深的印象,一提到ip,就知道是用来定位一个人或者一个东西的,那么来到它的源头网路中,IP协议又是如何工作的呢?它是如何标识一台机器的?如何像tcp/udp协议一样负责数据上下层交付的?

        IP协议:网络号+主机号

        我们要清楚的是IP是有共有和私有之分的,共有IP只有一个,它处于公网中,是被所有机器共识的,但是私有IP可以有很多,但是要如何区分它们呢?如何进行很好的管理? ——将网络分区,将网络分成一个一个小区域,并由一个小计算机来负责此区域的数据进出,此计算机就叫做路由器,将一个大的网络不断划分成很多小的网络,并且由很多路由器来管理,这样的话每个子网中都可以有重复的IP,它们彼此之前不会直接通信,不会造成IP冲突。

        所以IP的构成也就清楚了,也就是拿着所在的子网IP+唯一标识你主机的主机号构成IP,所以显而易见IP的存在就是为了使寻找某台主机更加高效准确。

2.IP解决什么问题

        我们知道TCP/UDP协议之于传输层中负责对数据如何传输做决策,由它们之中的各项变量来决定数据什么时候发,以什么格式发,发多少,那么既然有决策,就要有执行,所以网络层之所以和传输层属于上下层关系,那么很明显TCP/UDP协议和IP协议也就是决策/执行关系。

        IP负责将传输层交付下来的数据从A主机跨网络传送给主机B。

3.IP报头

        作为协议,IP也有其独有的报头,那么来看一下吧TCP/IP协议_第1张图片

        4位版本号 (version): 指定 IP 协议的版本 , 对于 IPv4 来说 , 就是 4.
        4位头部长度 (header length): IP 头部的长度是多少个 32bit, 也就是 length * 4 的字节数 . 4bit表示最大的数字是15, 因此 IP 头部最大长度是 60 字节。
        8位服务类型 (Type Of Service): 3 位优先权字段 ( 已经弃用 ), 4 TOS 字段 , 1 位保留字段 ( 必须置为 0)。
        4位TOS分别表示 : 最小延时 , 最大吞吐量 , 最高可靠性 , 最小成本 . 这四者相互冲突 , 只能选择一个 对于 ssh/telnet这样的应用程序 , 最小延时比较重要 ; 对于 ftp 这样的程序 , 最大吞吐量比较重要。
        16位总长度 (total length): IP 数据报整体占多少个字节。
        16位标识 (id): 唯一的标识主机发送的报文 如果 IP 报文在数据链路层被分片了 , 那么每一个片里面的这个id都是相同的。
        3位标志字段 : 第一位保留 ( 保留的意思是现在不用 , 但是还没想好说不定以后要用到 ). 第二位置为 1 表示禁止分片, 这时候如果报文长度超过 MTU, IP 模块就会丢弃报文 . 第三位表示 " 更多分片 ", 如果分片了的话, 最后一个分片置为1, 其他是 0。 类似于一个结束标记
        13位分片偏移 (framegament offset): 是分片相对于原始 IP 报文开始处的偏移 . 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的 . 因此 , 除了最后一个报文之外 , 其他报文的长度必须是8 的整数倍 ( 否则报文就不连续了 )。
        8位生存时间 (Time To Live, TTL): 数据报到达目的地的最大报文跳数 . 一般是 64. 每次经过一个路由 , TTL-= 1,一直减到 0 还没到达 那么就丢弃了 。这个字段主要是用来防止出现路由循环。        
        8位协议 : 表示上层协议的类型。
        16位头部校验和 : 使用 CRC 进行校验 , 来鉴别头部是否损坏。
        32位源地址和 32 位目标地址 : 表示发送端和接收端。
        选项字段( 不定长 , 最多 40 字节 ): 略。
4.IP为什么要分片
         在IP协议传输数据时,分片并不是大多数情况,所以我们清楚IP分片只是一种迫不得已的做法,那么在分片的过程中,IP做了什么动作,为什么要分片?
        IP协议中有一个字段标识数据的总长度,标识了要发送报文的总长度,所以只要不超过此字段的标识,就不会产生分片,但是如果一旦超过了,就要进行分片发送,也就是将数据分成几个数据包发送。
        那么在分片过程中,16位总长度一般以1480字节来作为最大长度,所以分片后每个IP包只能发送1480字节的有效数据,但是,不可忽视的是,在网络中每个数据包都是有报头的,例如TCP的三次握手和四次挥手,即使是简单的应答机制发送的也是一个完整的报文。
        所以即使IP最大发送的有效数据大小为1480字节,还要加上20字节的IP报头,我们都知道网络数据包自上向下封装,打包 - 解包这是最基本的操作,所以IP总大小也就是1500字节,也就是MTU(数据链路层一次可以在网络中发送的数据大小)。
        那么例如发送的数据为3400字节,在进行分片时,将会分成1480+20 1480+20 440+20,三个数据包。 TCP/IP协议_第2张图片
        那么分片究竟有没有好处呢?我们都知道对于很多参与者的网络来说,网络其实是一个相对不稳定的环境,那么在这个环境中,如果报文分片后丢失了怎么办?
        如果有一个分片丢失,那么整个报文将会被丢失,一个都收不到,传输层认为是丢包,重传可能会提高丢包的风险。
        所以传输层一般不会建议分片,而是发送完整版报文,尽量不出现分片的情况。
5.13位片偏移
        我们能够看到,在IP报头中,有三个字段:16位标识、13位片偏移和3位标志。
        ①16位标识:有没有分片,不同报文标识符是不一样的,如果分片,标识符是一样的(聚在一起)
        ②13位片偏移:报文的有效载荷在原始报文的有效载荷中的偏移量(组合一起)
        ③3位标志:1位保留,1位标识禁止分片,1位标识更多报文(1:后面还有,0:后面没有),用来区分是否为最后一个报文,确认是否收全了所有的报文。
        那么在接收端组装的时候,都会采取升序排序。
        如果在传输过程中存在报文丢失,可以使用片偏移来确定哪个报文丢失,可以根据前后报文得知是哪个报文丢失。
        ①如果是第一个报文,13位片偏移为0,或者更多分片为1,那么就是分片报文。
        ②如果是中间的报文,13位片偏移不为0,或者更多分片为1,那么就是分片报文。
        ③如果是最后一个报文,13位片偏移不为0,或者更多分片为0,那么就是分片报文。
6.网段划分
        
        在IP中,因为世界上的人有几十亿,所以机器也有几十亿,网络IP如何划分就成了一大问题,那么在IP协议中,IP总共分为5类,分别为ABCDE类。TCP/IP协议_第3张图片
A类 0.0.0.0到127.255.255.255
B类 128.0.0.0到191.255.255.255
C类 192.0.0.0到223.255.255.255
D类 224.0.0.0到239.255.255.255
E类 240.0.0.0到247.255.255.255
        随着internet的飞速发展,这种网络的划分规则的弊端也越来越显现,大多数组指都申请一种网络,导致一种网络地址很快就被分配完了,而别的类别的地址则造成了大量的浪费。
        所以针对这种情况,又提出了一种新的网络划分方案,引入了一个新的概念:子网掩码。
        子网掩码不能单独使用,要配合IP使用,用来划分网络地址。
        子网掩码只有一个作用,就是将某个IP地址划分成网络地址和主机地址两部分。
        子网掩码是一个32位地址,用于屏蔽IP地址的一部分以区别网络标识和主机标识,并说明该IP地址是在局域网上,还是在远程网上。
        将子网掩码和IP地址进行按位与,得到的就是网络号。
        TCP/IP协议_第4张图片TCP/IP协议_第5张图片
        按位与后得到的子网地址是一个范围,此范围中的任何ip,都可以作为子网ip给子网中的机器使用。

你可能感兴趣的:(tcp/ip,网络,服务器)