LINUX网络基础(四)---数据链路层

以太网帧格式

LINUX网络基础(四)---数据链路层_第1张图片
源地址和目的地址是指网卡的硬件地址(也叫MAC地址), 长度是48位,是在网卡出厂时固化的
帧协议类型字段有三种值,分别对应IP、ARP、RARP
帧末尾是CRC校验码

mac地址

  • MAC地址用来识别数据链路层中相连的节点;
  • 长度为48位, 及6个字节. 一般用16进制数字加上冒号的形式来表示(例如: 08:00:27:03:fb:19)
  • 在网卡出厂时就确定了, 不能修改. mac地址通常是唯一的(虚拟机中的mac地址不是真实的mac地址, 可 能会冲突; 也有些网卡支持用户配置mac地址).

在网络中,由网线中传递的是一个个mac帧,当前局域网中的每台主机都会提取MAC帧的目的地址,若目的地址与本机匹配,则解包分用(mac帧的报头字段是定长的(14字节),所以能够轻易分离报头和有效载荷)后首先查看帧类型,决定将有效载荷交付给上层的那个协议,帧类型有三种:
0800:IP数据报
0806:ARP请求/应答
8035:RARP请求/应答

路由器通过目的IP地址中的目的网络查找路由表决定下一站去哪

MTU

  • 以太网帧中的数据长度规定小46字节,大1500字节,ARP数据包的长度不够46字节,要在后面补填充位;
  • 最大值1500称为以太网的大传输单元(MTU),不同的网络类型有不同的MTU;
  • 如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则需要对数据包进行分 片(fragmentation);
  • 不同的数据链路层标准的MTU是不同的;

MTU对TCP/UDP协议的影响

由于TCP有可靠性,因此MTU对TCP也有影响,但是影响小一些,TCP的一个数据报也不能无限大, 还是受制于MTU. TCP的单个数据报的大消息长度, 称为MSS;MSS=MTU-IP-TCP。

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

ARP协议

ARP协议建立了主机 IP地址 和 MAC地址 的映射关系
ARP数据报格式:
LINUX网络基础(四)---数据链路层_第2张图片
帧类型填0806表示类型是ARP请求/应答
硬件类型指链路层网络类型,1为以太网;
协议类型指要转换的地址类型,0x0800为IP地址
硬件地址长度对于以太网地址为6字节
协议地址长度对于和IP地址为4字节
op字段为1表示ARP请求,op字段为2表示ARP应答
发送端以太网地址表示源主机的mac地址
目的以太网地址是未知的,填全1(广播)

ARP协议执行流程:
1.在网络通讯时,源主机的应用程序知道目的主机的IP地址和端口号,却不知道目的主机的硬件地址(mac地址)
2.源主机发出ARP请求,并将这个请求广播到本地网 段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播);
3.局域网中所有主机都会处理ARP请求,因为是在数据链路层,通过解包和分用提取目的IP地址,只有目的主机发现其中的IP地址与本机相符(先查看OP,是1则为请求,然后看目的IP地址),则发送一个ARP应答数据包给源主机,将自 己的硬件地址填写在应答包中;
4.每台主机都维护一个ARP缓存表,可以用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),如 果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址

ping [ip地址] 检测ip地址的连通性
ping 命令不光能验证网络的连通性, 同时也会统计响应时间和TTL(IP包中的Time To Live, 生存周期).
ping命令会先发送一个 ICMP Echo Request给对端; 对端接收到之后, 会返回一个ICMP Echo Reply;
ping命令基于ICMP, 是在网络层. 而端口号, 是传输层的内容. 在ICMP中根本就不关注端口号这样的信息

路由表详解:

LINUX网络基础(四)---数据链路层_第3张图片
1)HostA在网络层将来自上层的报文根据IP协议封装成IP数据包,其中源IP地址为自己,目标IP地址是HostB(192.168.2.2),HostA会用本机配置的24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段 (自然的自己的ARP缓存表内并没有HostB的记录),因此发送HostB的数据包需要经过自己的默认网关路由A的转发。

2)HostA通过ARP请求获取网关路由A的网卡E0口的MAC地址,并在链路层将路由器网卡E0接口的MAC地址封装成目标MAC地址,源MAC地址是自己(IP数据报没有改动)。

3)路由器A从E0可接收到数据帧,把数据链路层的封装去掉,并检查路由表中是否有目标IP地址网段(即192.168.2.2的网段)相匹配的的项,根据路由表中记录到192.168.2.0网段的数据请发送给下一跳地址10.1.1.2(路由器A的E1接口的APR表内有路由器B的E1接口的IP与MAC记录),因此数据在路由器A的E1口重新封装,此时,源MAC地址是路由器A的E1接口的MAC地址,封装的目标MAC地址则是路由器2的E1接口的MAC地址。

4)路由B从E1口接收到数据帧,同样会把数据链路层的封装去掉,对目标IP地址进行检测,并与路由表进行匹配,此时发现目标地址的网段正好是自己E0口的直连网段,路由器B通过ARP广播,获知HostB的MAC地址,此时数据包在路由器B的E0接口再次封装,源MAC地址是路由器B的E0接口的MAC地址,目标MAC地址是HostB的MAC地址。封装完成后直接从路由器的E0接口发送给HostB。

5)此时HostB才会收到来自HostA发送的数据。

DNS

DNS:域名解析

DNS是一整套从域名映射到IP的系统 :组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系;如果新计算机接入网络, 将这个信息注册到数据库中;用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址

应用层协议,使用传输层中的TCP协议

域名使用 . 连接 com:
一级域名. 表示这是一个企业域名. 同级的还有 “net”(网络提供商), “org”(非盈利组织) 等. baidu:
二级域名, 公司名.
www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格 式, 来表示主机支持的协议.

浏览器中输入url后, 发生的过程

输入url后,首先先查询本地缓存,若没有记录则进行域名解析,然后拿到百度服务器所对应的IP地址,然后发起http请求,由于http请求是基于TCP,tcp是面向连接,首先需要建立连接(通过三次握手建立连接建立握手成功)-------------------*域名解析+建立连接开始 *

首先发送tcp请求,先发送给ip,通过24位子网掩码与目标地址进行“与”运算,得出目标地址与本机不是同一网段,因此发送数据需要通过路由的转发。-------------------*tcp–>ip *

ip交给链路层封装为mac帧,此时ARP中的源mac地址是自己的mac,目的mac地址是路由器的mac。-------------------*ip–>mac帧 *

然后向上交付给网络层,网络解包分用后在路由器中查询路由表,需要交给路由器B,首先需要再次向下交付给链路层,封装MAC帧,改变源mac和目的mac后,通过链路中一跳,再交给下一个指定ip的路由器-------------------*mac帧–》ip,查询路由表----》mac帧----》通过一跳,交给下一跳中的mac帧–》向上封装为ip *

交给了下一个路由器后,会进行解包得到IP协议,对目标IP地址进行检测,并与路由表进行匹配,如此重复动作,直到对mac帧的解包分用为IP协议后,查询到IP协议中目的ip地址就是当前路由的ip地址-------------------*进行IP检测并查询路由表,重复上述过程 *

路由器则通过ARP广播将服务器主机的mac地址拿到,拿到后再将数据封装为MAC帧改变源MAC地址为路由mac,目的mac地址为主机mac地址,封装完成后,直接由路由器交给服务器主机。-------------------*到达目标ip地址—》路由器广播向局域网中散发数据获得目的主机mac–》向下封装mac帧,改变源mac,目的mac,向上交付给路由器—》路由器交给目标主机 *

主机链路层拿到了数据帧后,IP地址就是自己的,然后又自底向上交付,分别交给IP,IP中的八位协议让向上交付给TCP,交给TCP后,识别到TCP中的标志为中携带SYN请求建立连接,这整个过程进行了第一次握手-------------------*自底向上解包分用,TCP中识别到是一个SYN请求 *

然后服务器主机进行响应,自上向下发送ACK+SYN响应,经过路由后交给我的主机,我的主机又进行自底向上的解包分用后,识别到是一个ACK+SYN响应,则两次握手完毕,
然后又发送ACK到服务器主机,服务器接收到响应后三次握手完毕,然后在传输层中连接建立成功。然后双方在各自的主机中建立一个连接的数据结构将连接维护起来,

然后再发送http请求,我的主机在应用层构建http请求 ,向下交付给TCP层–》ip–>mac帧–》路由–》服务器主机
服务器主机再自底向上解包分用,在http中分析到我的http请求,发现在url中想要用get方法获取一个首页,然后构建一个响应,在http响应的正文中写入百度的首页,再经过上述过程交给我的主机,一系列解包分用后,
在http中拿到服务器响应的正文,经过浏览器解释html后,经过浏览器的渲染绘制后呈现出百度的首页。(异常情况未考虑,讲述时先讲述细节,再分别说异常情况)

ICMP协议

ICMP是一个网络层协议,能够定位网络不连通的问题,通知源主机在发送过程中IP包被丢弃的原因.

NAT技术

NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法:,在NAT路由器内部,有一张自动生成的,用于地址转换的表,利用协议中附带的源IP,源端口,目的端口,目的IP,当私有IP第一次向服务器IP发生数据时就会通过**IP+PORT生成表中的映射关系,当数据返回时,就会反查这张表,找到局域网内对应的端口对应的主机。(NAPT)**但是缺憾是:无法从NAT外部向内部服务器建立连接; 装换表的生成和销毁都需要额外开销; 通信过程中一旦NAT设备异常, 即使存在热备(备份), 所有的TCP连接也都会断开

代理服务器看起来和NAT设备有一点像. 客户端向代理服务器发送请求, 代理服务器将请求转发给真正要请求的服务 器; 服务器返回结果后, 代理服务器又把结果回传给客户端.

代理服务器和NAT的区别

  • NAT设备是网络基础设备之一, 解决的是IP不足的问题. 代理服务器则是更贴近具体应用, 比 如通过代理服务器进行, 另外像迅游这样的加速器, 也是使用代理服务器
  • 从底层实现上讲, NAT是工作在网络层, 直接对IP地址进行替换. 代理服务器往往工作在应用层.
  • 从使用范围上讲, NAT一般在局域网的出口部署, 代理服务器可以在局域网做, 也可以在广域网做, 也可以 跨网

代理服务器的应用
: 广域网中的代理.
负载均衡: 局域网中的代理.

你可能感兴趣的:(网络)