主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统称。
4位首部长度 和TCP报头中的4位首部长度一样,代表的是IP报头的长度是多少个4字节,4位比特位能够表示的最大数字是15,即IP头部的最大长度是15*4 = 60字节16位总长度 指的是IP数据报整体占多少个字节。用总长度-报头即为有效载荷。
第一位表示保留位。
第二位表示禁止分片。
第三位表示分片是否结束。
1:表示后面还有分片
0:表示后面没有分片
ip协议用来表示一条数据所使用的是:(一条ip数据报)
16位总长度能够标识的数据最大为65536Byte,如果传输层递交给网络层ip协议的数据超过65536Byte,那应该如何做?
那么,问题来了,TCP需要ip协议进行分片吗?
解答:不需要进行分片,因为TCP协议在传输数据的时候,严格按照MSS进行传输,而MSS一定是小于MTU的,而一般网卡的MTU都是1500字节,换句话说,TCP在每次传输数据的时候都是不会超过1500字节的。因此,MSS是远远小于65536字节的,因此也就不会触发ip协议进行分片传输。
UDP需要ip协议进行分片吗?
解答:有可能需要进行分片,因为UDP协议是没有类似于MSS存在的,因此,UDP的数据的最大长度是65536字节,网络层递交给数据链路层大小必须小于MTU的,因此,一旦UDP递交给网络层ip协议的数据加上ip协议报头之后,总长度大于了当前主机的MTU大小时,就会需要进行分片传输。
注:因为UDP协议是不可靠的,在ip数据报转发的时候,都有自己的路由转发路径,可能会造成丢失。
ip地址的分为两个部分,网络号和主机号。
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的IP地址都不相同。
那么问题来了, 手动管理子网内的IP, 是一个相当麻烦的事情:
过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出 自[TCPIP]。
随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址, 导致B类地址很快就分配完了, 而A类却浪费了大量地址。
针对这种情况提出了新的划分方案, 称为CIDR(Classless Interdomain Routing)。
计算当前网络的网络号:
如何得到当前子网中的IP地址使用多少个比特位作为主机号?
解答:子网掩码按位取反等于当前最大的主机号:
取反之后,有多少比特位为1,则表示当前子网当中的ip地址使用了多少个比特位当作是主机号。
- 在一个网段中都会有一个网络号的和广播号,即 192.0.0.0 ~ 192.0.0.255
- 网络号:主机号全为0的ip地址,就为该网段中的网络号
- 广播号:主机号中全为1的ip地址,就为该网段中的广播号
- 127.0.0.1 :本地回环网卡地址(通常用来测试自己机器的网络连通性)
- 0.0.0.0:代表本地所有的网卡地址
- 我们知道, IP地址(IPv4)是一个4字节32位的正整数. 那么一共只有 2的32次方 个IP地址, 大概是43亿左右. 而TCP/IP协议规定, 每个主机都需要有一个IP地址,这意味着, 一共只有43亿台主机能接入网络么?
- 实际上, 由于一些特殊的IP地址的存在, 数量远不足43亿; 另外IP地址并非是按照主机台数来配置的, 而是每一个网卡都需要配置一个或多个IP地址。
- CIDR在一定程度上缓解了IP地址不够用的问题(提高了利用率, 减少了浪费, 但是IP地址的绝对上限并没有增加), 仍然不是很够用. 这时候有三种方式来解决:
IP网络层的主要作用是“实现终端节点之间的通信”。这种终端节点之间的通信也叫“点对点(end-to-end)通信”。
IP网络层的下一层——数据链路层的主要作用是在互连同一种数据链路的节点之间进行包传递。而一旦跨越多种数据链路,就需要借助网络层。网络层可以跨越不同的数据链路,即使是在不同的数据链路上也能实现两端节点之间的数据包传输。
路由器LAN口连接的主机, 都从属于当前这个路由器的子网中。
① 从运营商机房拉出的网线插在了家用路由器的WAN口上。
② 个人设备是插在家用路由器的LAN口上。
其次,我们需要知道网络数据的五元组信息。
源ip、目的ip、源端口、目的端口、协议。
在路由设备中都会有一个路由表,路由表记录了当前的路由项,用route命令查看:
那么路由器是如何进行网络转发的呢?
首先用网络数据中的目的ip和路由项当中的子网掩码进行按位与操作(需要注意的是,该目的ip先和非网关的路由项进行操作,最后再和网关路由项进行操作)。
其次将按位与操作的结果和路由项的Destination进行对比
① 如果说没有对比上,则代表该条数据不是往该子网当中进行转发。
② 如果说对比上了,则代表该条数据是往该子网当中的某一个主机进行转发的。
需要注意的是:
① 如果该条数据的目的ip是当前子网的某一主机,则不需要WAN的转发,直接走路由器的LAN口
② 如果该条数据的目的ip是互联网当中的某一个主机,则需要经过WAN口的转发,传输到上级路由器再进行路由。
③ 路由表也是需要更新的。
路由的过程, 就是这样一跳一跳(Hop by Hop) “问路” 的过程。所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源MAC地址到目的MAC地址之间的帧传输区间。
IP数据包的传输过程也和问路一样。
当IP数据包, 到达路由器时, 路由器会先查看目的IP。
路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器。
依次反复, 一直到达目标IP地址
以上就是今天要讲的内容,本文详细介绍了网络层IP协议保证传输效率和可靠传输的方法,网络提供了大量的方法供我们使用,非常的便捷,我们务必掌握。希望大家多多支持!另外如果上述有任何问题,请懂哥指教,不过没关系,主要是自己能坚持,更希望有一起学习的同学可以帮我指正,但是如果可以请温柔一点跟我讲,爱与和平是永远的主题,爱各位了。加油啊!