文章目录
一、数据链路层
网络层的IP协议只负责数据的源端、和数据的目的端,即只负责数据从哪里来,到哪里去。不负责数据的有序或者无序到达对方(数据的安全、可靠性是由TCP提供的)。
数据链路层:
数据链路,指OSI参考模型中的数据链路层,有时也指以太网、无线局域网等通信手段。
数据链路层的协议定义了通过通信媒介互连的设备之间传输的规范,负责相邻设备之间的传输,决定传输的因素是MAC地址。
MAC地址:
6字节的整数,长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示
唯一标识一台设备(和网卡绑定的设备)。
二、以太网协议
“以太网” 不是一种具体的网络, 而是一种技术标准; 既包含了数据链路层的内容, 也包含了一些物理层的内容。例如: 规定了网络拓扑结构, 访问控制方式, 传输速率等。
以太网是当前应用最广泛的局域网技术; 和以太网并列的还有令牌环网, 无线LAN等。
数据链路层的以太网协议是为了同一局域网设备之间的数据能够相互发送。
局域网资源是该局域网中主机共享的,必然会导致局域网资源的征用问题。因此局域网通信可能会导致数据碰撞。所以需要冲突检测和碰撞避免算法。
交换机的前身是集线器,使用集线器的局域网,进行数据交互的时候,需要进行检测,降低发生数据冲突的概率,因此进行数据交互的效率就比较的低。
交换机则是通过端口,使进行数据交互的主机之间独享网络介质,因此不存在冲突问题,数据交互的速度也大大。
交换机可以进行碰撞域的划分,减少碰撞概率。
2.1. 以太网协议格式
MAC地址:每一个网卡设备在出厂的时候都会拥有一个全球独一无二的MAC地址,MAC地址也被称为硬件的地址。
在局域网通信的时候,主机A将发给主机B的消息发送到局域网中,局域网中所有的主机都能收到,B以外的主机通过MAC地址识别到该消息不是发给它们的,就直接丢弃。
当然主机A也可以通过目的IP将消息发给路由器。
-
目标/源MAC地址:源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的。
-
类型:标识网络层使用的是什么协议。帧协议类型字段有三种值,分别对应IP、ARP、RARP。
-
数据:有效载荷,受MTU的限制。
-
CRC校验:一种校验算法,检验数据链路层的数据帧是否出现错误。
2.2. 对比MAC地址和IP地址
- IP地址描述的是路途总体的 起点 和 终点。
- MAC地址描述的是路途上的每一个区间的起点和终点。
MAC地址只能在局域网中使用,因为一旦要跨网络就必须要经过路由器,经过路由器后MAC地址就会发生变化。
2.3. MTU
MTU相当于发快递时对包裹尺寸的限制。这个限制是不同的数据链路对应的物理层, 产生的限制。
- 以太网帧中的数据长度规定最小46字节,最大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
- 最大值1500称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU;
- 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分片(fragmentation);
- 不同的数据链路层标准的MTU是不同的;
三、ARP协议的作用
ARP协议是在局域网中有效的。
数据在数据链路层进行传输的时候,需要知道目标主机MAC地址,但是网络层的协议递交给数据链路层的数据仅仅包含目标主机的IP地址,我们无法获知其对应的MAC地址,那么,我们该如何获取目标主机的MAC地址呢?答案是使用ARP协议。
ARP协议是一种解决地址问题的协议。ARP协议建立了主机 IP地址 和 MAC地址 的映射关系。以目标IP地址为线索,用来定位下一个应该接收数据分包的网络设备对应的MAC地址,通俗来讲就是获取相邻设备的MAC地址。
如果目标主机不在同一个链路上时,可以通过ARP查找下一跳路由器的MAC地址。不过ARP只适用于IPV4,不能用于IPV6。
3.1. ARP工作方式
ARP是广播发送的,子网当中的所有机器都会收到ARP请求,分析ARP请求之中的目的IP地址是否是自己机器持有的IP地址。如果是则回应ARP应答,在应答之中包含自己主机的MAC地址,如果不是,则丢弃。至此,就能够获取目标主机的MAC地址。
3.2. ARP格式
以太网头部:
- 目的MAC地址:ARP请求之中,目的MAC地址全部填充为1,表示在当前子网之中进行广播处理。
- 源MAC地址:ARP请求主机的MAC地址。
- 帧类型:以太网数据帧类型,表示上层使用的是什么协议,ARP协议是介于网络层和数据链路层之间的协议。0x0800:IP协议;0x0806:ARP协议(这里用来标识帧封装的上层协议,因为本帧的数据部分是ARP报文,所以直接用ARP的协议号0x0806表示就可以了)。
28字节的请求或者应答:
- 2字节的硬件类型:定义运行ARP网络的类型,1为以太网。
- 2字节的协议类型:表示使用什么协议,标识当前是IP地址转换MAC地址,IP协议;0x0806。
- 1字节的MAC地址长度:硬件地址长度对于以太网地址为6字节;
- 1字节的IP地址长度:协议地址长度对于和IP地址为4字节;
- 2字节的操作类型(op):表示当前是ARP请求还是ARP应答,1表示请求,2表示应答
- 发送端MAC地址:发送ARP请求主机或者应答主机的MAC地址
- 目的MAC地址:如果是ARP请求填充全1;如果是ARP应答,填充请求主机的MAC地
- 目的IP地址:目标主机的IP地址
3.3. ARP协议工作流程
比如主机A它想发送数据给同局域网下的主机B,那主机A就得知道主机B的MAC地址,那就需要经过如下的过程:
- 主机A填好报文发到网络里。
- 局域网中所有的主机都收到了这个报文,由于目的MAC地址为全1(广播地址),此时就会向上交付给ARP协议层。每个主机先看op字段,发现这是个ARP请求,然后看目的IP,主机B的IP地址和ARP报文的IP相同,则主机B接收到了这个请求,其他主机会丢弃这个报文。
- 接下来主机B会进行ARP应答,填好ARP报文以后发给主机A。
- 主机B把ARP报文发给主机A。至此,主机A就收到了这个ARP报文并向上交付给ARP协议层。根据op字段查找是应答还是请求,如果是应答则会提取主机B的MAC地址;如果是请求,则会做上面和主机B一样的工作,将自己的MAC地址发给对方。
每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的MAC地址。
四、其他重要的协议或技术
4.1. DNS协议
DNS协议是应用层协议。
DNS的产生
IP是网络中通行的唯一标识,在进行网络通信的时候,需要输入IP地址是非常麻烦的事情,因此TCP/IP之中有了一个主机识别码,为每台机器赋予唯一的主机名(域名),在通信的时候直接输入主机名即可。为了实现这个功能,主机往往会主机往往会利用一个叫做hosts的文件。
起初,hosts文件由互联网信息中心统一管理,如果某一台主机需要更换IP或者接入网络之中,就需要更新hosts(用户也要更新),这样非常麻烦。并且,有的域名当前主机可能永远都不会使用。
于是产生了一个可以有效管理主机名和IP地址之间对应关系的系统,那就是DNS系统。
DNS协议的作用就是,将域名转化为IP地址。
4.2. 域名
域名是指为了识别主机名称和组织机构名称的一种具有分层的名称。
其实就是由 “ . ” 分割的字符串的集合,分割出来的字符串表示公司的名称或者性质的字符串。
域名的分层:
- 一级域名:.com、.cn、.gov、.us,表示这是一个企业域名。 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等
- 二级域名:baidu.com、jd.com、taobao.com。
- 三级域名:baike.baidu.com。
- www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议。
4.3. 域名服务器
域名服务器是指管理域名的主机和相应的软件,它可以管理所在分层的域的相关信息。其所管理的分层叫做ZONE。每层都设有一个域名服务器。
域名服务器之中,保存着域名和ip的对应关系,比如输入www.baidu.com,返回的就是百度服务器的IP地址。
处理请求是DNS请求,DNS对应的传输层协议是UDP,不需要建立连接,传输的速度也比较快。
4.4. 域名解析流程
-
游览器的缓存当中缓存的域名和ip地址对应关系。
-
本地的hosts文件当中也会缓存域名和ip地址的对应关系。
-
一般小镇、社区都会架设本地的DNS服务器,如果前两种都没有找到对应的ip地址,就会去DNS服务器进行查询,DNS没有找到,就会去上一级服务器进行查询。
查询方式分为递归查询和迭代查询:
递归查询:
游览器缓存 -> hosts文件 -> 本地DNS服务器 ->根域名服务器 -> 顶级域名服务器 -> 二级域名服务器–> 三级域名服务器。
查找不到会依次往下进行查询,找到之后,再将IP地址,一层层的返回。
迭代查询:
迭代查询中,DNS服务器没找到,会去根域名服务器进行查找,如果没找到,根域名服务器不会继续往下查找,而是返回顶级域名服务器的IP地址给DNS服务器,告诉它,去顶级域名服务器进行查找。
五、ICMP协议
ICMP是网络层协议,提供网络诊断功能。
一个搭建好的网络,并不清楚是否通畅,由于IP协议是不可靠的,如果丢包了,ip协议并不能通知传输层是否丢包,以及丢包的原因。ICMP协议正是提供这种功能的协议,ICMP主要包括以下几种功能:
- 确认IP是否成功到达目的地址。
- 通知发送过程中IP包被丢弃的原因。
- ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议。
- ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6。
ICMP的报头加在IP报文的有效载荷里,它在IP的上层,但并不属于传输层。
六、ping命令
- ping的是一个域名,域名通过DNS解析成IP地址。
- ping不光可以验证网络是否连通,还以统计响应时间和TTL。
- ping命令会先发送一个ICMP echo request给对端。
- 对方收到之后,会返回一个ICMP echo reply。
telnet是23端口, ssh是22端口。
注意:ping命令基于ICMP,是网络层的,而端口号是传输层的概念,因此ICMP不关注端口号。
七、traceroute
也是基于ICMP实现的,能够打印出可执行程序主机,一直到目标主机之前经历过多少路由器。
八、NAT技术
- NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:
- 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;
- 全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的。
下面是客户端A想要访问服务器的过程,客户端A将报文发给路由器,路由器将报文中的源地址替换成自己WAN口IP地址,WAN地址直接与公网相连,因此就可以直接找到服务器,服务器就能收到请求。
那服务器的请求如何把响应发给客户端A呢?
因为服务器知道路由器的IP地址,所以能够将响应发给路由器,但路由器怎么知道是发给客户端A的?
在进行私网IP转化为公网IP的时候,不仅仅将IP地址转换掉了,并且还将传输层的端口也转换掉了。
路由器在进行IP转换时,会建立一张映射表。服务器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路由器的转换表,服务器将响应发给路由器,路由器根据目的IP+端口号返向查表,就能找到客户端A的IP+端口号,把响应发给主机A。
这种转换表在NAT路由器上自动生成。例如,在TCP的情况下,建立TCP连接首次握手时的SYN包一经发出,就会生成这个表。而后又随着收到关闭连接时发出FIN包的确认应答从表中被删除(UDP中两端应用进行通信时起止时间不一定保持一致,因此在这种情况下生成转换表相对较难) 。
8.1. NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制:
- 无法从NAT外部向内部服务器建立连接;
- 转换表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开。
8.2. NAT和代理服务器
路由器往往都具备NAT设备的功能, 通过NAT设备进行中转, 完成子网设备和其他子网设备的通信过程。
代理服务器看起来和NAT设备有一点像。客户端像代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务器; 服务器返回结果后, 代理服务器又把结果回传给客户端。
那么NAT和代理服务器的区别有哪些呢?
- 从应用上讲, NAT设备是网络基础设备之一, 解决的是IP不足的问题。代理服务器则是更贴近具体应用, 比如通过代理服务器进行翻墙, 另外像迅游这样的加速器, 也是使用代理服务器。
- 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换。代理服务器往往工作在应用层。
- 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以跨网。
- 从部署位置上看, NAT一般集成在防火墙, 路由器等硬件设备上, 代理服务器则是一个软件程序, 需要部署在服务器上。
代理服务器是一种应用比较广的技术:
- 翻墙: 广域网中的代理。
- 负载均衡: 局域网中的代理。
翻墙的原理:国内的机器想要访问外网是不允许的,却可以访问香港的服务器,此时就可以将香港的服务器作为代理服务器,国内的机器想要访问外网时就将请求发给这个代理服务器,代理服务器替我们发送这个请求,然后再把响应发回来。
九、网络总结
客户端要发送一个"hello"报文给服务器:
- 这个报文从应用层依次向下交付,添加报头。
- 这个报文最终交给了路由器,路由器向上交付交给路由器的网络层,去掉数据链路层的报头,在路由器的网络层中通过目的IP查找下一跳的MAC地址,然后向下交付,重新封装报头(源MAC和目的MAC)。
- 发给下一个路由器,重复上一步动作,最终交付到服务器所在局域网的路由器。(在路上时也可能不知道下一个路由器的MAC地址,此时也要通过ARP获取MAC地址)
- 局域网的路由器可能并不知道服务器的MAC地址,因此通过ARP获取服务器的MAC地址,然后将报文交给服务器。
- IP交给数据链路层的报文过大,就会触发分片与组装。
- 在传输的过程中出现丢包,就会触发TCP的超时重传机制。