网络协议学习——以太网协议-程序员宅基地

技术标签: 学习  网络  arm开发  学习笔记  linux  http  网络协议  

目录

​编辑

一,以太网简介

二,以太网通信的过程

为什么不用IP地址?

过程

MAC帧

MAC帧的字段介绍

ARP协议

传输过程的一些问题

RARP协议

提高效率

三,其他问题

ARP诈骗问题

URL解析过程


 

一,以太网简介

以太网不是一个真正的网络,而是一个局域网标准。并且,以太网是局域网通信当中应用最广的协议,其次还有令牌环网和无线LAN。

二,以太网通信的过程

以太网协议是局域网通信的协议,局域网通信的过程使用MAC地址来找到这台局域网内唯一的主机然后再进行两台主机的通信。

为什么不用IP地址?

在局域网内,主机的IP地址也是唯一的。但是,为什么还要用MAC地址来标识唯一的一台主机呢?因为IP地址是用于网络层的,而MAC地址则是在数据链路层使用的。

过程

 当我们的主机发起请求后,这个请求便会穿过应用层,传输层,网络层,然后到达数据链路层。然后在数据链路层便会封装两份报头ARP请求报头,MAC帧。封装完这两个报头以后,这个数据包才能被数据链路层发送到指定的主机上。

MAC帧

MAC帧是个啥?其实MAC帧是数据链路层的一个基本单位。MAC帧的图示如下:

通过这样一个MAC帧的封装我们便可以保证数据在共享的网络当中正确的进行传输。

MAC帧的字段介绍

  • 源地址和目的地址:这两个地址标识的是主机的硬件地址,也就是网卡地址,这是在计算机出厂时就被设定了的,并且是唯一的。

    •  类型字段:三种类型

      • 0800:IP协议

      • 0806:ARP协议

      • 8035:RARP协议

    • 数据:数据部分包含上层协议的报头+有效载荷(HTTP ,TCP,IP)

    • 协议末端校验码:CRC校验码

ARP协议

在数据链路层,ARP协议在MAC帧的上一层:

所以在封装MAC帧时,首先是要先封装一层ARP协议。ARP协议的协议字段如下:

字段详解

 1,注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况 是多余的,但如果链路层是其它类型的网络则有可能是必要的。
2,硬件类型指链路层网络类型,1为以太网;
3,协议类型指要转换的地址类型,0x0800为IP地址;
4,硬件地址长度对于以太网地址为6字节;
5,协议地址长度对于和IP地址为4字节;
6,op字段为1表示ARP请求,op字段为2表示ARP应答。  
以太网通信的详细过程

在知道ARP协议和MAC帧以后,便可以大致的知道数据链路层所做的事情。

1,首先,我们要先形成一个ARP应答报文,这个时候op的值是1表示一个请求报文。

2,构建报文时,我们知道目标主机的IP但是不知道MAC地址。所以这个在封装MAC帧时,以太网目的地址填的是FF:FF:FF:FF:FF:FF表示一个广播地址。

3,填入一个广播地址后,每一台主机便需要在链路层收到这个报文时先查看op的值。如果op的值是1,链路层便知道这是一个请求报文需要比对的是IP地址所以这个报文便会被向上交付。当我们的网络层收到这个报文时比对IP地址。如果是这台主机的那就留下向上交付,如果不是那就发往下一台主机。一直到找到目标主机为止。

--------------------------------------------------------------------------------------------------------------------------------

4,在接收端收到这个请求报文以后,接收端便会构建响应报文。这个时候op字段被设置为2。并且此时我是知道发送端的MAC地址的。所以也将接收端的MAC地址填入。

5,响应报文被发送后,其它主机收到后便会在链路层先查看报文的op值,在知道报文的op值是2时便会在数据链路层比对MAC地址。如果比对不上就会直接丢弃发送到下一个主机上继续比对。直到比对成功,向上交付报文。

传输过程的一些问题

1,吃瓜群众

网络是一个共享资源,在局域网中发送的报文其实是被很多主机收到的。只是其它的主机在接收到这个报文时丢弃了这段报文。只有目标主机才会向上交付这段报文。

2,抓包问题

在在网卡里面,有一个模式叫做混合模式。当一台主机的网卡被改为混合模式时,这台主机便可以将不属于自己的响应报文向上交付。这个便是抓包,这也是抓包软件的原理。

3,临界资源

在网络通信的过程中,如果多台主机同时通信便会造成数据碰撞的问题。造成网络的堵塞,所以当网络要通信时往往在一个时刻内只允许两台主机进行通信。所以,网络其实就是一个临界资源。如何实现这样的模式呢?

1,以太网:在以太网当中有一个碰撞检测算法,当发生数据碰撞时便会停止发送数据。

2,令牌环网:只有争夺到令牌的主机才有发送数据的权力。并且这个令牌是在局域网通信当中均匀的流动的。

RARP协议

  • RARP协议

    • 协议:反向转换协议

    • 作用:再某些情况下只知道MAC地址,便可以通过RARP协议来推导IP地址。

    • 使用过程:在不知道IP地址的情况下,我们可以发送一个RARP广播报文到网络当中请求对方告知。

    • 形势:这种方式请求IP报文有安全性问题,现在已经逐渐减少使用并被DHCP等协议逐渐替代。

提高效率

在网络通信时,要找到对方的MAC地址第一步首先是去查找ARP缓存表。只有在这个缓存表内没有对方的MAC地址时,才会在MAC地址处填上全F的字段。

ARP缓存表

查看:arp -a

有了这个缓存表便可以快速的找到目标主机的MAC地址,不必再一个一个主机的尝试比对。当然,这个ARP缓存表的有效时长一般是20分钟

三,其他问题

ARP诈骗问题

问题描述:利用局域网通信过程中的发送主机不知道接收端主机的MAC地址需要发送报文去获取目标主机的MAC地址的漏洞,在这个请求报文在网络当中发送的过程截取并修改,让发送主机的ARP缓存表内填入错误的MAC地址。从而在后续的发送消息的过程中让发送端主机的消息发送到我的这台主机上,从而实现监听和窃取数据。

URL解析过程

1,DNS解析

在网络通信的过程中,虽然是通过ip地址和端口号来找到全网唯一的一台主机上的唯一的一个进程来实现网络通信的。但是,在大部分情况下我们使用浏览器时我们使用的都是域名。比如:

www.baidu.com
www.jd.com

但是,我们本质还是在使用ip地址+端口号来实现网络通信的。所以,我们需要将域名解析变成对应的ip地址的形式。这个解析的过程便是使用DNS解析来实现的。

2,DNS解析过程

在浏览器上输入一个域名以后,便会开始域名解析的过程。

1,先查看本地的DNS缓存表,查看是否有对应域名的ip地址。

2,如果没有便会向DNS服务器发送一个递归的DNS查询请求,开始不断地查询直到查找到对应域名的IP地址并返回。

3,当然,这个查询的过程是有结束的,一直会查询到根DNS服务器。

3,URL解析过程

 在浏览器输入一个URL以后,首先会进行DNS解析。然后,便会开始构建http/https报文。然后这个报文会向下传输到传输层。在传输层选择TCP或者UDP协议,添加相应的报头。然后再往下传输进入到网络层添加ip报头,再经过数据链路层添加数据链路层的协议。然后这个报文才能够发送到对应的主机上。

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41934502/article/details/137654350

智能推荐

JWT(Json Web Token)实现无状态登录_无状态token登录-程序员宅基地

文章浏览阅读685次。1.1.什么是有状态?有状态服务,即服务端需要记录每次会话的客户端信息,从而识别客户端身份,根据用户身份进行请求的处理,典型的设计如tomcat中的session。例如登录:用户登录后,我们把登录者的信息保存在服务端session中,并且给用户一个cookie值,记录对应的session。然后下次请求,用户携带cookie值来,我们就能识别到对应session,从而找到用户的信息。缺点是什么?服务端保存大量数据,增加服务端压力 服务端保存用户状态,无法进行水平扩展 客户端请求依赖服务.._无状态token登录

SDUT OJ逆置正整数-程序员宅基地

文章浏览阅读293次。SDUT OnlineJudge#include<iostream>using namespace std;int main(){int a,b,c,d;cin>>a;b=a%10;c=a/10%10;d=a/100%10;int key[3];key[0]=b;key[1]=c;key[2]=d;for(int i = 0;i<3;i++){ if(key[i]!=0) { cout<<key[i.

年终奖盲区_年终奖盲区表-程序员宅基地

文章浏览阅读2.2k次。年终奖采用的平均每月的收入来评定缴税级数的,速算扣除数也按照月份计算出来,但是最终减去的也是一个月的速算扣除数。为什么这么做呢,这样的收的税更多啊,年终也是一个月的收入,凭什么减去12*速算扣除数了?这个霸道(不要脸)的说法,我们只能合理避免的这些跨级的区域了,那具体是那些区域呢?可以参考下面的表格:年终奖一列标红的一对便是盲区的上下线,发放年终奖的数额一定一定要避免这个区域,不然公司多花了钱..._年终奖盲区表

matlab 提取struct结构体中某个字段所有变量的值_matlab读取struct类型数据中的值-程序员宅基地

文章浏览阅读7.5k次,点赞5次,收藏19次。matlab结构体struct字段变量值提取_matlab读取struct类型数据中的值

Android fragment的用法_android reader fragment-程序员宅基地

文章浏览阅读4.8k次。1,什么情况下使用fragment通常用来作为一个activity的用户界面的一部分例如, 一个新闻应用可以在屏幕左侧使用一个fragment来展示一个文章的列表,然后在屏幕右侧使用另一个fragment来展示一篇文章 – 2个fragment并排显示在相同的一个activity中,并且每一个fragment拥有它自己的一套生命周期回调方法,并且处理它们自己的用户输_android reader fragment

FFT of waveIn audio signals-程序员宅基地

文章浏览阅读2.8k次。FFT of waveIn audio signalsBy Aqiruse An article on using the Fast Fourier Transform on audio signals. IntroductionThe Fast Fourier Transform (FFT) allows users to view the spectrum content of _fft of wavein audio signals

随便推点

Awesome Mac:收集的非常全面好用的Mac应用程序、软件以及工具_awesomemac-程序员宅基地

文章浏览阅读5.9k次。https://jaywcjlove.github.io/awesome-mac/ 这个仓库主要是收集非常好用的Mac应用程序、软件以及工具,主要面向开发者和设计师。有这个想法是因为我最近发了一篇较为火爆的涨粉儿微信公众号文章《工具武装的前端开发工程师》,于是建了这么一个仓库,持续更新作为补充,搜集更多好用的软件工具。请Star、Pull Request或者使劲搓它 issu_awesomemac

java前端技术---jquery基础详解_简介java中jquery技术-程序员宅基地

文章浏览阅读616次。一.jquery简介 jQuery是一个快速的,简洁的javaScript库,使用户能更方便地处理HTML documents、events、实现动画效果,并且方便地为网站提供AJAX交互 jQuery 的功能概括1、html 的元素选取2、html的元素操作3、html dom遍历和修改4、js特效和动画效果5、css操作6、html事件操作7、ajax_简介java中jquery技术

Ant Design Table换滚动条的样式_ant design ::-webkit-scrollbar-corner-程序员宅基地

文章浏览阅读1.6w次,点赞5次,收藏19次。我修改的是表格的固定列滚动而产生的滚动条引用Table的组件的css文件中加入下面的样式:.ant-table-body{ &amp;amp;::-webkit-scrollbar { height: 5px; } &amp;amp;::-webkit-scrollbar-thumb { border-radius: 5px; -webkit-box..._ant design ::-webkit-scrollbar-corner

javaWeb毕设分享 健身俱乐部会员管理系统【源码+论文】-程序员宅基地

文章浏览阅读269次。基于JSP的健身俱乐部会员管理系统项目分享:见文末!

论文开题报告怎么写?_开题报告研究难点-程序员宅基地

文章浏览阅读1.8k次,点赞2次,收藏15次。同学们,是不是又到了一年一度写开题报告的时候呀?是不是还在为不知道论文的开题报告怎么写而苦恼?Take it easy!我带着倾尽我所有开题报告写作经验总结出来的最强保姆级开题报告解说来啦,一定让你脱胎换骨,顺利拿下开题报告这个高塔,你确定还不赶快点赞收藏学起来吗?_开题报告研究难点

原生JS 与 VUE获取父级、子级、兄弟节点的方法 及一些DOM对象的获取_获取子节点的路径 vue-程序员宅基地

文章浏览阅读6k次,点赞4次,收藏17次。原生先获取对象var a = document.getElementById("dom");vue先添加ref <div class="" ref="divBox">获取对象let a = this.$refs.divBox获取父、子、兄弟节点方法var b = a.childNodes; 获取a的全部子节点 var c = a.parentNode; 获取a的父节点var d = a.nextSbiling; 获取a的下一个兄弟节点 var e = a.previ_获取子节点的路径 vue

推荐文章

热门文章

相关标签