服务:负责相邻设备之间的数据帧传输
一个数据从一段主机发出,到达另一端主机上,其中传输层描述了端口表示哪两个进程处理,网络层描述了IP地址,也就是通信两端主机,但是数据无法直接从一段到达另一端,实际传输是通过了很多相邻节点设备之间的传输完成的 eth-以太网协议:
mac地址:物理硬件地址,是一个网卡在出厂的时候设定的地址(在以前都是不可更改的,但是现在可以) uint8_t mac[6] ,mac地址占据的比特位是48位,用于指定的相邻网卡设备 我怎么知道指定相邻的那个设备的mac地址呢?
arp-地址解析协议:通过ip地址获取指定设备的MAC地址,有时候我们也说ARP协议是一个介于网络层与链路层之间的协议 1.组织arp请求(填入自己的mac-ip地址信息,以及指定相邻设备的IP信息) 2.将arp请求广播到局域网中,局域网中其他设备收到arp请求进行解析,发现目标的ip地址不是自己,则丢弃请求。 3.若arp请求中的目标ip地址就是自己地址,则组织arp应答将自己的mac地址填充,进行响应。 4.两端都会将对应的mac-ip映射信息,缓存起来-arp缓存表,每个一段时间(20-30分钟)重新请求更新。 arp缓存为什么只有很短的一段时间? 因为现在的ip地址分配方式都是动态地址分配,有可能过一段时间有些主机的ip地址就发生了改变。 arp欺骗攻击 攻击者伪造网关地址,向局域网中广播大量的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,因此我们sendto发送的数据大小最大不要超过1472
|