网络中的链路层
链路层:
链路层主要的工作就是通过MAC地址负责与相邻设备之间的数据传输
主要协议有以太网协议,主要设备是交换机
在两个主机进行通信的时候,中间有大量的星型路由网络结构,路径的选择是网络层干的事,链路层就负责每个相邻路由器之间的数据传输
相邻设备:通过网线连接起来的两个设备就是相邻设备
一个路由器可能连接了很多设备,一个设备有很多相邻设备,那么问题来了,如何识别指定的相邻设备就很重要了
相邻设备的识别通过物理网卡的硬件地址进行识别----MAC地址----无符号6个字节的整数
以太网协议格式:
一块网卡封装了以太网帧后(包含源mac地址与目的mac地址以及上层协议),将数据帧广播给与自己相连的设备(与自己相连的所有设备都会收到),收到数据的网卡查看mac地址是否是自己的,若是则接收上来,若不是则直接丢弃
疑问:怎么知道对方的MAC地址从而对数据帧进行填充呢?-- ARP协议
ARP协议:
ARP协议是介于网络层与链路层之间的协议,因为协议中既包含IP地址还包含MAC地址—通过IP地址来获取MAC地址
工作原理:
向相邻设备广播ARP请求(包含对方的IP地址和自己的信息),相邻设备收到arp请求之后进行解析,查看目的端IP地址是否与自己符合,若不符合则直接丢弃,若符合则组织ARP应答,填充自己的mac地址回复给对方,获取到对方的MAC地址后会将MAC地址与IP地址对应的关系缓存一段时间(20~~30分钟)
ARP局域网欺骗攻击:恶意主机收到广播的ARP请求后,不是自己的IP地址但是回复了ARP请求应答,伪装自己就是源主机寻求的主机
数据帧的限制:
MTU:最大传输单元—限制一个链路层的数据帧大小从而限制了网络层IP报文的长度;不包括数据帧的头部和尾部长度
MSS:最大数据段大小,不包含IP头部和TCP头部大小
假设MTU=1500,请问MSS是多少?MSS = MTU-40
MTU对TCP协议的影响:
TCP传输在三次握手的时候,就会通过MTU计算自身的MSS然后通过双方协商,取小的那个值作为MSS,然后每次都只从发送缓冲区中取出不超过MSS大小的数据进行传输,因此我们会说TCP在传输层会自动进行数据分段,因此不会再网络层进行数据分片
MTU对UDP协议的影响:
因为UDP的传输层并不会计算MSS,所以只要数据大小小于64K-28,都能发送,但是因为MTU的存在,有可能会在网络层进行数据分片,将一个完整的大报文,分片成为一个个小的数据片发送,到达对端后再进行分片重组
因为UDP并不保证可靠传输,意味着一个完整报文中若有一个分片出问题,则整个报文都会被丢弃,也就意味着UDP传输的时候,分片越多传输出问题的机率越大,因此程序员编写UDP传输程序的时候,就要考虑MTU的问题,尽量减少分片----sendto给与的数据大小最好不要超过(MTU-报文头部)的大小