目录
在复杂的网络环境中确定一个合适的路径
主机:配有IP地址但能进行路由的设备
路由器:配有ip地址,又能进行路由控制的设备
节点:主机与路由器的统称
协议头格式
4位版本:指定ip协议版本,IPv4就是4
4位首部长度:属于IP协议部分的长度,也就是总长度减去数据部分,因为数据部分是来自网络层以上的其他层。单位为4字节,也就是首部长度有多少个4字节,范围最大为15,所以IP包头长度最大为15*4=60字节
8位服务类型,3位优先权字段(已弃用),4位TOS字段,分别表示最小延时, 最大吞吐量, 最高可靠性,最小成本。四个相互冲突,因此是四选一。还有一位保留字段(必须置0)
16位总长度:表示整个IP报文的总长度,也就是IP数据报头+来自上层的数据
16位标识(id),唯一的标识主机发送的报文,如果ip报文在数据链路层被分片可通过这个相同的id进行重组
13位片偏移:分片后某分片相对于原始ip报文的偏移量,标识处在第几个位置,但是这个片偏移是实际位置是/8得到的,因此除了最后一个分片,其他分片的长度都必须是8的整数倍。
8 位生存时间:数据报到达目的地的最大报文跳数
8 位协议:标识上层协议类型(及传输层协议类型udp/tcp)
16 位头部校验和: 使用 CRC 进行校验, 来鉴别头部是否损坏
32 位源地址和 32 位目标地址: 表示发送端和接收端
网段划分
IP地址分为两部分,网络号与主机号:
例如IP地址:118.24.128.127:8080可以标识全网唯一一个主机+端口
其中前三个数表示的是网络号,第四个数是主机号
网络号用来保证相互连接的两个网络拥有不同的标识
主机号用来区分同一网段内的不同主机
不同的子网其实就是把网络号相同的主机放到一起
如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网中的其他主机重复
通过合理设置主机号和网络号, 就可以保证在相互连接的网络中, 每台主机的 IP 地址都不相同
过去曾经提出一种划分网络号和主机号的方案, 把所有 IP 地址分为五类
随着网络的发展,大部分组织都申请B类地址导致B类很快就用完了但是A类却有很大的浪费
针对这种情况提出了新的划分方案, 称为 CIDR(Classless Interdomain Routing)
1.引入子网掩码来标识网络号与主机号
2.子网掩码是一个正整数,尾部通常以一串0结尾
3.将ip地址与子网掩码进行与操作就可以得到网络号,而后面的就是主机号
例如:
ip: 111100111000111
mask: 111111111110000
网络号: 11110011100000
那么子网范围就是固定网络号,ip地址的后面几位从全0到全1就是主机号
特殊的ip地址
1.将 IP 地址中的主机地址全部设为 0, 就成为了网络号, 代表这个局域网
2.将 IP 地址中的主机地址全部设为 1, 就成为了广播地址, 用于给同一个链路中相互连接的所有主机发送数据包
3.127.*的 IP 地址用于本机环回(loop back)测试,通常是 127.0.0.1
IP地址的数量限制
IPv4是一个二进制32位的整数,也就是说,他的范围只有2^32,最多也只有43亿个数
但是实际上由于特殊ip的存在以及每个网卡都要配置一个或多个导致实际可使用的远不足43亿
CIDR在一定程度上缓解了不足,但是并没有增加绝对上限
这时候就有三种方法可以用来解决
1.动态分配 IP 地址: 只给接入网络的设备分配 IP 地址. 因此同一个 MAC 地址的设备, 每次接入互联网中, 得到的 IP 地址不一定是相同的
2.NAT技术
3.IPv6,但是ipv6与ipv4毫不相干,彼此不兼容。ipv6最大有128位表示一个地址,但是ipv6并没有普及
私有ip与公网ip
如果一个组织内部组建局域网只使用只在内部使用而不访问互联网,那么就可以选择使用任何ip地址,但是 RFC 1918 规定了用于组建局域网的私有 IP 地址
1. 10.*,前 8 位是网络号,共 16,777,216 个地址
2. 172.16.*到 172.31.*,前 12 位是网络号,共 1,048,576 个地址
3. 92.168.*,前 16 位是网络号,共 65,536 个地址
在这个范围内都成为私有ip,其他的都是共网ip
1.一台路由器有两个IP地址,一个wan口,一个lan口(子网ip)
2.路由器lan口连接的都属于这个子网
3.不同的路由器其实子网ip都一样(通常都是 192.168.1.1),子网内的ip地址不能重复,但是子网间可以,因为互不影响
4.每一个家有路由器又作为运营商路由器的一个子网ip,运营商路由器会有很多层,最外层的运营商路由器,wan口ip就是公网ip
5.子网内的主机需要和外界通信时,路由器会将ip首部的ip地址进行替换(替换为wan口ip),这样的技术叫做NAT技术(Network Address Translation,网络地址转换)
6.如果希望我们的服务器程序能够在公网上被访问到,就需要一台具有公网ip的服务器
路由
在网络结构中寻找一条通往终点的路线,就像我们有源ip,有目的ip
ip数据包传输也是如此,如果可以直接交给目标主机那么就交给目标主机,如果不行的话就交给下一个路由器,反复如此直到找到目标
也就是说每一台机器里面都有一个路由表,如果在路由表里面查找到了,那么就直接交给目标
如果没找到,就会交给路由器
像这里,当前主机底下可以交给这些ip地址,如果都找不到,那么就会交给default,default的标识的可以交付的ip地址即路由器的IP
其中判断是否能够进行交付是将目的ip与子网掩码(Genmask)进行与操作,并将Destination与子网掩码进行与操作得到的结果进行比较,相同的话那么就交给该对应的Gateway。
路由表的 Destination 是目的网络地址
Genmask 是子网掩码
Gateway 是下一
跳地址
Iface 是发送接口
Flags 中的 U 标志表示此条目有效(可以禁用某些 条目)
G标志表示此条目的下一跳地址是某个路由器的地址,没有 G 标志的条目表示目的网络
地址是与本机接口直接相连的网络,不必经路由器转发