简单来说数据链路层主要作用是用于两个设备(同一种数据链路节点)之间进行传递。
数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外各个设备之间有时也会通过交换机、网桥、中继器等中转数据。
实际上,各个设备之间在数据传输时,数据链路层和物理层都是必不可少的。众所周知,计算机以二进制0、1来表示信息,然而实际的通信媒介之间处理的却是电压的高低、光的闪灭以及电波的强弱等信号。把这些信号与二进制的0、1进行转换正是物理层的责任。数据链路层处理的数据也不是单纯的0、1序列,该层把它们集合为一个叫做“帧”的块,然后再进行传输。
如何分离报头和有效载荷?
定长头部6+6+2=14字节,尾部4字节。
如何决定将自己的有效载荷交付给上一层?
通过帧类型。
局域网通信原理
对比理解MAC地址和IP地址
MTU相当于发快递时对包裹尺寸的限制,这个限制是不同的数据链路对应的物理层,产生的限制。
MTU对UDP协议的影响
让我们回顾一下UDP协议:
MTU对于TCP协议的影响
让我们再回顾一下TCP协议:
MTU对于IP协议的影响
见文章中IP分片与组装部分。网络层之IP协议
使用ifconfig命令,即可查看ip地址,mac地址,和MTU。
虽然我们在这里介绍ARP协议,但是需要强调ARP不是一个单纯的数据链路层的协议,而是一个介于数据链路层和网络层之间的协议。
在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址。数据包首先是被网卡接收到再去处理上层协议的,因此在通讯前必须获得目的主机的硬件地址。
ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。 如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6。 IPv6 中可以用ICMPv6替代ARP发送邻居探索消息。
若是跨网络传输的话最终主机B收到的报文中并非是主机A的MAC地址那么又是怎样返回的呢?
用到下面的NET技术,通过路由进行转发而路由器中维护了一张用来转换地址的表,可以将地址来回进行转换。
如果每发送一个IP数据报都要进行一次ARP请求以此确定MAC地址,那将会造成不必要的网络流量,因此,通常的做法是把获取到的MAC地址缓存一段时间。即把第一次通过ARP获取到的MAC地址作为IP对MAC的映射关系记忆到一个ARP缓存表中,下一次再向这个IP地址发送数据报时不需再重新发送ARP请求,而是直接使用这个缓存表当中的MAC地址进行数据报的发送。每执行一次ARP,其对应的缓存内容都会被清除。 不过在清除之前都可以不需要执行ARP就可以获取想要的MAC地址。这样,在一定程度上也防止了ARP包在网络上被大量广播的可能性。
一般来说,发送过一次IP数据报的主机,继续发送多次IP数据报的可能性会比较高。因此,这种缓存能够有效地减少ARP包的发送。反之,接收ARP请求的那个主机又可以从这个ARP请求包获取发送端主机的IP地址及其MAC地址。这时它也可以将这些MAC地址的信息缓存起来,从而根据MAC地址发送ARP响应包给发送端主机。类似地,接收到IP数据报的主机又往往会继续返回IP数据报给发送端主机,以作为响应。因此,在接收主机端缓存MAC地址也是一种提高效率的方法。
不过,MAC地址的缓存是有一定期限的。超过这个期限,缓存的内容将被清除。 这使得MAC地址与IP地址对应关系即使发生了变化,也依然能够将数据包正确地发送给目标地址。
IPD地址和MAC地址为什么缺一不可?
当跨网络传输时主机A想要发送数据报给主机B时必须得经过路由器C。即使知道了主机B的MAC地址,由于路由器C会隔断两个网络,还是无法实现直接从主机A发送数据报给主机B。此时,主机A必须得先将数据报发送给路由器C的MAC地址C1。
此外,假定MAC地址就用广播地址,那么路由器D也将会收到该广播消息。于是路由器D又将该消息转发给路由器C,导致数据包被重复发送两次"。在以太网上发送IP包时,“下次要经由哪个路由器发送数据报”这一信息非常重要。而这里的“下一个路由器”就是相应的MAC地址。如此看来,IP地址和MAC地址两者缺一不可。
最后,我们再试想一下,不使用IP地址,而是通过MAC地址连接世界上所有网络中所有的主机和节点的情况。仅仅凭一个MAC地址,人们是无法知道这台机器所处的位置的"。而且如果全世界的设备都使用MAC地址相连,那么网桥在习得之前就得向全世界发送包。可想而知那将会造成多大的网络流量。而且由于没有任何集约机制,网桥就不得不维护一张巨大的表格来维 护所学到的所有MAC 地址。一旦这些信息超过网桥所能承受的极限,那将会导致网桥无法正常工作,也就无法实现通信了。
我们平常在访问某个网站时不使用IP地址,而是用一串由罗马字和点号组成的字符串。而一般用户在使用TCP/IP进行通信时也不使用IP地址。能够这样做是因为有了DNS(DomainNameSystem)功能的支持。DNS可以将那串字符串自动转换为具体的IP地址。这种DNS不仅适用于IPv4,还适用于IPv6。
NDS背景
TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序. 但是IP地址不方便记忆.
于是人们发明了一种叫主机名的东西, 是一个字符串, 并且使用hosts文件来描述主机名和IP地址的关系
最初,通过互连网信息中心(SRI-NIC)来管理这个hosts文件的。
这样就太麻烦了, 于是产生了DNS系统。
至今,我们的计算机上仍然保留了hosts文件。在域名解析的过程中仍然会优先查找hosts文件的内容。
可以使用cat /etc/hosts来查看。
域名简介
主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。
如www.baidu.com
NAT定义
NAT ( Network Address Translator) 是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。除转换IP地址外,还出现了可以转换TCP、UDP端口号的NAPT ( Network Address Ports Translator)技术,由此可以实现用一一个全局IP地址与多个主机的通信。NAT(NAPT)实际上是为正在面临地址枯竭的IPv4而开发的技术。不过,在IPv6中为了提高网络安全也在使用NAT,在IPv4和IPv6之间的相互通信当中常常使用NAT-PTV。
NAT的工作机制
如图所示,以10.0.0.10的主机与163. 221.120. 9的主机进行通信为例。利用NAT,途中的NAT路由器将发送源地址从10.0.0.10转换为全局的IP地址(202. 244. 174.37)再发送数据。反之,当包从地址163. 221. 120.9发过来时,目标地址(202. 244. 174. 37)先被转换成私有IP地址10. 0.0. 10以后再被转发。
在NAT(NAPT)路由器的内部,有一张自动生成的用来转换地址的表。当10.0.0.10向163.221.120.9发送第一个包时生成这张表,并按照表中的映射关系进行处理。
当私有网络内的多台机器同时都要与外部进行通信时,仅仅转换IP地址,人们不免担心全局IP地址是否不够用。这时采用如图所示的包含端口号一起转换的方式(NAPT) 可以解决这个问题。
NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制
NAT和代理服务器
路由器往往都具备NAT设备的功能,通过NAT设备进行中转,完成子网设备和其他子网设备的通信过程。代理服务器看起来和NAT设备有一点像。客户端像代理服务器发送请求,代理服务器将请求转发给真正要请求的服务器。服务器返回结果后,代理服务器又把结果回传给客户端。
那么NAT和代理服务器的区别有哪些呢?