1.3 TCP/IP协议(网络层)

1.3 TCP/IP协议(网络层)

1.概念

处理机器之间的通信,基于IP地址进行不同网络系统间的路径选择。

具体功能包括:

(1)寻址和路由选择。

(2)拥塞控制。

(3)局域网间互相连接。数据包在局域网传递,会面临各种差异,网络层通过一定的调整使网络之间的数据包可以正常传递。

(4)统计和控制。

网络层提供的服务使传输层不需要了解网络中的数据传输和交换技术。

2.主要协议

2.1IP协议

(1)概念

IP是网络层的核心,它负责给互联网的每一台终端分配一个地址,并且将信息以IP包的形式传送到正确的目的地。网络层接收到传输层发来的数据段时,需要通过网络层协议将其封装成数据报,也就是加上网络层IP协议的头部,然后数据报向下传输,到达数据链路层之后必封装成数据帧。

IPv4和 IPv6地址的区别:IPv4地址是4字节,32byte;IPv6地址是16字节,128byte。然而IPv6正处在不断发展和完善的过程中,它在不久的将来将取代目前被广泛使用的IPv4。

(2)数据报

网络层的分组是数据报,一个IP数据报由首部和数据两部分组成,其中数据部分就是来自传输层的完整数据段,而报头部分是为了正确传输数据报而增加的网络层IPV4或者IPV6协议信息。

首部的长度是以4个字节为单位,长度可以是20-60字节。

(3)IPv4报文分析

版本:

这4位字段定义了IP协议的版本,若协议是IPV4,则值为0100;若协议是IPV6,则值为01000110。

头部长度:

这4位字段标识IP数据报头部的总长度,IP数据报头部的总长度以4字节为单位(因此报头长度必须是四字节的整数倍,若不是则需要在填充字段中补0凑齐)。

当报头中无选项字段时,报头的总长度为5,即5×4=20字节;当IP头部长度为15时,头部的固定长度为15×4=60字节。

服务类型:

1998年IETF在RFC2474中把IP数据报中ToS字段改名为服务字段,同样为8位,前6位构成DSCP(Different Services Code Point,区分服务码点),是IP优先级和服务类型字段的组合,定义了0~63共64个优先级。最后两位未使用,无论是哪种版本,该字段只有在使用区分服务时才起作用,如果没有区分服务,则该字段值为0。

总长度:

此字段标识整个IP数据报的总长度,以字节为单位。

总长度-头部总长度=数据部分的长度

由于该字段占16位,所以IPv4数据报的最大长度为2^16=65536字节。

标识:

这16位字段标识了从源主机发出的每一个数据报,每个IP数据报都有唯一的标识符。当数据报长度超过下层数据链路层的MTU(最大传输单元)值而必须分片的时候,这个标识符的值就被复制到所有的数据报分片的标识字段中。这样数据报虽然被分片了,但是到达目的地后就能根据标识号将同一个数据报的分片重新组装成一个数据报。

标志:

标志字段用以指出该IP数据报后面是否还有分片,占3位,目前只有前两位有意义,最高位没有使用。

最低位MF(MoreFragment),若MF=1,则表示后面还有分片;若MF=0,则表示这是最后一个分片。

中间位DF(Don’t Fragment),当DF=1,则表示不允许分片;当DF=0,则表示允许分片。

分片偏移:

这13位字段表示分片在整个数据报中的相对位置。这是数据在原始数据报中的偏移量,以8个字节为偏移单位,即每个分片的长度一定是8字节(64位)的整数倍。

生存时间:

这8位字段用来控制数据报所经过的最大跳数(路由器),每经过一个路由器,这个字段数值都减1,当它的值为0时,路由器就会丢弃这个数据报。设定生存时间是为了防止数据报在网络中无限制地循环转发。

协议:

这8位字段标识了使用IPv4服务的高层协议,如TCP,UDP,ICMP等的数据都将被封装到IP数据报中。这个字段指明了数据报必须交付给哪个最终目的协议。

如:1表示ICMP,2表示IGMP,6表示TCP,17表示UDP。

首部校验和:

这16位字段用来检验IP数据报的首部在传输过程中是否发生了变化。

需要注意的是:首部检验和字段,仅仅对数据报首部进行差错检查。

源地址:

表示该IP数据报发送者的IP地址,4字节,保持不变。

目的地址:

表示IP数据报接受者的IP地址,4字节,保持不变。

选项:

选项字段支持各种选项,根据选项的不同,该字段从1字节到40字节不定。

2.2ICMP协议

(1)概念

ICMP是什么?

ICMP(Internet Control Message Protocol)Internet控制报文协议,它是IPv4协议族中的一个子协议,用于IP主机、路由器之间传递控制消息。由于IP协议是一种不可靠的、无连接的协议,不具备差错报告和差错纠正机制,因此依赖于ICMP协议来处理IP数据报传输过程中的错误并提供管理和状态信息。

触发过程

当数据报在传输过程中发生错误时,主机或者路由器的ICMP模块将被触发,并产生一个ICMP报文。

ICMP报文的传输

ICMP协议依靠IP协议来传输,所以ICMP报文是封装在IP数据报的数据部分进行传输的。

ICMP报文分类

差错报告报文包括:目的不可达、源主机消亡、超时、参数问题、重定向。

查询报文包括:回应请求和应答、信息请求和应答(已弃用)、时间戳和时间戳应答、地址掩码请求和应答、路由器通告和请求。

(2)ICMP报文

ICMP报文由首部和数据部分组成。首部为定长的8个字节,前4个字节是通用部分,后4个字节随报文类型的不同有所差异。ICMP报文的一般格式如下图所示:

类型字段Type:

长度是1字节,用于定义报文类型,如请求(Type=8)、应答(Type=0)。

代码字段Code:

长度是1字节,表示发送这个特定报文类型的原因。

校验和字段Checksum:

长度是2字节,用于数据报传输过程中的差错控制。与IP报头校验和的计算方法类似,不同的是它对整个ICMP报文进行校验

(3)实例分析ICMP报文

在本机192.168.1.101使用ping 192.168.1.100命令,用Wireshark抓ICMP报文:


可以看到,一共8个报文,选择第一个报文进行分析。

先看报文的整体描述:

可以看到这个请求报文共74字节,其中前14个字节是以太网报文,包括源MAC地址(6字节)、目标MAC地址(6字节)、类型(2字节)。剩下的60字节就是IP数据报了。

接着看IP报文:

可以看到这是IPv4报文,报头是20字节,报文总长度是60字节,这说明IP数据报数据部分长度是40字节。由于ICMP报文是封装在IP数据报的数据部分进行传输的,也就是说这个IMCP报文是40字节。

接着看ICMP报文:

可以看到这是一个请求(Type=8)报文,ICMP报头是8字节,数据部分是32字节,该ICMP报文总长度是40字节。

2.3ARP协议

(1)概念

ARP是正向地址解析协议,用于实现从IP地址到MAC地址的映射,即询问目标IP对应的MAC地址。在网络通信中,主机和主机通信的数据包需要依据OSI模型从上到下进行数据封装,当数据封装完整后,再向外发出。所以在局域网的通信中,不仅需要源目IP地址的封装,也需要源目MAC的封装。所以需要通过ARP协议来取得目的主机的MAC地址,完成数据封装。

(2)ARP协议原理

利用GNS3创建4台PC,并且都连接到一个交换机,如下图:

给PC1,PC2,PC3,PC4配置ip分别是:

PC-1> ip 192.169.0.1 255.255.255.248

PC-2> ip 192.169.0.2 255.255.255.248

PC-3> ip 192.169.0.3 255.255.255.248

PC-4> ip 192.169.0.4 255.255.255.248

之后用PC1去pingPC4,用Wireshark抓包分析:

继续看两个ARP包的内容:

可以清晰看到,主机PC1在网络发送了一个广播,携带着它的IP和MAC地址,以及目标主机PC4的IP地址和“ff.ff.ff.ff.ff.ff”这种MAC地址。意思是:向同一网段内的所有主机发出询问:“192.169.0.4是谁?请告诉192.169.0.1”。此时网络上其他主机一看IP地址不是自己,所以不会响应ARP的询问,只有PC4接收到这个帧后,才通过单播向主机PC1做出回应:“192.169.0.4的MAC地址是00-50-79-66-68-03”。

这样,PC1就知道了PC4的MAC地址,就可以向PC4发送信息了。同时它还更新了自己的ARP缓存表,下次再向PC4发送信息时,直接从ARP缓存表里查找就可以了。

ARP缓存表采用了老化机制,在一段时间内如果表中的某一行没有使用,就会被删除,这样可以大大减少ARP缓存表的长度,加快查询速度。









猜你喜欢

转载自blog.csdn.net/southwind0/article/details/80148563
1.3
今日推荐