现在要把数据从主机B发送到主机C。数据报文在进行转发时是要一跳一跳的从一台主机跳到另一台主机,最终才能将数据转发到目标主机。IP解决的并不是把数据从B传到C的问题,而是帮我们提供路径选择。
以太网的帧格式如下所示:
IP、ARP、RARP
;CRC
校验码。报头和有效载荷如何分离(解包)
以太网MAC帧的帧头和帧尾都是固定长度,当底层收到一个MAC帧后,直接提取出MAC帧当中固定长度的帧头和帧尾,此时剩下的就是有效载荷了。
如何决定将有效载荷交付给上层的哪一个协议?
根据MAC帧的帧头中2字节帧协议类型来向上交付
详细请看博客:网络基础1-CSDN博客
对比MAC地址和IP地址
故事版:网络基础1-CSDN博客
局域网通信的一般过程:主机A和主机D通信过程
A主机构建MAC帧,A主机把数据发到局域网中,其他主机收到了吗?
收到了,B R C D 包括A自己都收到了,这里的收到指的是在他们各自的数据链路层收到了。
以B为例,收到此数据帧后会进行报头和有效载荷的分离,分离后发现此数据帧报头是macD不是macB,就直接把此报文丢弃了。那么此报文有向上交付吗?没有,主机B从IP层往上并不知道曾经收到过这个报文,上层不知道,就相当于主机B从未收到过这个数据帧。同理R,C也直接把此报文丢弃了。
即主机A与主机D发送数据时,B R C 在底层都收到了,只是B R C把报文丢弃了。整个过程就好像主机A与主机D单独通信。主机D收到主机A的报文后,会给A进行响应,过程就如同A给D请求时相同。
大部分局域网抓包软件的原理:网卡中设置成混杂模式(不对数据过滤),不对报文的目标MAC地址进行认证,直接进行向上交付
局域网中的数据碰撞问题
交换机
局域网中主机越多,碰撞概率越高。我们平时在学校里可能中午时间校园网比较卡,大家都在连接碰撞概率高,容易丢包,拉匀时间线就是带宽比较低;而半夜两三点网速很快。
为了解决上面主机越多,碰撞概率越高的问题。可以在局域网中使用交换机。交换机能够对局域网进行碰撞域划分,在一定概率上大大较少数据碰撞的概率。例如图中主机A、C之间的数据转发将不会被交换机转发至另一侧;同时交换机能够识别局部性的碰撞,如果交换机一侧发生了碰撞,那么就不会对这个碰撞数据进行转发,该次碰撞将不会影响另一侧的数据转发。
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层, 产生的限制。
以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片 (fragmentation);
不同的数据链路层标准的MTU是不同的;
由于数据链路层MTU的限制, 对于较大的IP数据包要进行分包。
让我们回顾一下UDP协议:
让我们再回顾一下TCP协议:
MSS和MTU的关系
使用ifconfig命令, 即可查看ip地址, mac地址, 和MTU;
地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。ARP不是一个单纯的数据链路层的协议, 而是一个介于数据链路层和网络层之间的协议;
FFFFFF
代表局域网广播地址0806
代表ARP的请求或应答0x0800
为IP地址;FFFFFF
,用作占位符ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。
今天老师在教室里给学生上课。正常上课前,教务处会提前给老师一份学生名单便于老师的提问点名;可是今天由于疏忽给老师了一份学生学号的列表。老师本人比较负责,点名提问时会先问:学号是20010的学生是谁,此动作就是在教室里广播;所有同学都收到了,此时大家会与自己学号作对比,发现不是自己就丢弃;此时学号为20010的学生站起来,说:老师,我叫张三。你可以提问我。老师就此得到了这位同学的姓名,在此过程中老师并没有提问而是做了学号转姓名的工作。
老师在此过程中做的就是ARP工作;学生学号就等同于IP地址,学生姓名就等同于MAC地址
共识:
在局域网中,任何一台主机都有可能向别人发起ARP请求或者收到别人发的ARP请求;即任何一台主机都会收到别人的ARP应答或者收到别人发的ARP请求。
任何主机收到ARP后,优先看OP
以A和F通信为例:
A给F发送数据帧时,B,C,D,E,F所有主机都会收到这个数据帧,会不会处理呢?以C为例,对比目的MAC地址是全F,报头和有效载荷分离后会交给自己的ARP层(由于帧类型是0806),同理其他的所有主机全都会向上交付。主机C收到ARP请求后,先看OP,再看目的IP地址。发现不是请求自己就直接在ARP层丢弃掉对应报文。
主机F收到后,发现是在请求自己,就会构建ARP应答发送给A,此时局域网内的其他主机也收到了,它们会处理吗?以D为例,对比目的MAC地址是MACA,直接丢弃,同理对于B,C,D,E同样丢弃。A收到后发现目的MAC地址是自己,再看帧类型是0806代表ARP,向上交付,先看OP是2后提取ARP中的源MAC和源IP,就拿到了主机F的MAC地址。
ARP缓存表
实际不是每次要获取对方的MAC地址时都需要发起ARP请求,每次发起ARP请求后都会建立对应主机IP地址和MAC地址的映射关系,每台主机都维护了一个ARP缓存表,我们可以用arp -a
命令进行查看。
需要注意的是,缓存表中的表项有过期时间,这个时间一般为20分钟,如果20分钟内没有再次使用某个表项,那么该表项就会失效,下次使用时就需要重新发起ARP请求来获得目的主机的硬件地址。
局域网中间人分别向通信双方构建假的ARP应答,欺骗窃取报文,这就叫做ARP欺骗。但是如果报文通过HTTPS协议加密后,即便中间人拿到报文,没有秘钥也解不开报文。