目录
网络层介绍
一.协议头格式
1.属性介绍
2.第二行16位标识,3位标志,13位片偏移 介绍
(1)网络层分片
①网络层进行分片不是主流!
②如何做到减少分片呢? ? ?网络层是否分片,是否由网络层决定? ?
(2)分片组装
(3)分片对UDP和TCP有影响吗?
二.网段划分(重要)
1.IP地址构成
2.网段划分
(1)介绍
(2)为什么要网段划分?
3.私有IP地址和公网IP地址
(1)介绍
(2)NAT技术——大大缓解IP不足的创举
4.路由
应用层:读取完整报文&&序列化&&协议处理问题。(数据提取出来--处理数据)
传输层(tcp/udp):解决可靠性。提供流量控制,超时重传等策略。
网络层(IP)提供的是: 将数据从A主机 跨网络 送到B主机 的能力。传输层(TCP):保证可靠性。
TCP/IP ——>可靠的将数据从A主机,跨网络送到B主机

IP协议
基本概念
主机: 配有IP地址, 可以进行路由控制的设备;
路由器: 即配有IP地址, 又能进行路由控制;
节点: 主机和路由器的统称;

链路成有发送单个数据帧的最大值约束,所以,我们不能发送太大的IP报文,如果要发的IP报文很大,就需要网络层自己分片,再交付给数据链路层。
对IP进行分片,由谁来做?——发送方的网络层来进行分片(就好比你要顺丰帮你寄一个10公斤的电脑,顺丰不可能给你拆开分包裹,到时候组装不起来是要担责任的,应该是你自己拆电脑,然后分成5个包裹让顺丰寄)
全部收到之后,由谁来组装?——对方的网络层进行组装
无论是对发送方还是接受方, 分片和组装行为,双方的传输层,知道吗?——不需要知道,也不关心。网络层和传输层的功能解耦!
解释:网络层分片不利于网络可靠传输,网络层进行分片,假设一段3000字节数据分成3份,向传输层交付时,只要一份丢包了,就算整个数据包丢失了。即1个报文丢包和3个报文丢包,后者概率更大。所以一但只要网络层进行分片,就会增加丢包率。(不建议分片!!)
网络层是否分片,不是由网络层决定,而是由传输层决定!减少分片——传输层要考虑别传太大的报文。分片之后。每一个分片也是一个独立的IP报文, 也要有报头。一般在三次握手的时候, 就会协商单次传输数据的报文大。
16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个id都是相同的.
3位标志字段: 第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到). 第二位置为1表示禁止分片(关闭分片功能), 这时候如果报文长度超过MTU, IP模块就会丢弃报文. 第三位表示"更多分片", 如果分片了的话, 最后一个分片置为0, 其他是1. 类似于 “字符串以\0结尾”的 结束标记。(最后一个更多分片虽然是0,但是如果分片了的话,13位片偏移一定不是0!)
13位片偏移(framegament offffset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).

组装:
1.先要识别该报文是被分片的!——3位标志字段+13位片偏移。最重要的属性是“更多分片”,识别该报文是否被分片,看“更多分片”是1就是分片;如果“更多分片”是0,再看“13位片偏移”,如果“13位片偏移”不为0则是分片,如果为0则不是分片。即:( 更多分片==1 )||( 更多分片==0&& 偏移!=0 )
2.将序号相同的报文先得收集在一起。——16位标识(id) 相同的就收集起来
3.如何正确的组装。——按 13位片偏移 从小到大排序组装起来。

你怎么保证你收集到最后一个了? ——“更多分片”是1挨个组装,直到拿到“更多分片”是0就代表收集完了。
如果丢包了,你怎么保证你收全了? ?——13位片偏移 从小到大排序组装起来,中间丢包时:每个报文的偏移量+自身长度=下一个报文偏移量,如果不等就是少了丢包了。开头丢包时:第一个报文片偏移不是0,就说明开头丢了。 结尾丢包时:。最后一个报文的“更多分片”不是0就说明结尾丢了。
当然有影响,增加丢包概率,但是 tcp有可靠性 影响不大,udp影响很大 ip分片会直接影响到UDP
FF:FF:FF:FF 类似于学号: 202019040108
目的网络 目的主机 院系班 学生序号
IP在路由的时候,在路上的时候,先根据目的网络进行路由,找到目标网络之后,然后再根据目的主机的主机号,进行数据转发!

曾经一定有角色已经将我们全球的IP进行过地址划分
历史产物:过去曾经提出一种划分网络号和主机号的方案, 把所有IP 地址分为五类, 如下图所示(该图出自[TCPIP])。

例子:



以学校为例,想通过学号找到经管学院的一个人很简单,直接看学号前四位找到对应的经管专业,即排除了其他专业,再看后四位找到班级和个人序号。
发送数据的本质:就是先要找到目标机器(目标网络+目标主机)
——>找的本质就是排除的过程!!
——>子网划分,一次排除一大批的子网
——>为什么要网段划分?便于查找——查找目标主机的效率提高!

一个路由器可以配置两个IP地址, 一个是WAN口IP, 一个是LAN口IP(子网IP).
路由器LAN口连接的主机, 都从属于当前这个路由器的子网中.
不同的路由器, 子网IP其实都是一样的(通常都是192.168.1.1). 子网内的主机IP地址不能重复. 但是子网之间的IP地址就可以重复了.
每一个家用路由器, 其实又作为运营商路由器的子网中的一个节点. 这样的运营商路由器可能会有很多级, 最外层的运营商路由器, WAN口IP就是一个公网IP了.
子网内的主机需要和外网进行通信时, 路由器将IP首部中的IP地址进行替换(替换成WAN口IP), 这样逐级替换, 最终数据包中的IP地址成为一个公网IP. 这种技术称为NAT(Network Address Translation,网络地址转换).
如果希望我们自己实现的服务器程序, 能够在公网上被访问到, 就需要把程序部署在一台具有外网IP的服务器上. 这样的服务器可以在阿里云/腾讯云上进行购买.
IP数据包的传输过程也和问路一样. ●当IP数据包, 到达路由器时, 路由器会先查看目的IP; ●路由器决定这个数据包是能直接发送给目标主机, 还是需要发送给下一个路由器; ●依次反复, 一直到达目标IP地址; 那么如何判定当前这个数据包该发送到哪里呢? 这个就依靠每个节点内部维护一个路由表; [唐僧问路例子2] ●路由表可以使用route命令查看
●如果目的IP命中了路由表, 就直接转发即可;
●路由表中的最后一行,主要由下一跳地址和发送接口两部分组成,当目的地址与路由表中其它行都不匹配时,就按缺省路由条目规定的接口发送到下一跳地址。 假设某主机上的网络接口配置和路由表如下:
Destination:子网网络号,直接连接的网络的IP地址(172 .28.64.0)。 Gateway:网关—缺省的默认路由器。
Genmask:子网掩码 Flags:U-条目有效,G-是路由器。 Iface:网络接口。(接发数据)
●这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到 192.168.56.0/24网络; ●路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发; 转发过程例1: 如果要发送的数据包的目的地址是192.168.56.3 ●跟第一行的子网掩码做与运算得 到192.168.56.0,与第一行的目的网络地址不符 ●再跟第二行的子网掩码做与运算得 到192.168.56.0,正是第二行的目的网络地址,因此从eth1接口发送出去; ●由于192.168.56.0/24正 是与eth1 接口直接相连的网络,因此可以直接发到目的主机,不需要经路由器转 发; 转发过程例2: 如果要发送的数据包的目的地址是202.10.1.2 ●依次和路由表前几项进行对比, 发现都不匹配; ●按缺省路由条目, 从eth0接口发出去, 发往192.168.10.1路由器; ●由192.168.10.1路由器根据它的路由表决定下一跳地址; 路由表生成算法(选学) 路由表可以由网络管理员手动维护(静态路由), 也可以通过一些算法自动生成(动态路由). 请同学们课后自己调研一些相关的生成算法, 例如距离向量算法, LS算法, Dijkstra算法等. 数据链路层 用于两个设备(同一种数据链路节点)之间进行传递. 对比理解 "数据链路层" 和 "网络层" [唐僧例子之白龙马] 认识以太网