链路层
链路层:负责相邻设备之间的数据传输。
相邻设备:连接起来的两个设备就是相邻设备。
一个路由器有可能连接了很多设备,也就是说一个设备可能有很多相邻设备。那么如何识别相邻设备呢?
相邻设备的识别通过物理网卡的硬件地址进行识别。
物理地址:MAC地址 unit8_mac[6]–无符号6个字节的整数
以太网协议格式:
- 6字节源mac地址/6字节目的mac地址:标识从哪个设备传输到哪个设备
- proto:上层网络层协议类型,用于数据分用
- data:网络层的报文数据
- CRC:校验和数据帧尾
一块网卡封装了以太网帧以后(包含源mac和目的mac以及上层协议),将数据帧广播给与自己相连的设备,收到数据的网卡,查看mac地址是否是自己的。若是自己的,则接收上来。若不是,则直接丢弃。
怎么知道对方的mac地址是多少?
ARP协议:介于网络层与链路层之间的协议。协议中既包含IP地址还包含MAC地址。通过IP地址获取MAC地址。
向相邻设备广播arp请求(包含有对方的IP地址和自己的信息),相邻设备收到arp请求之后,进行解析。查看目的端IP地址是否与自己相符合。若不符合则直接丢弃。若符合,则组织arp应答,填充自己的mac地址回复给对方。
获取到对方的mac地址之后,会将mac地址与IP地址对应的关系缓存一段时间(20-30分钟)。为什么要缓存一段时间?因为IP地址是动态分配的。
ARP局域网欺骗攻击:恶意主机收到arp请求之后,直接回复arp应答,伪装自己是指定主机。
MTU:
MTU:最大传输单元–限制链路层数据帧大小–主要限制网络层IP报文的长度
MSS:最大数据段大小–应用层交付给传输层的数据大小
- 假设mtu=1500.请问mss是多少?
mss=mtu-40=1460
mss是tcp协议中特指的信息。最大数据段大小都是以最小头部大小进行计算的。而tcp和ip协议报头都是最小20字节。
udp的mss就是mtu-28.因为udp报文长度是固定的8字节。
mtu对于tcp协议的影响:
tcp传输,在三次握手的时候,就会通过mtu计算自身的mss。并且进行双方协商,每次都只从发送缓冲区中取出不超过mss大小的数据进行传输。因此我们通常会说:tcp在传输层会自动进行数据分段,因此在网络层不会进行数据分片。
mtu对于udp协议的影响:
因为udp的传输层并不会计算mss,只要数据大小小于64k-28。数据都能发送。但是受限于mtu。有可能会在网络层进行数据分片,将一个完整的大报文,分片成为一个个小的数据片发送,到达对端之后再进行分片重组。
因为udp并不保证可靠传输,意味着一个完整报文中若有一个分片出问题,则整个报文都会被丢弃。也就意味者udp传输的时候,分片越多,传输出问题的几率就越大。
因此程序员编写udp传输程序在应用层的时候,就要考虑mss问题(sendto给予的数据大小最好不要超过mss大小),尽量减少分片概率。
其他典型协议及技术:DNS/ICMP/NAT/NAPT/代理
-
DNS:domain name system 域名系统–用于进行域名解析,通过域名获取IP地址的系统
域名:www.baidu.com–服务器的名称 -
域名解析服务器:采用分布式存储
域名解析服务器进行了层级划分,并且遍布世界各地。增加了容灾能力,提高了性能压力。 -
域名服务器的层级划分:根域名服务器(向权威机构授权)
域名的等级划分:顶级域名(.com/.org/.gov/.edu…/.cn/.jp…)
二级域名(.baidu.com/.qq.com)
三级域名(docs.qq.com)
…
域名的解析流程:
zhidao.baidu.com
- 1.查看浏览器缓存
- 2.解析host文件
- 3.向本地dns服务器发送请求
- 4.请求根域名服务器
- 5.请求.com域名服务器
- 6.请求.baidu.con服务器
浏览器中输入url回车之后会发生什么?
1.域名解析,得到服务器IP地址
2.根据http协议格式组织http请求数据
3.搭建tcp客户端,与服务器建立tcp连接,发送http请求数据
4.等待服务器响应,进行解析,解析后将正文数据显示在浏览器上
icmp:这是一个网络层协议,用于进行网络探测。通过发送icmp请求要求对方进行回复。
- ssh使用22号端口,telnet使用23号端口,ping使用多少端口?
ping这个工具通过icmp协议实现,而icmp是网络层协议,不涉及端口。
NAT/NAPT:
-
NAT:网络地址转换计数
NAT服务会将流经网关设备的数据的源IP地址修改为自己的IP地址然后转发出去。实现大量私网主机使用同一个对外IP地址进行上网(若不修改源IP地址,则源IP地址是一个私网地址,对方收到之后进行回复,对方收到之后无法进行回复)。
公网的设备只能找到公网地址,是找不到私网地址的。
因此进行源IP地址替换,目的是为了让对方回复的时候,回复到自己的网关设备上,然后网关设备再转发给自己。
但是同一个私网中,有可能同时有很多主机都访问同一个服务器,回复之后,网关设备如何选择给谁转发? -
NAPT:进行地址映射
NAPT对流经的数据进行修改源地址并转发的时候会记录对应地址关系
192.168.122.132:8000/32.23.32.32:9000->23.23.23.23:80
192.168.122.133:8000/32.23.32.32:9001->23.23.23.23:80
代理:
代理和NAT区别:
NAT服务通常部署在网关设备上,运行在网络层,进行源地址替换。目的主机一直是指定服务器。
代理服务是一种应用,可以部署在任意设备上,运行在应用层。目的主机首先请求代理服务器,是为了让代理服务器替自己请求。