链路层:负责相邻设备之间的数据传输
以太网协议:ethernet
协议格式:
48位源端-对端mac地址:识别指定相邻设备
mac地址:uint8_t mac[6]---网卡的物理硬件地址,在出厂时设定
16位数据类型:用于数据分用时上层解析协议的选择
32位数据帧尾:校验和进行差错校验...
如何获取相邻指定设备的MAC地址:ARP协议
ARP协议:介于网络层与链路层之间的协议---通过IP地址获取MAC地址
在局域网广播ARP请求(smac+sip+0+dip)(以太网帧中的对端mac地址全为1---广播地址)
相邻设备收到ARP请求后,检测目的IP地址是否与自己符合,不符合则直接丢弃,符合则组织ARP应答,将自己的MAC地址填充进行回复。
两端都会将mac-ip的映射关系保存一段时间(20~30分钟)
ARP欺骗攻击:伪造IP进行ARP响应---通过防火墙白名单解决
MTU:链路层限制的最大传输单元---以太网默认1500字节
MSS:最大数据段大小,MSS=MTU-IP最小报头长度-TCP最小报头长度
tcp:mtu=1500,则mss=1460
udp:mtu=1500;则mss=1472
MTU对于TCP传输的影响:tcp传输三次握手阶段会协商mss,双方取较小一方的mss作为最大数据段大小进行传输,每次从发送缓冲区中取出不大于mss大小的数据封装报头进行传输。因此tcp在传输层会自动进行数据分段,不会再网络层进行数据分片。
MTU对于UDP传输的影响:udp没有mss协商,只要数据段大小小于64k-28就可以传输,但是若大于mtu大小,则会在网络层进行数据分片。而分片在对端会进行分片重组,一旦一个分片出问题整个报文都会被丢弃(udp不保证可靠传输,丢弃就没了)。因此分片越多,传输出问题的几率就越高。所以在使用udp传输时,程序员最好在上层分包时就计算mss大小分包,尽量减少分片概率。
DNS:domain name system 域名系统
域名:是一个便于记忆的字符串,一个服务器的别名,访问服务器时通过解析得到服务器的IP地址进行访问
记录域名信息的文件:
windows下:\windows\system32\drivers\etc\hosts
linux下:/etc/hosts
域名服务器等级:根 --> 顶级 --> 二级...
一个域名服务器支撑不了所有人的访问,因此采用分布式存储,将域名信息分散存储到世界各地。
域名的划分:
顶级域名(根据使用性质以及地域进行划分):.com / .org / .gov... .cn / .en/ .jp...
二级域名: .baidu.com / .qq.com
三级域名: .zhidao.baidu.com
域名解析流程:
问题:浏览器中输入URL,回车后都发生了什么?
1.域名解析 --> 2.搭建tcp客户端 --> 3.组织http请求 --> 4.发送请求,等待回复 --> 5.服务器收到请求进行解析 --> 6.业务处理 --> 7.组织http响应 --> 8.客户端收到回复,解析http响应 --> 9.根据content-type解析处理正文
ICMP协议:是一个网络层协议,通常用于进行网络探测(ping这个工具使用的就是ICMP协议)
问题:telnet默认使用的是23号端口,ssh使用的是22号端口,那么ping用的多少端口?
ping使用的是ICMP协议实现的,而ICMP协议是网络层协议,只有传输层的协议才会涉及到端口
NAT/NAPT:网络地址转换技术
用于组建私网,私网中的主机对外通信时,部署于网关设备上的NAT服务进行源端地址转换(建立映射关系),转换为对外地址后进行数据转发。私网中的主机使用同一个对外公网地址上网,节省公网地址的使用。
代理服务:VPN翻墙
代理是一个应用,可以部署在任意设备上,工作在应用层
NAT是一个服务,部署在网关设备上,工作在网络层进行地址转换