1 网络层
网络层作用:在复杂的网络环境中确定一个合适的路径。
tcp/ip协议,tcp解决可靠性与效率,ip提供在网络中传输的能力。
传输层决定了单次向下交付数据包的大小。
IP协议
IP(Internet Protocol)协议是一种网络层协议,用于在互联网上进行数据传输。它定义了数据如何在网络中进行分组、寻址和路由。IP协议是互联网的核心协议之一,它为互联网上的每个设备分配一个唯一的IP地址,以便进行数据交换。
主机: 配有IP地址, 但是一般不进行路由控制的设备
路由器: 即配有IP地址, 又能进行路由控制
节点: 主机和路由器的统称
协议头格式
封装和解包:定长报头+自描述字段
如何交付(分用):报头的8位协议:udp or tcp
4位版本号(version): 指定IP协议的版本, 对于IPv4来说, 就是4.
4位头部长度(header length): IP头部的长度是多少个32bit, 也就是 length * 4 的字节数. 4bit表示最大的数字是15, 因此IP头部最大长度是60字节.
8位服务类型(Type Of Service): 3位优先权字段(已经弃用), 4位TOS字段,和1位保留字段(必须置为0).
4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于
ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要.
- 16位总长度(total length): IP数据报整体占多少个字节.
16位标识(id): 唯一的标识主机发送的报文. 如果IP报文在数据链路层被分片了, 那么每一个片里面的这个
id都是相同的.3位标志字段:
第一位保留(保留的意思是现在不用, 但是还没想好说不定以后要用到)
第二位置为1表示禁止分片, 这时候如果报文长度超过MTU, IP模块就会丢弃报文.(比如配合管理工作做MTU的大小探索时)
第三位表示"更多分片", 如果分片了的话,最后一个分片置为1, 其他是0. 类似于一个结束标记.
13位分片偏移(framegament offset): 是分片相对于原始IP报文开始处的偏移. 其实就是在表示当前分片在原报文中处在哪个位置. 实际偏移的字节数是这个值 * 8 得到的. 因此, 除了最后一个报文之外, 其他报文的长度必须是8的整数倍(否则报文就不连续了).
8位生存时间(Time To Live, TTL): 数据报到达目的地的最大报文跳数. 一般是64. 每次经过一个路由, TTL -= 1, 一直减到0还没到达, 那么就丢弃了. 这个字段主要是用来防止出现路由循环
8位协议: 表示上层协议的类型
16位头部校验和: 使用CRC进行校验, 来鉴别头部是否损坏.
32位源IP地址和32位目标IP地址: 表示发送端和接收端.
选项字段(不定长, 最多40字节): 略
链路层由于物理特征的原因,一般无法转发太大的数据,链路层有一次可以转发到网络的报文大小的限制(默认1500字节,MTU,最大传输单元)。
分片:将一个比较大的ip报文,拆分成为多个小的,满足条件的报文。分片的行为是网络层做的,同样组装的行为也必须由对方的网络层做。
为什么要组装?
对方给自己的网络层是一个完整的TCP报文,接收方,在网络层向上交付也必须是一个完整的报文。协议的一致性,也减少了协议编写和维护的成本。IP分片和组装的行为TCP是不知道也不关心的。
分片是如何做到的?
在网络层中,分片是通过IP协议来实现的。IP协议定义了将数据包分割成较小的片段并在网络上进行传输的机制。 以下是分片的工作过程:
数据包分割:发送端将较大的数据包分割成较小的片段,每个片段称为分片。每个分片都包含IP头部和一部分数据。
分片标识:每个分片都被赋予一个唯一的标识号,以便接收端能够将它们重新组装成原始的数据包。这个标识号存储在IP头部的标识字段中。
分片偏移:每个分片还包含一个分片偏移字段,指示该分片在原始数据包中的位置。这个偏移值用于确定分片的顺序以及它们在重新组装时的位置。
分片大小:每个分片都有一个最大长度限制,这是由网络的最大传输单元(MTU)决定的。如果数据包的大小超过了MTU的限制,就需要进行分片。
分片传输:分片被单独发送到目的地,通过网络传输。每个分片都独立地经过路由器和其他网络设备,可能会采取不同的路径到达目的地。
分片重组:接收端收到分片后,根据IP头部的标识号和分片偏移字段,将它们重新组装成原始的数据包。接收端使用这些信息确定分片的顺序和位置,以正确地重建原始数据包。
需要注意的是,由于网络的不可靠性,分片的丢失或延迟可能会导致数据包无法正确重组。因此,网络层的分片机制需要依赖上层的传输层协议(如TCP)来确保数据的可靠传输。
分片严重不推荐,分片的坏处:
- 丢包是有概率的,分片会增大丢包的概率
网段划分
每个国家的IP地址,在开始的时候,就已经被划分好了,国际上的路由器都有自己的路由表,可以进行国家和国家的转发。
IP地址分为两个部分,网络号和主机号
- 网络号:保证相互连接的两个网段具有不同的标识
- 主机号:同一网段内,主机之间具有相同的网络号,但是必须有不同的主机号
- 不同的子网其实就是把网络号相同的主机放到一起
- 如果在子网中新增一台主机,则这台主机的网络号和这个子网的网络号一致,但是主机号必须不能和子网中其他主机重复。
划分原因
- 便于定位
- 提高查找效率
DHCP
通过合理的设置主机号和网络号,就可以保证在相互连接的网络中,每台主机的IP地址都不相同。
手动管理子网内的IP,是一个相当麻烦的事情。
有一种技术叫做DHCP,能够自动的给子网内新增主机节点分配IP地址,避免了手动管理IP的不便
一般的路由器都带有DHCP的功能,因此路由器也可以看做一个DHCP服务器
CIDR:基于子网掩码的划分方式
过去曾经提出一种划分网络和主机号的方案,把所有IP地址分为五类。分类划分法:
- A类 0.0.0.0到127.255.255.255
- B类 128.0.0.0到191.255.255.25