【Linux】网络基础3
目录
网络层
ip协议
ip协议报头
网段划分
特殊ip地址
ip地址数量限制
私有IP地址和公网IP地址
数据链路层
数据链路层解决的问题
mac地址
mac帧
局域网通信原理
mtu与mss
arp协议
原理
arp报头
arp请求与应答流程
arp周边问题
DNS
icmp协议
功能
ping
traceroute
NAT技术
ip转换
NAPT
NAT缺陷
内网穿透
代理服务器
网络层
ip协议
一整个大网络由多个子网组成,子网之间由路由器连接,主机1要找到主机2,首先得找到主机2所在的子网。
ip协议报头
4位首部长度
4个比特位从0000到1111,也就是0到15,在这基础上乘4就是真实报头的大小,单位是字节,所以报头最大是60字节,选项是0到40字节。
4位版本
8位服务类型
16位总长度
就是ip报文的大小
8位生存时间
8位协议
16位首部校验和
数据链路层不能一次发过大的报文,如果ip层传下来的报文过大,则要求ip层进行分片转发
16位标识
标识每一个报文,但一个报文分片后,它的子报文的标识都一样
三位标志
第一位保留不用
13位片偏移
表示该子报文在原来的报文中的偏移量,方便组装
答:通过片偏移和结束标记,片偏移不等于0一定分片了,如果等于0还有看结束标记,标记为1表示不是最后一个报文
网段划分
路由器的认识
子网掩码
ip地址和子网掩码作与运算得到网络号
主机号全0和全1不适用一般主机
子网掩码为1的地方对应网络号,所以主机号只有后四位了
表示24表示子网掩码前24位为1
特殊ip地址
ip地址数量限制
分类+子网掩码的方案
假如目前我只会用到10台主机,那么由于历史原因,先申请一个B类ip,然后配合子网掩码只留下最后四位作为主机号(2的4次方,16-2,有14台容量),前面的16位是申请的子网,还有12位我们可以自己构建子网的子网(2的12次方)
私有IP地址和公网IP地址
私有ip
上网的流程
光纤的模拟信号经过调制解调器变成数字信号,数字信号交给路由器。
把每个国家看作一个网络,它们配备了国家路由器,这些路由器把这些网络”建群“联系起来,用约定前面几位作为网络号用来标识国家,接着,国家往下有省份,每个省份也有一个省份路由器,这些路由器“建群”把省份联系起来,在前面网络号的基础上再加几位作为省份标识,...不断细分到最小的子网。
在公网划分到自认为最小的子网时,此时再往下走就是私网了(因为公网ip不够用,主机号不够用),最小的公网子网中,主机号可以給路由器,这些路由器各自构建自己的私网子网,主机在这些私网当中,私网内主机正常交流,对外交流路由器帮忙转发,不同的私网各自独立ip地址相同不会冲突。
路由器身负至少两个ip地址,因为路由器至少连接两个子网,报文每经过一个路由器的转发,它的源ip地址就得更换成当前路由器的wan口ip,这样对方才能发回来,这个技术叫nat技术。
路由
自己的主机也可以工作在网络层,所以本地主机也有路由表
查路由表
报文拿着目的ip和Genmask与运算得到网络号,与Destination相比较,如果相同就给Iface的接口发送,如果不同就逐个往下找,如果整个路由表都不匹配,那么会让你去默认路由。
route指令查询路由表
数据链路层
数据链路层解决的问题
网络层解决的问题是跨网络传送的目标主机,数据链路层解决的问题是:
mac地址
每张网卡都有唯一的mac地址
查看mac地址
mac帧
mac帧的有效载荷可以是ip报文,也可以是arp请求或应答
如何解包与封装?
解决方法是定长报文,有效载荷之外的其他数据都是定长的。
如何分用?
解决方法:通过类型字段,告诉我们应该把有效载荷交给上层的谁。
局域网通信原理
主机把mac帧发到局域网中,局域网的每个主机都会收到,这些主机收到后会和mac帧的目的地址作比较,匹配不上直接丢弃,匹配成功后根据类型向上交付
数据碰撞
如果两个主机同时发数据就会造成数据碰撞,解决方法是碰撞避免算法,碰撞后双方等一等并且之后重发
怎么办?
交换机,将局域网分成两部分,如果左侧发生碰撞,交换机就阻挡碰撞数据,右侧同理,如果没发生碰撞就当一个中间人传递数据,交换机可以减小碰撞的范围
如何看待局域网?
从系统的角度来说就是临界资源
mac帧只在局域网当中有效,因为在网络传输过程中,数据交给路由器会进行解包和封包,网络层负责决策去下一跳,数据链路层负责传递
mtu与mss
mtu
为了避免分片,下层倒逼上层限制报文大小,假如mtu为1500则表示数据链路层的有效载荷为1500以下就不用分片,那么网络层的报头是20,推导出网络层的有效载荷就是1480,再往上,传输层的报头是20,推导出传输层的有效载荷是1460,这个大小就是mss,这就是为什么滑动窗口有一大片数据,但确被分成一块块发生。
arp协议
arp解决的问题:在局域网中,把目标ip转成目标mac
原理
假如我只有目标ip,但我要找局域网中目标mac,我就会在局域网中广播一条信息“目标ip是这个的请把你的mac给我”,然后目标主机就把mac给我了
arp报头
arp属于mac帧上层,但是都归到数据链路层了。
协议类型,表示你要把什么转化为mac地址
arp请求与应答流程
构建好arp报文后继续往下交付构建mac帧,mac帧如果目标mac地址也就是第一个字段是全f的话就是广播地址
主机R发送后,局域网内每台主机都会收到并处理,其它主机发现第一个字段是全f那就必须处理,然后看帧类型是0806就知道要往上交付给arp软件层,得到arp报文后先看op字段判断是请求还是应答,如果是请求就看目的地址发现和自己不匹配直接丢弃,如果匹配那么我们就要封装应答发一个mac帧,主机R收到后,根据帧类型向上交付,arp软件层收到后先看op, 发现是应答就提取对方的ip和mac, 不同的op决定了不同的行为
arp周边问题
arp -a指令查看该主机下缓存的ip与mac映射
1. 只有缓存的映射消失才会重新arp
2. 我知道自己的网络号,就可以遍历ping该网络号的所有主机,然后获得它们的ip和mac
3. arp欺骗,主机收到多次arp应答以最新的为准,假如主机A要给主机R通过arp请求应答获取macR, 这时中间人M不断主动发应答给主机A,让A以为我是R并获得我的macM, 从这以后主机A给主机R发数据就会发给我了,同理我也可以欺骗主机R,我也可以转交数据
DNS
域名解析,浏览器通过dns服务器获得对应字符串网址的ip
域名简介
icmp协议
功能
ping
ping命令就是用原始套接字绕过传输层直接作用在网络层上,构建icmp报文去探测目标主机
只会到网络层之间,不会继续向上交付了
traceroute
NAT技术
ip转换
报文每经过一个路由器就会把自己的源ip转换成对应路由器的wan口ip
NAPT
NAPT转换表互为key值,正常情况下只需替换源ip,如果多个主机访问同一个服务器那么就要替换端口了
NAT缺陷
内网穿透
目标:两台不同私网主机进行通信
通过公网的主机进行转发,主机B先得和公网主机通信建立NAPT转换表,然后主机A就把数据发给公网主机,公网主机转发给主机B
代理服务器
正向代理
替客户端代理的是正向代理,学校内的主机先通过代理服务器才到外面的运营商
反向代理
一个服务由多台主机构成,为了避免只有一台主机在工作,可以用代理服务器把请求统一收集起来再用分配策略分配给主机,这是反向代理
隧道技术
内网主机和代理服务器配合,利用隧道技术可以瞒过运营商从而访问外网
这个代理服务器的特点:运营商允许内网主机和这个公网代理服务器通信,且这个代理服务器能自由访问外网
内网主机给代理服务器发送请求,这个请求利用了隧道技术,这个请求的有效载荷也是一个请求,外层请求是为了瞒过运营商,内层请求才是真的
代理服务器拿到内层请求后,把这个当作请求发给外网的目标服务器,服务器返回响应,代理服务器再把这个响应当作有效载荷,在外面添加http报文打造成一个外层响应发回给内网主机,目的就是瞒过运营商
总结:其实就是请求里面嵌套了真请求,响应嵌套了真响应,外层请求响应是为了瞒过运营商,这个技术叫作隧道技术,隧道技术不止有http, 只要外壳能瞒过运营商都能作为隧道技术
NAT与代理服务器