发送报文->我们需要进行路径选择
主机和路由器统称为节点
IP协议:解决什么问题呢?
提供一种能力,将数据包跨网络从B发送到A主机
目标地址=所在城市+目标景点
IP地址=目标网络+目标主机
在学习网络时认识
1.网络不是凭空产生的,是有人为我们建设的
2.网络世界时精心设计的,像OS
IP报头
1.如何分离
4位首部长度 【0,60】标准报头大小20
16位总长度 = 4位首部长度(报头+选项) + 数据
2.如何分用
4位版本: IPV4 / IPV6
8位协议:发送方填充,对方识别,决定是用udp/tcp通信
8位服务类型(Type Of Service): 3位优先权字段(已经弃用),4位TOS字段,和1位保留字段(必须置为0).4位TOS分别表示: 最小延时,最大吞吐量,最高可靠性,最小成本,这四者相互冲突,只能选择一个.对于ssh/telnet这样的应用程序,最小延时比较重要; 对于ftp这样的程序,最大吞吐量比较重要.
8位生存时间:报文经过路由器所经历的跳数,防止报文环路问题,当报文每经过一个路由器就将生存时间减减,为0,直接丢弃该报文
32位源IP:发送端IP
32位目的IP:目的端IP
16位标识 3位标志 13位片标识
数据链路层规定,单个数据帧不能太大
mtu:最大传输单元 上图为1500字节,代表ip的报文不能超过1500字节
如果此时IP就要发送3000的报文,这就要求网络层ip学会,分片与组装,同层网络层发送方分片,接受层组装。
我们接下来谈的三个字段就是为了实现分片与组装
网络层ip的分片策略是无奈的,分片策越会使得丢包效率变得更高,1个报文分成10个报文去发,在传输途中如果丢了一片,接收方就无法组装,这时候就需要补发10个报文,使得传输效率遍变低
那么如何做到不分片呢,这时候就要去要求传输层
tcp发送报文,不能只按照接收方的缓冲区接收能力,去直接发一整个大报文,而是按照自己的切片可能性,设置自己报文的大小。
如果mtu为1500,在不考虑ip与tcp报文中的选项,他们的报头都是20字节,也就是说传输层发送的最大数据大小就是1460,它叫做MSS(最大数据段尺寸)
16位标识
如果报文被分片了,16位标识都是相同的
3位标记
第一位1表示保留;留给后面用
第二位1表示禁止分片:表示如果报文超过了mtu,该报文应该被直接丢弃
第三位1表示“更多分片”:分片的最后一片为0,表示一个报文分片的最后一个分片,在此分片之前该值都为1
13位片偏移
分片相对于原始IP的开始处的偏移,表示分片在原报文的所处的哪个位置,要*2的3次方得到相对于报文的实际位置
尝试下分片
例如一个ip报文3000字节,mtu为1500。
尝试下组装
0.你怎么知道上层报文分片
看到报文的3位标志,更多分片为1,证明分片,如果是结尾分片,查看片偏移。
按照16为表示,收集相同报文的分片
1.首先我得保证分片收全了
a.首先第一个切片的13位片偏移为0,如果切片中没有13位片偏移为0的切片,则没有头部切片,
b.我们按照报文中16位总长度是知道报文总大小的,13位片偏移*2的3次方,再加上头部切片报文总大小,就可以知道下一个切片的片偏移应该为多少,
下一个切片再用,第二个切片的有效载荷大小加上13为片偏移找到,依次类推 (第二个切片是多加了一个报头的)
最后一个切片依靠他的3位标志第三位为0。
2.正确按序组合
按照片偏移与3位标志即可
网段划分(重要)
路由器既属于上一个子网,又属于下一个子网,主机标识往往是1
例如:我们的路由器一端是自己构建的子网,另一端是运营商的子网
路由器不仅构建子网,还对子网中的IP进行分配管理(DHCP)
1.网段划分是什么?
然而我们根本不会存在子网有这么多的情况
新的划分方案CIDR
IP地址与子网掩码按位与得到网络号
子网掩码会在路由表中
像B类地址,8位主机号根本用不到,让主机号的前8位作为网络号的一部分,这样就可以在一个B类网络再构建出2的8次方子网。
子网掩码就提高了网络号的利用率
私有IP地址和公网IP地址
私有IP地址:构建局域网
公网IP地址:构建Internet
如果一个组织内部组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上 使用任意的IP地址都 可以,但是RFC 1918规定了用于组建局域网的私有IP地址
10.,前8位是网络号,共16,777,216个地址
172.16.到172.31.,前12位是网络号,共1,048,576个地址
192.168.,前16位是网络号,共65,536个地址
包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP);
2.为什么要设计网段划分?
1.提高定位和查找主机的效率
根据目标网络进行路由
运营商角色
2.内网ip不能出现在公网中,不同的子网ip允许重复,大大缓解了IP资源不足的问题.
那么内网ip怎么达到公网呢?
任何一个内网路由器,在转发的时候会将报文中src ip地址替换成自己的WAN口ip。(NAT技术)重要
那么如何从路由器到我们这台主机呢?
我们知道我们源IP到达公网是由路由器进行更换的,但是路由器不仅仅做了替换,路由器还构建了一张NAT转化表,内网ip与公网ip的转换互为键值(一一对应)
所以路由器可以做到内网ip到公网ip的转换,同时做到了当接收报文时,将公网ip替换成内网ip,当报文返回时,就可以通过这张转化表原路返回。
路由器还有可能将端口号替换了
当一个子网内两台主机的不同进程的端口号相同时,如果路由器不去更改端口号,转换成的公网ip+端口号是相同的,因为此时公网ip是同一个路由器Wanc号
由于转换表需要一一对应,所以得更换到公网的端口号。
路由器映射关系很多
家庭路由器&&企业路由器
NAT技术
NAT技术是解决IP不够用的主要手段,是路由器的必备技术
a.NAT路由器将源地址从10.0.0.10替换成全局的IP 202.244.174.37;
b.NAT路由器收到外部的数据时,又会把目标IP从202.244.174.37替换回10.0.0.10;
c.在NAT路由器内部,有一张自动生成的,用于地址转换的表;d.
当 10.0.0.10 第一次向 163.221.120.9 发送数据时就会生成表中的映射关系;
NAT技术的缺陷
1.由于NAT转换表是由内网主机向外网发送消息建立的,外网主机无法直接访问内网主机。
2.NAT设备出现异常,所有TCP通信都会断开
从家里出去的网是直接到公网吗?
大概率不是,要先到运营商的局域网中
真实的网络情况: 公网+私网(家用网络和运营商私网)构建的网络拓扑结构
3.怎么做到利用网段划分?
路由
ip=目标网络+目的主机
每经过一个路由器都会匹配一下网络号
route命令查看路由表
将目标ip与对应的掩码按位与再与Destination对比
当查看路由表之后没找到,会去default路由
由此可知,
网络层ip提供一种能力,将数据包跨网络从B发送到A主机,跨网络就是无数次局域网转发。
但是数据是怎么在局域网中转发的
数据链路层。。。
那么IP解决了什么问题呢?->IP解决的就是从哪去哪的问题。路径选择和路由的问题
传输层可靠性保护
而应用层只要考虑如何处理数据
标签:ip,协议,公网,IP,报文,讲解,分片,路由器 From: https://blog.csdn.net/bossface/article/details/143580937