ip协议
功能
ip功能: 将数据从 a 主机经过路径选择送至 b 主机
tcp ip功能:将数据从 a 主机经过路径选择可靠的送至 b 主机(先到达b主机的局域网,找到目标网络–>找到目标主机)
协议头格式
-
4位版本号: 指定ip协议的版本,对于ipv4来说,就是4
-
4位首部长度: ip头部的长度是多少个32bit,也就是length*4的字节数
-
16位标识: 唯一的标识主机发送的报文,如果ip报文在数据链路层被分片了,那么每一片里面的这个id都是相同的。
- 分片之后,每一片都要携带ip报头
- 不建议过多分片,会导致组装不成功,得重传。
- mtu 是最大传送单位,每次发送超过 mtu 就要进行分片
-
3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁 止分片, 这时候如果报文长度超过mtu, ip模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 后一个分片置为1, 其他是0. 类似于一个结束标记。
-
16位头部校验和: 使用crc进行校验, 来鉴别头部是否损坏.
-
8位协议: 表示上层协议的类型
接下来我们讨论几个问题:
1. ip 报文丢失 tcp 是怎么知道的?
答:ip 报文中封装的是 tcp 的内容
2. 怎么将报头和有效载荷分离?
答:有4位首部长度,剩下的都是载荷
3. 为什么要进行分片?
答:mac帧给的规定
4. 怎么将有效载荷交付给上层?
答:8位协议
网段划分
为什么会有网段划分呢?归根结底是为了效率,提高查找效率
ip 地址分为两个部分,网络号和主机号:
- 网络号:保证相互连接的两个网段具有不同的标识
- 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
- 不同的子网,实际上就是把网络号相同的主机放到一起
- 如果在子网中新增一台主机, 则这台主机的网络号和这个子网的网络号一致, 但是主机号必须不能和子网 中的其他主机重复
通过合理设置主机号和网络号,就可以保证相互连接的网络中,每台主机的ip地址都不相同
那么问题来了, 手动管理子网内的ip, 是一个相当麻烦的事情.
- 有一种技术叫做dhcp, 能够自动的给子网内新增主机节点分配ip地址, 避免了手动管理ip的不便.
- 一般的路由器都带有dhcp功能. 因此路由器也可以看做一个dhcp服务器.
过去曾经提出一种划分网络号和主机号的方案, 把所有ip 地址分为五类, 如所示:
- 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
那我们来回答一个问题:
构成子网掩码的条件是什么?
答:1或者0必须连续,1与1之间不能有0,0与0之间不能有1.
私有ip地址和公网ip地址
-
10.*,前8位是网络号,共16,777,216个地址
-
172.16.到172.31.,前12位是网络号,共1,048,576个地址
-
192.168.*,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有ip, 其余的则称为全局ip(或公网ip) -
一个路由器可以配置两个ip地址, 一个是wan口ip, 一个是lan口ip(子网ip).
-
子网内的主机需要和外网进行通信时, 路由器将ip首部中的ip地址进行替换(替换成wan口ip), 这样逐级 替换, 终数据包中的ip地址成为一个公网ip. 这种技术称为nat(network address translation,网络地 址转换).
路由
路由的过程, 就是这样一跳一跳 “问路” 的过程.
所谓 “一跳” 就是数据链路层中的一个区间. 具体在以太网中指从源mac地址到目的mac地址之间的帧传输区间.
ip 数据包的传输过程也和问路一样
- 当ip数据包,到达路由器时,路由器会先查看目的ip
- 路由器决定这个数据包是直接发送给目标主机,还是需要发送给下一个路由器
- 依次反复,一直到达目标ip地址
那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表(检索路径);
- 路由表可以使用 route 命令查看
- 如果目的ip命中了路由表,就直接转发即可
- 路由表中的后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。