计算机网络 4


本文接着 计算机网络 3后面继续学习~~~

数据链路层

基本知识

数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信手段。

数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范。通信媒介包括双绞线电缆、同轴电缆、光纤、电波以及红外线等介质。此外,各个设备之间有时也会通过交换机、网桥、中继器等中转数据。

实际上,各个设备之间在数据传输时,数据链路层和物理层都是必不可少的。众所周知,计算机以二进制0、1来表示信息,然而实际的通信媒介之间处理的却是电压的高低、光的闪灭以及电波的强弱等信号。数据链路层处理的数据也不是单纯的0、1序列,该层把它们集合为一个叫做“帧”的块,然后再进行传输。

MAC地址

MAC地址用于识别数据链路中互连的节点( 如下图)。以太网或FDDI(光纤分布式数据接口)中,根据IEEE802. 3的规范使用MAC地址。其他诸如无线LAN、蓝牙等设备中也是用相同规格的MAC地址。
在这里插入图片描述
MAC地址长48比特,即6个字节,一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19),结构如下图所示。在使用网卡(NIC) 的情况下,MAC地址一般会被烧入到ROM中。因此,任何一个网卡的MAC地址都是唯一的,在全世界都不会有重复。
在这里插入图片描述
MAC地址和IP地址的区别:

IP地址描述的是网络数据传输的起点和终点,是给人用的逻辑地址;

MAC地址描述的是网络数据传输经过的每一跳的(每个区间的)起点和终点,是给硬件用的物理地址。

ARP协议

只要确定了IP地址,就可以向这个目标地址发送IP数据报。然而,在底层数据链路层,进行实际通信时却有必要了解每个IP地址所对应的MAC地址。这里就需要介绍ARP协议, 但是需要强调, ARP是一个介于数据链路层和网络层之间的协议。

ARP概要

ARP是一种解决地址问题的协议。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址。如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPv4,不能用于IPv6。IPv6中可以用ICMPv6替代ARP发送邻居探索消息。

ARP的工作机制
那么ARP又是如何知道MAC地址的呢?简单地说,ARP是借助ARP请求ARP响应两种类型的包确定MAC地址的。如下图所示,假定主机A向同一链路上的主机B发送IP包,主机A的IP地址为172. 20.1.1,主机B的IP地址为172. 20. 1.2,它们互不知道对方的MAC地址。

ARP工作机制:
在这里插入图片描述
主机A为了获得主机B的MAC地址,起初要通过广播发送一个ARP请求包。这个包中包含了想要了解其MAC地址的主机IP地址。也就是说,ARP请求包中已经包含了主机B的IP地址172.20.1.2。由于广播的包可以被同一个链路上所有的主机或路由器接收,因此ARP的请求包也就会被这同一个链路上所有的主机和路由器进行解析。如果ARP请求包中的目标IP地址与自己的IP地址一致,那么这个节点就将自己的MAC地址塞入ARP响应包返回给主机A。

总之,从一个IP地址发送ARP请求包以了解其MAC地址,目标地址将自己的MAC地址填人其中的ARP响应包返回到IP地址。由此,可以通过ARP从IP地址获得MAC地址,实现链路内的IP通信。

根据ARP可以动态地进行地址解析,因此,在TCP/IP的网络构造和网络通信中无需事先知道MAC地址究竟是什么,只要有IP地址即可。

如果每发送一个 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地址对应关系即使发生了变化,也依然能够将数据包正确地发送给目标地址。

认识MTU

什么是MTU?

MTU,全称:Maximum Transmission Unit,中文名:最大传输单元

不同数据链路有个最大的区别,就是它们各自的最大传输单位( MTU)不同。就好像人们在邮寄包裹或行李时有各自的大小限制一样。以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation)。

MTU对IP协议的影响

  1. 由于数据链路层MTU的限制,对于较大的IP数据包要进行分包,将较大的IP包分成多个小包,并给每个小包打上标签;
  2. 每个小包IP协议头的16位标识(id)都是相同的;每个小包的IP协议头的3位标志字段中,第2位置为0,表示允许分片,第3位来表示结束标记(当前是否是最后一个小包,是的话置为1,否则置为0);
  3. 到达对端时再将这些小包,会按顺序重组,拼装到一起返回给传输层;一旦这些小包中任意一个小包丢失,接收端的重组就会失败,但是IP层不会负责重新传输数据。

在这里插入图片描述

MTU对UDP协议的影响

一旦UDP携带的数据超过1472个字节(1500 - 20(IP首部) - 8(UDP首部)),那么就会在网络层分成多个IP数据报。
这多个IP数据报有任意一个丢失, 都会引起接收端网络层重组失败, 那么这就意味着,如果UDP数据报在网络层被分片, 整个数据被丢失的概率就大大增加了!!!
在这里插入图片描述

MTU对TCP协议的影响

  1. TCP的一个数据报也不能无限大, 还是受制于MTU。TCP的单个数据报的最大消息长度, 称为MSS(Max Segment Size);
  2. TCP在建立连接的过程中, 通信双方会进行MSS协商。最理想的情况下,MSS的值正好是在IP不会被分片处理的最大长度(这个长度仍然是受制于数据链路层的MTU);
  3. 双方在发送SYN的时候会在TCP头部写入自己能支持的MSS值,然后双方得知对方的MSS值之后,选择较小的作为最终MSS,MSS的值就是在TCP首部的40字节变长选项中(kind=2)。

DNS

主机识别码

TCP/IP中使用IP地址和端口号来确定网络上的一台主机的一个程序,但是IP地址不方便记忆,于是人们发明了一种叫主机识别码的东西,这种识别方式是指为每台计算机赋以唯一的主机名,在进行网络通信时可以直接使用主机名称而无需输人一大长串的IP地址。并且此时**,系统必须自动将主机名转换为具体的IP地址**。为了实现这样的功能,主机往往会利用一个叫做hosts的数据库文件来描述主机名和IP地址的关系。

主机名与IP地址之间的转换:在这里插入图片描述

DNS的产生

根据对主机识别码的认识,我们知道,如果新增一台计算机接人到ARPANET网或者已有的某台计算机要进行IP地址变更,中心的这个hosts 文件就得更新,而其他计算机则不得不定期下载最新的hosts文件才能正常使用网络。

然而,随着网络规模的不断扩大、接入计算机的个数不断增加,使得这种集中管理主机名和IP地址的登录、变更处理的可行性逐渐降低。

在上述背景之下,产生了一个可以有效管理主机名和IP地址之间对应关系的系统,那就是DNS系统。在这个系统中主机的管理机构可以对数据进行变更和设定。也就是说,它可以维护一个用来表示组织内部主机名和IP地址之间对应关系的数据库。

在应用中,当用户输人主机名(域名)时,DNS会自动检索那个注册了主机名和IP地址的数据库,并迅速定位对应的IP地址。而且,如果主机名和IP地址需要进行变更时,也只需要在组织机构内部进行处理即可,而没必要再向其他机构进行申请或报告。有了DNS,不论网络规模变得多么庞大,都能在一个较小的范围内通过DNS进行管理。

注意:

DNS是应用层协议; DNS底层使用UDP进行解析; 浏览器会缓存DNS结果!!!

我们解答一下这个问题:当我们在浏览器上输入一个URL回车后,发生了什么???

参考文章

如何理解:
在这里插入图片描述

NAT(网络地址转换)

NAT (Network Address Translator) 是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。由此可以实现用一个全局IP地址与多个主机的通信。
NAT实际上是为正在面临地址枯竭的IPv4而开发的技术。不过,在IPv6中为了提高网络安全也在使用NAT,在IPv4和IPv6之间的相互通信当中常常使用NAT-PT。

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)就可以解决这个问题。
在这里插入图片描述
不过在此需要注明的一点是,在使用TCP或UDP的通信当中,只有目标地址、源地址、目标端口、源端口以及协议类型(TCP还是UDP)五项内容都一致时才被认为是同一个通信连接。此时所使用的正是NAPT。

如上图中所示,主机 163.221.120.9 的端口号是80,LAN中有两个客户端10.0.0.10和10.0.0.11同时进行通信,并且这两个客户端的本地端口都是1025。此时,仅仅转换IP地址为某个全局地址202. 244. 174. 37,会令转换后的所有数字完全一致。为此,只要将10.0.0.11的端口号转换为1026就可以解决问题。
如上图所示,生成-一个NAPT路由器的转换表,就可以正确地转换地址跟端口的组合,令客户端A、B能同时与服务器之间进行通信。这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中被删除。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值