四、网络层
四、网络层
4.1IP协议
网际协议 IP 是 TCP/IP 体系中两个最主要的协议之一。
与 IP 协议配套使用的还有三个协议:
地址解析协议 ARP (Address Resolution Protocol)
网际控制报文协议 ICMP (Internet Control Message Protocol)
网际组管理协议 IGMP (Internet Group Management Protocol)
IP服务的特点
IP协议是TCP/IP协议族的基石,它为上层提供无状态、无连接、不可靠的服务
无状态:指IP通信双方不同步传输数据的状态信息,因此所有IP数据报的发送,传输,接收都是相互独立的。这种服务最大缺点是无法处理乱序和重复的IP数据报。优点是简单高效,和UDP协议与HTTP协议相同,都是无状态协议。
无连接:指IP通信双方都不长久的维持对方的任何信息。这表示上层协议每次发送数据,都需要明确指定对方的IP地址。
不可靠:指IP协议不能IP数据报能准确到达接收端,只是会尽最大努力。一旦发送失败,就通知上层协议,而不会试图重发。
4.1.1 IPv4
IPv4头部结构
4位版本号:指定IP协议的版本,对于IPv4来说,其值为4,其它IPv4扩展版本则具有不同的版本号(如SIP协议和PIP协议)
4位头部长度:表示IP头部有多少个32bit字(4字节)。因为4位最大15,所以IP头部最长为60字节。
8位服务类型:3位优先级权字段(现已被忽略),4位TOS字段和1位保留字段(必须置0).4位TOS字段分别表示:最小延迟,最大吞吐量、最高可靠性和最小费用,其中最多1个能置为1。
16位总长度:指整个IP数据包的长度,字节为单位。最长65535字节,由于长度超过MTU的数据报将被分片传输,所以实际传输的长度没有达到最大值。
16位标识:唯一标识主机发送的每个数据报。初始值由系统随机生成,每发送一个数据报,其值加一。该值在数据报分片时被复制到每个分片中,因此同一个数据报的所有分片标识值都相同
3位标志:第一位保留,第二位表示禁止分片,如果设置了该位,IP数据报长度超过MTU将被丢弃,返回错误。第三位表示更多分片,除了最后一个分片,其它都要置它为1.
13位分片偏移:该分片相较于原始IP数据报开始处(仅指数据部分)的偏移。实际偏移值是该值左移3位得到。因此除了最后一个分片,每个分片的数据部分长度必须是8的整数倍。
8位生存时间:数据报到达目的地之前允许经过的路由器跳数。每经过一个路由,该值减一,为0时被丢弃。并返回TCMP错误报文。
8位协议:用于区分上层协议。ICMP为1,TCP为6,UDP为17。
16位头部校验和:由发送端填充,接收端对其使用CRC算法检验数据是否被损坏。
32位源端IP地址:标识数据报的发送端。在传输过程中保持不变
32位源目的端IP地址:标识数据报的接收端。在传输过程中保持不变
选项字段:可变长的可选信息,最多40字节。可用的IP选项有:
记录路由:将数据包经由的所有路由器IP填入该段。
时间戳:将数据报在每个路由器被转发时的时间填入该段。
松散源路由选择:指定路由器IP地址列表,数据报发送过程中必须经过其中所有路由器
严格源路由选择:类似上面,数据报只能经过被指定的路由器。
4.1.2 IPv6
IPv6由40个字节的固定头部和可变长的扩展头部组成。
4位版本号:IP协议版本,IPv6值为6
8位通信类型:指示数据通信类型和优先级
20位流标志:用于某些对连接服务质量有特殊要求的通信。
16位净荷长度:指IPv6扩展头部和应用程序数据长度之和,不包含固定头部长度
8位下一个包头:指紧跟IPv6固定头部的包头类型,如扩展头或上层协议。
8位跳数限制:和IPv4的TTL含义相同
后两项IP地址:IPv6地址一般用16进制字符串表示,用‘:’分割为8组,每组两个字节。
4.1.3 IP分片
当IP数据报的长度超过帧的MTU时,它将被分片传输。分片可能发生在发送端,也可能发生在中转路由器上,而且在传输过程中可能被多次分片,只有在最终目标机器上,这些分片才会在内核中被IP模块重新组装。
以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU
IP头部中的数据报标识、标志、和片偏移为IP的分片和重组提供了足够的信息。
一个数据报的每个分片都具有自己的IP头部,且具有相同的标识,但具有不同的片偏移,除了最后一个分片之外都设置了MF标志。
4.1.4 IP路由
1.IP模块收到来自数据链路层的IP数据报,首先对数据报的头部做CRC校验,无误后开始分析头部具体信息。
2.如果IP数据报头部设置了源站选路选项,则IP模块调用数据报转发子模块来处理该数据报。
3.如果该数据报的头部目标IP地址是本机的某个IP地址,或者广播地址,则IP模块根据数据报协议字段来决定发送给哪个上层应用。如果不是本机,则掉用数据报转发子模块来处理该数据报。
4.数据报转发模块检查系统是否允许转发,不允许则丢弃。允许则将该数据报执行一些操作,就将它交给IP数据报输出模块。
5.IP数据报根据路由表计算下一跳路由。
6.IP输出队列存放所有等待发送的IP数据报。
4.1.5 路由机制
1、查找路由表中和数据报的目标IP完全匹配的主机IP地址,如果找到,就直接使用该项,没有就到第二步
2、查找路由表中和目标IP具有相同的网路ID的IP地址,如Gateway,有就使用,否则来到第三步
3、选择默认路由项,这一般为网关。
4.2什么是ARP协议?
ARP协议(Address Resolution Protocol), 全称地址解析协议。其作用是将已知IP地址转换为MAC地址,因为在以太网环境中,数据的传输所依懒的是MAC地址而非IP地址。
每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。ARP缓存(ARP表) 是ARP地址解析协议能够高效运行的关键。
1)主机(网络接口)新加入网络时(也可能只是mac地址发生变化,接口重启等),会发送免费ARP报文把自己IP地址与Mac地址的映射关系广播给其它主机;
2)网络上的主机接收到免费ARP报文时,会更新自己的ARP缓冲区。将新的映射关系更新到自己的ARP表中;
3)某个主机需要发送报文时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机IP地址,源主机MAC地址,目的主机的IP地址等;
4)当本网络的所有主机收到该ARP数据包时:
A.首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包。
B.如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖。
C.然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
5)源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
4.3什么是ICMP协议?
ICMP全称Internet Control Message Protocol,即Internet控制报文协议。它是TCP/IP协议簇的一个子协议,用于在IP主机、 路由器之间传递控制消息。
主要用来检测网络通信故障和实现链路追踪,最典型的应用就是ping和traceroute
Ping:
通过发送回送请求报文和回送回答报文来检测源主机到目的主机的链路是否有问题,目的地是否 可达,以及通信的延迟情况。
Traceroute:
通过发送探测报文来获取链路地址信息。
1)第一个探测报文TTL为1,到达第一个路由器时,TTL减1为0所以丢掉这个探测包,同时向源主机发回ICMP时间超过报文,这时
源主机就获得了第一个路由器的IP地址;
2)接着源主机发送第二个探测报文,TTL增1为2,到达第一个路由器TTL减1为1并转发探测包到第二个路由器,这时TTL再减1
为0,丢掉这个探测包并向源主机发回ICMP时间超过报文,源主机就获得了第二个路由器的IP地址;
3)以此类推,直到探测报文到达traceroute的目的地,这时源主机就获得了到目的地的每-跳路由的IP地址。
4.4 MTU
Maximum Transmission Unit,最大传输单元,指的是数据链路层的最大payload,由硬件网卡设置MTU,是一个硬性限制。
数据链路层的有效数据,最小46byte,最大一般1500byte,这里的最大就是MTU,MTU表示网络层必须将发给网卡API的包 <= 1500byte,否则调用失败
MTU是链路层对网络层的限制,以太网链路的MTU默认是1500byte,意思是以太网数据链路层的有效数据payload的最大字节数不能超过1500,那这1500字节不包含链路层的头部和尾部。
为什么要有MTU?
以太网最初对报文长度没有限制,网络层最大可以接收65535个字节,但是以太网对于长报文无法可靠地传输,而且丢失后重传也会占用大量的网络资源,而将报文限制在一定的长度,以太网可以将报文大概率传输到目的地,于是就有了MTU。