ICMP协定和网卡原理 IP协定 阅读器输入一个网址出现了什么 ARP协定 IP模块封装 三

上一节咱们探求了网络信息在协定栈的TCP模块内是如何封装、发送和接纳: 阅读器输入一个网址出现了什么(二) TCP模块封装和传输机制

本节将会补充协定栈中的IP模块对报文的封装,以及网络包是如何经过网卡发送进来计算机。

1. IP模块封装IP头部

当数据报文从TCP模块传递给IP模块时,IP模块须要封装IP头部。IP头部中蕴含以下信息,其中接纳方的IP由TCP模块传递给IP模块,而发送方的IP是什么须要取决于IP模块经过电脑的哪一块网卡发送(由上一节咱们知道IP不是与主机绑定,而是与主机上的网卡绑定,假设主机上有多个网卡,则该主机可以有多个IP)。

为了得悉包由主机上的哪块网卡发送,IP模块会依据指标IP为条件查问本机的“路由表”,该路由表在windows系统中可以经过route print命令显示,如下:

首先IP模块会拿指标ip和第1列字段启动比对,这里的比对不是全值婚配,而是只婚配其网络号。而网络号的位数由第2列字段选择。

例如,当指标IP是192.168.1.21时会婚配到倒数第3行,由于这一行要求比对的网络号是前24位,而192.168.1.21和192.168.1.0的前24位相反,都是192.168.1。同理,假设指标IP是10.10.1.166则婚配到第3行。

假设指标IP与路由表中的一切条目都不婚配,则会婚配到第1行,第一行的网络号全为0,即自动网关(网关实质也是一个转发路由器),也象征着这个包将被发送到局域网中自动的一个路由器,由该路由器启动转发。

第4列Interface代表网卡的网络接口,也就是本机网卡的IP。第3列Gateway代表包要被发送到的下一个路由器的IP。

假设指标IP是192.168.1.21,则会婚配到倒数第3行,此时IP模块会用第4列的10.10.1.16代表的网卡发送包到第3列的10.10.1.2这个路由器。

从上方的路由表来看,该主机只要10.10.1.16这1个IP,1块网卡。

第5列示意从发送方IP到指标IP须要教训多少跳,即包传输的距离。

回到正题,除了发送方IP和指标IP,IP头部还须要填写协定号,它示意包的内容是来自哪个模块的。例如,假设是TCP模块委托的内容,则设置为06(十六进制),假设是UDP模块委托的内容,则设置为17(十六进制),这些值都是依照规定来设置的。

在如今咱们经常使用的阅读器中,HTTP恳求信息都是经过TCP来传输的,因此这里就会填写示意TCP的06(十六进制)。其余字段内也须要填写相应的值,但对大局没什么影响,这里先省略。

2. IP模块封装以太网用的MAC头部

IP头部中的IP地址可以由网络层的IP模块启动识别(当包抵达接纳方的IP模块后,在IP模块中会审核包头部的指标IP地址能否为接纳方的IP地址,假设不是则摈弃包;除了IP地址外,IP模块还会识别IP头部中的其余信息如协定号等)。

然而在以太网(以太网是局域网中的一种)中,有很多设施只要数据链路层而没有网络层,没有IP模块,因此也无法识别IP头部,例如集线器等。此时须要为包减少以太网能识别的MAC头部,如下所示:

MAC头部实践上也是IP模块生成的,它蕴含了接纳方和发送方的MAC地址,此时包从IP包变成以太网包。以太网包的内容不必定是IP包,也可以是ARP包等,可以从MAC头部的以太网类型字段得悉。

MAC地址也是网卡的配件地址。IP和MAC都是网卡的地址,但IP地址是可以灵活变动的,这取决于主机所处的网络环境,而MAC地址是固定的,当网卡消费时就写入到ROM中,在上一步中依据指标IP查问路由表得悉该由哪块网卡发送包后,再从这块网卡中读取MAC地址并写入MAC头部即可。

上方是MAC地址的格局:

得悉发送方的MAC地址容易,那如何得悉接纳方的MAC地址呢?这里须要经常使用ARP协定和广播。

ARP协定(地址解析协定)是一个成功从IP地址到MAC地址的映射,即征询指标IP其对应的MAC地址的协定。ARP协定仅用于IPv4,IPv6则是经常使用NDP(街坊发现协定)。

ARP协定与IP协定处于同一层,也是网络层协定,因此ARP报文是在网络层被封装的网络包。

ARP的上班机制:

ARP表是每个主机内存储着其余机器的IP和MAC地址的映射相关表。经过查问ARP缓存就不用每次查问MAC地址时都去启动ARP恳求广播,从而防止ARP少量广播。然而ARP表中的每条缓存都有自己的有效期,过时则删除,有效期在几分钟到十几分钟。可以经过arp -a命令检查ARP表内容。

回到正题,将指标主机的MAC地址写入到MAC头部之后,MAC包就封装好了,接上去IP模块会将MAC包传递给网卡,网卡对MAC包进一步封装为帧(无论是IP包还是ARP包,都会在网卡被封装为帧之后才发送进来)。

须要留意的是,此时网络包MAC头部的接纳方MAC地址是下一跳路由器的MAC地址而非互联网另一端指标主机的MAC地址。当然假设这个包的指标主机自身就是局域网中的一台机器,那么发送ARP恳求时的ARP头部的指标IP就或许是指标主机的IP而非路由器IP,那么恳求的MAC地址就间接是这个指标主机的MAC地址。

3. 网络包封装成帧

在引见数据包封装成帧并发送之前先引见一下网卡和数据在网卡传输的门路。

网卡和网卡驱动程序

IP模块生成的网络包是存在内存中的一堆数字信息,须要被转为电或光信号能力在网线传输,而网卡担任这一义务。网卡自身是配件,无法成功这些义务,还须要网卡驱动程序对网卡启动操作和控制。

网卡在电脑开机时会启动初始化,初始化时网卡驱动程序会读取ROM中的MAC地址并调配给网卡中的MAC模块,此时网卡的MAC地址才失效。

下图是网卡的结构以及网络包是如何在网卡中解决和发送的:

其中,MAC模块担任将IP包封装为帧,并检测接纳到其余机器发送上来的帧能否正确(FCS校验)以及接纳到的包中的指标MAC地址能否是自己的MAC地址;PHY(MUA)担任将帧从数字信息转为能在网线传输的电信号。

IP模块将以太网包传递给网卡驱动,网卡驱动会将其复制到网卡内的缓冲区,再向MAC模块发送发送包的命令。MAC模块将包从缓冲区取出在扫尾加上报头和起始帧分界符,在末尾加上用于检测失误的帧校验序列,此时网络包被封装成帧。

报头是一串像10101010…这样1和0交替出现的比特序列,长度为56比特,它的作用是确定包的读取机遇。起始帧分界符是一个用来示意包起始位置的标志。末尾的FCS(帧校验序列)用来审核包传输环节中因噪声造成的波形紊乱、数据失误。

4. 向集线器发送网络包

包封装成帧后,MAC模块从报头开局将数字信息按每个比特转换成电信号,而后由PHY,或许叫MAU的信号收发模块发送进来。在网线中实践的输入信号如下

发送信号的操作分为两种,一种是经常使用集线器的半双工形式,另一种是经常使用替换机的全双工形式。

在经常使用集线器的半双工形式中,发送和接纳不能同时启动,PHY(MAU)模块会保障网线中没有其余设施发送信号给自己才会将自己的信号发送进来(假设有则期待其余信号传输完)。假设网线中有其余信号在传输的状况下发送进来自己的信号,则两组信号会出现碰撞。在全双工形式中,发送和接纳能够同时启动。

电信号由PHY(MUA)信号收发模块发送给自己衔接的集线器,再由集线器转发给衔接到该集线器上的一切设施。数据在网络中(局域网中)传递的环节如下:

信号经集线器发给一切设施后,这些设施都会接纳到这个信号,而后由他们的PHY(MUA)模块从电信号转为通用格局给MAC模块。

MAC模块先将信号转为数字信息(恢复为数据帧),而后检测数据帧能否遭到噪声搅扰而紊乱,即把包扫尾到开头的比特套用公式计算出的内容与帧末尾的FCS比对,假设不分歧则会被当做失误包摈弃。

假设FCS校验没疑问,MAC模块会检测包MAC头部的接纳方MAC地址能否是自己的MAC地址,不是则间接摈弃,是则存到网卡缓冲区中。

之后网卡会收回终止信号给CPU。换句话说,计算机不会不时监控网卡的优惠而是在运转其余的义务,因此操作系统是无法得悉包抵达网卡这件事。

因此包抵达后须要由网卡向裁减总线中的终止信号线发送信号,该信号线经过终止控制器衔接到CPU,CPU接纳到终止信号后会挂起正在解决的义务,切换到操作系统的终止解决程序,终止解决程序会调用网卡驱动,网卡驱动从网卡缓冲区取出包交给TCP/IP协定栈。

协定栈中,IP模块会校验IP头部格局能否正确,以及包的头部接纳方IP地址能否是自己的地址,假设不是自己的地址,IP模块会经过ICMP信息将失误告知发送方,但不会将这个包转发给真正的指标IP主机。

接上去须要再说一下ICMP互联网控制协定。

该协定用于在主机和路由器之间发送控制信息,这里的控制信息是指“网络不通”,“主机能否可抵达”等信息,这些信息不传输用户数据。ICMP位于网络层,然而在IP之上,ICMP报文和TCP与UDP一样会被减少IP头部封装为包。ICMP是无衔接的协定。

ICMP的关键性能有两个:

IP包无法抵达指标主机状况下发送ICMP包的流程:

图中,主机A发送了一个IP数据包,其指标地址是主机B。IP包经过路由器1抵达路由器2,假定路由器2和主机B在同一链路,为了依据主机B的IP失掉B的MAC地址,路由器2在局域网内广播了ARP包。由于主机B关机造成该ARP包没有被照应,屡次重发ARP无果后,路由器2会生成一个类型为“指标无法抵达类型”的ICMP包经过路由器1发送主机A。

“指标无法抵达”是其中的一种ICMP信息类型。

关键的ICMP的信息类型如下:

通知类型(十进制数)

详细内容

回送应对(Echo Reply)

指标无法达(Destination Unreachable)

原点克服(Source Quench)

重定向或扭转路由(Redirect)

回送恳求(Echo Request)

路由器通告(Router Advertisement)

路由器恳求(Router Solicitation)

ICMP 超时(Time Exceeded)

地址子网恳求(Address Mask Request)

地址子网应对(Address Mask Reply)

ICMP通知类型分为两类:关于发送失误信息的ICMP报文叫过错报文;关于为了采集信息和性能的ICMP报文叫信息类报文(如ping和traceroute命令所发的ICMP报文)。

ping命令检测两端主机能否互连状况下发送ICMP包的流程:

图中主机A口头ping命令检测能否与主机B通讯,此时主机A会生成一个通知类型为“8回送恳求”的ICMP包给B。ICMP包经过多个路由器假设能够抵达主机B则B接纳到“回送恳求”的ICMP包后会前往一个“0回送应对”的ICMP包给A,这个包会沿着原路经过路由器4~1抵达主机A,主机A就知道能够与B通讯,以及包送达B破费的期间。

回到正题,当接纳方主机发现数据包头部的接纳方IP地址不是自己的IP地址,则会由IP模块生成一个类型为 “指标无法抵达类型”的ICMP包给源发送方。

假设IP正确,则这个包会被接纳。假设这个包是经过火片的,则IP模块会将其暂存到内存中,等IP头部具备相反ID号的包所有抵达,会依据ID号以及IP头部的“分片偏移量”将一切分片重组完整的IP包。(这里的分片不是指TCP模块对运行程序数据[即http信息]的拆分,而是指路由器对某个以太网包外部IP包数据[即TCP头部+http信息]的拆分,这局部常识会在之后引见路由器时引见)。

之后,这个完整IP包的数据会被递交给TCP模块,TCP模块依据IP头部的接纳方IP地址和TCP头部的接纳方端口号查找对应的套接字,依据套接字记载的通讯形态口头相应操作:假设包的数据是运行程序数据则前往确认接纳的ACK包,并将数据寄存到缓冲区期待运行程序来读取;假设是建设或断开衔接的控制包,则前往照应控制包,并告知运行程序建设和断开衔接的操作形态。

说到这里,咱们可以说曾经大略了解了发送方数据从本机的运行层到本机网络层的传输和解决,以及接纳方接纳数据时数据从接纳方机器的网络层到运行层的传输与解决环节了。

下节预报:阅读器输入一个网址出现了什么(四)网络包在局域网中的传输

您可能还会对下面的文章感兴趣: