网络基础链路层--eth协议&arp协议&mtu
一、链路层
服务:
负责相邻设备之间的数据帧传输。
一个数据从一端主机发出,到达另一端主机上,其中传输层描述了端口表示哪两个进程处理,
网络层描述了IP地址,也就是通信两端主机,但是数据无法直接从一端到达另一端,
实际传输是通过了很多相邻设备之间的传输完成的。
二、eth-以太网协议
(一)mac地址
物理硬件地址,是一个网卡在出厂的时候设定的地址(在以前都是不可更改的,现在可以)。
uint8_t mac[6] , mac地址占据的比特位是48位,用于标识指定的相邻网卡设备。
那么如何知道指定相邻的那个设备的mac地址呢?
三、arp—地址解析协议
通过IP地址获取指定设备的MAC地址
(一)解析流程
- 组织arp请求(填入自己的mac-ip地址信息,以及指定相邻设备的IP地址信息);
- 将arp请求广播到局域网中,局域网中其他设备收到arp请求进行解析,发现目标IP地址不是自己,则丢弃请求;
- 若arp请求中的目标IP地址就是自己地址,则组织arp应答将自己的mac地址填充,进行响应;
- 两端都会将对应的mac-ip映射信息,缓存起来-arp缓存表,每隔一段时间(20~30min)重新请求进行更新。
所以有时候我们也说:arp协议是一个介于网络层和链路层之间的协议。
(二)arp缓存为什么只有很短的一段时间
因为原先的IP地址分配方式都是动态地址分配,有可能一段时间后有些主机的IP地址就发生了改变。
(三)arp欺骗攻击
arp的机制,假设我去相亲,相亲对象叫小红,但是我并不知道小红长什么样子,只知道在饭店周围,如果在公众场合喊一声容易泄露隐私,所以得先逐个询问找到小红,然后单独私聊。
欺骗攻击就是有人可能冒充小红。
攻击者,伪造网关IP地址,向局域网中广播大量的arp响应,覆盖掉其他主机的arp缓存表中的信息,
其他主机就会认为你是网关。
解决方案:
arp防火墙,路由器上边设置静态的IP地址-MAC地址映射表
四、MTU
最大传输单元,限制了一个数据帧的最大大小。
(一)mtu对于上层传输的影响
- TCP:TCP传输会在传输层,协商一个mss-最大数据段大小,
然后每次从发送缓存区中取出不大于mss大小的数据进行封装传输,
而mss就是根据mtu计算而得的:mss= mtu–最小ip报头长度–最小tcp报头长度 = mtu–40;
以太网mtu默认大小为1500,则TCP最大数据段大小通常都是1460;
TCP在网络层不会进行数据分片,因为TCP以mss进行传输数据,因此TCP会在传输层自动进行数据分段。
- UDP:UDP通信时并没有mss协商,只要最大数据长度小于64k-28,就可以传输,
但是如果大于mtu就会在网络层进行数据分片;
然而数据一旦分片,在对端主机上就会进行分片重组,问题来了,只要有任意一个分片出现问题, 这个原始报文就不一致了,就会被丢弃掉,而UDP又是不可靠传输,数据就没了;
基于以上原因,要尽可能的去减少UDP传输时的分片,因此在应用层要去考虑UDP的mss = mtu-28;
因为以太网默认mtu是1500,因此UDP我们sendto发送的数据大小最大尽量不要超过1472。**
五、其他的典型协议和服务
DNS服务,ICMP协议,NAT/NAPT,代理服务
(一)DNS—domain name system 域名系统
早期网络不发达,能访问的服务器并不多,因此记忆常用服务器地址难度不高,但是随着网络的发展,需要的网络服务越来越多,作为一个人类,想要记住很多很多的服务器IP地址很难。
这时候就有个大佬,给自己电脑上的一个文本文档记录了一个映射关系表(域名 & 服务器IP地址);
域名:服务器的一个别名,是一个便于记忆的字符串(不区分大小写)
(eg: baidu & 112.80.248.76);
然后写了一个程序,当访问某个服务器的时候,输入域名,
这个程序会把域名解析成为服务器的地址后,进行访问;
因为这个方式简单有效,因此就有组织搭建了域名服务器,专门用于做域名解析这件事;
域名服务器:全世界几十亿的访问量,一组服务器压力太大,
因此就对域名服务器和要管理的域名进行了分类,分布式管理。
1.域名服务器的分类
根域名服务器,顶级/一级域名服务器,二级域名服务器,三级域名服务器…
(1)根域名服务器
管理一部分域名,最主要是管理顶级域名服务器的地址,根域名服务器在全世界只有13组;
(2)顶级域名服务器
.com域名服务器,……
(3)二级域名服务器
.baidu, .taobao,……
(4)三级域名服务器
image,……
2.域名的分类
顶级/一级域名,二级域名,三级域名…
(1)顶级域名
.com, .org, .gov, ……, .cn, .en, .us
(2)二级域名
.baidu.com, .taobao.com
(3)三级域名
-image.baidu.com
3.域名的解析流程
https://image.baidu.com/search/index
- 查看缓存信息;
- 查看hosts文件;
- 请求本地域名服务器;
- 由本地域名服务器请求根域名服务器;
- 请求指定顶级域名服务器;
- 请求指定的二级域名服务器…。
典型题:浏览器中输入url,回车后会发生什么?
- 域名解析,获取服务器IP地址;
- 搭建tcp客户端,连接服务器;
- 连接成功后,根据http协议格式,组织http请求数据,发送给服务器;
- 等待响应,得到响应后,根据http协议格式解析响应,根据正文类型决定正文的处理方式。
(二)ICMP协议
网络层协议,作用是用于进行网络的探测;
发送ICMP请求,要求对端进行响应;
ssh协议用的是22号端口,telnet协议用的是23号端口,Linux中ping用的是多少?
ping是一个工具,基于ICMPO协议实现,而ICMP协议是一个网络层协议,
所以并没有涉及到传输层,因此不用端口。
(三)NAT/NAPT技术—网络地址转换技术
NAPT相较于NAT就是多了一个端口映射的功能;
NAT/NAPT技术常用于组建私网,工作在网络层,对于流经网关设备的私网数据,进行源端地址替换,
替换为网关对外地址的技术。
1.NAT
把私有IP:192.168.1.6 转换为 共有IP:12.34.56.78。
2.NAPT
把IP地址和端口号一起转换后,再发送给目标服务器。
3.NAT技术的缺陷
由于NAT依赖这个转换表, 所以有诸多限制:
- 无法从NAT外部向内部服务器建立连接;
- 转换表的生成和销毁都需要额外开销;
- 通信过程中一旦NAT设备异常,即使存在热备,所有的TCP连接也都会断开。
4.内网穿透
基于NAPT的映射关系,在映射能保存一段时间的情况下,将一段的对外地址端口告诉另一端,
另一端就能直接发送数据给指定的地址和端口,
而对应的路由器收到数据就会根据映射关系逐层往内发送到对应的内网主机上。
(四)代理服务
搭建代理服务器,用于代请求指定的服务器(vpn,游戏代理)。
NAT服务和代理服务有什么区别?
- NAT是一种服务,工作在网络层, NAT地址替换转发,目标地址从来都不会改变;
- 代理服务,工作在应用层, 代理服务,本身请求的就是代理服务器。
扩展了解:反向代理,正向代理。