目录
细腰结构,IP 层是在网络中的核心地位,性能很高,无连接(管理连接和维护连接成本很高),非可靠,无确认。(为什么称作细腰结构?
我们再看看network layer上面的transport layer, application layer等等, 这些层内容协议包罗万象.
它们仅仅能通过IP与下面的层通讯, 这种设计可以用"anything over IP (一切基于IP)"描述.
同样的, 在network layer下面的physical layer等等层内容也十分丰富.
它们也只能通过IP与上面的层通讯, 这种设计对应地被描述为"IP over anything (IP兼顾一切)".
于是, 由于当中这一层由于只包含IP, 又起到承上启下的作用, 所以人们形容这一层为"细腰".
)
交换机工作在数据链路层,路由器工作在网络层。报文传输示例:
客户端的ip+mac,首先会根据目标ip地址,根据数据链路层配置的默认网关,找到了10.2.14.1这台路由器,根据link2路由器,进入BGP骨干网,BGP协议会选择最短的路径,link3,link4,link5找到了企业的内网服务器21.44.191.36,然后通过企业路由器,找到了server。
层层分配的IP地址,最高层结构为IANA,IANA在每个洲又创建了机构,由子机构进行分配,APNIC就是亚洲分配ip的机构,中国的IP地址就是由CNNIC进行分配的。从这个网络拓扑图可以看到,ip地址是分区域的,并且是有父子结构的,
ip地址都有对应的mac地址,但是从ip地址找到mac地址,就是通过ARP协议(RFC826)。
动态地址解析:广播。示例:
主机A想和主机D通信,但是主机A只有主机D的IP地址,没有mac地址,而交换机只认识MAC地址,所以主机A必须首先获取主机D的mac地址后,才能组装出合适的数据链路层帧,才能被交换机识别,转发给主机D。 现在主机A通过ARP协议发送一个广播包,谁是IP地址,大家都收到后,只有B回复它的MAC地址。
广播的性能损耗十分的大。每次通过ARP获取到一个ip地址和mac地址的对应关系后,都会加入到本地的缓存当中。所以在发送ARP报文之前,都会先检查本地的缓存。可以通过如下命令获取:
linux: arp -nv
windows: arp -a
Mac: arp -nla
arp的请求是广播形式的,arp的响应是单波形式的
抓包分析:第一个广播报文中可以看到,想要获取target ip address:192.168.2.2的mac地址,以广播的形式发送,接着在第二张图中,可以看到,在reply报文中,带上了192.168.2.2的mac地址。
1.为什么需要从mac地址中寻找IP地址呢?
比如有一个打印机,启动的时候,没有配置IP地址,会有一个RARP服务器会自动给他分配IP地址,设备A会发送一个RARP报文,我的mac地址是这样的,我的IP地址是多少? RARPserver收到了RARP报文,会回复对应的ip地址。所以RARP的工作流程也是发送RARP广播,然后以单波的形式回复。
2.RARP报文格式与ARP非常相似,主要差距在opcode,3表示请求,4表示应答
如果在正确的情况下,Alice中缓存的Bob的Mac地址是B,Bob中缓存的Alice的Mac地址是A。但是现在有一个攻击者,Charlie,回主动回复Alice和Bob发出的ARP报文,告诉Alice Bob的mac地址是C,告诉Bob Alice的mac地址是c。
这样alice和Bob互相发送消息的时候,组装出的数据链路层的帧的mac地址就会填成c。
如何防范?
1.在主机绑定网关MAC与IP地址为静态(默认为动态),命令:arp -s 网关IP 网关MAC
2.在网关绑定主机MAC与IP地址
3.使用ARP防火墙
每个机器都使用公网地址,那么是不需要NAT转换,但是公网地址是十分稀缺的。
当企业有大量的主机,少量的公网地址的时候,就可以使用NAT技术,A类,B类,C类和D类地址。
NAT(IP Network address Translator)应用的前提:
单向转换NAT:动态映射
端侧是10.0.0.207是一个A类的私有地址,公网是不认这个私有地址的,发送的request是源IP 10.0.0.207 目的IP,204.51.16.12。经过路由器后,源IP变为了194.54.21.11,目的IP不变。
服务器返回,源地址是服务器地址,目的地址是路由器地址。 接着路由器将目的地址改为客户端地址。 为什么可以将目的地址改为客户端的ip地址呢? 因为同一时间,只有少量的客户端可以上网,可以上网的客户端的数量,和路由器上配置的公网ip的数量是相等的。所以发送一个报文之后,就会记住对应的映射关系,即10.0.0.207和194.54.21.11存在映射关系。
那么存在一个问题,家里的路由器,可以连接很多设备,而运营商并不会给我们分配很多的IP地址,其实是使用了NAPT端口映射
那么当外网想访问内网的时候怎么办?双向NAT,IP地址静态映射。
在一段时间内,将10.0.0.207和194.54.21.6对应起来,只要在这段时间内访问内网,就能访问成功。缺点:是不能够通过端口映射,并且使用的运营商网络,IP地址经常会变化,所以很难使用到这个技术。
lvs有三种工作模式,其中NAT工作模式相对于其他两种,是性能最差的,但是相对于很多四处和七层的负载均衡来看,三层的负载均衡要更好,因为它只解析到网络层就可以了。
优点:
缺点:
Version:版本号
IHL:头部长度,单位是字节
TOS:应用于服务质量,很少使用
Total Length:包含data数据的报文总长度
identification/Flags/Fragment:都是用来做分片的,identification是分片标识(值相同表示是同一类分片);D和M标识能不能分片,如果分片了,是不是中间分片,或者最后一个分片;Fragment offset将无序的分片报文组装起来。
TTL:没经过一个路由器这个值就会减1,到0的时候,报文会被路由器丢弃
Protocol:传输层承载的协议
常见的MTU
可能出现多次分片
ip分片示例:
分片主题:源主机,路由器
重组主机:目的主机
举例:一个11980字节的IP报文,经过MTU为3300的设备。每一份承载的数据长度是3280字节,因为还有20个字节的ip头部。 ip头部需要将MF标志位置为1,最后一个报文MF标志位0。 这些分片为了能够正确顺序组装,必须添加offset,offset单位是8个字节,410 * 8 = 3280。
本地通过ping 服务器 -l 8000抓包来进行验证。(此处是ping的www.baidu.com)
可以清楚的看到,是一个分片报文,因为More fragments值为1,偏移为0,是因为是第一个。identification是0xd405,并且可以看到数据是用abcd来进行填充的
这是分片的最后一个报文,可以看到MF位置为了0,因为identification值和上面一样,可以确定是同一个分片的报文,并且是最后一个报文。
因为IP协议聚焦于性能,诸如传递错误和其他信息的功能都是ICMP协议实现的。
ICMP(internet Control Message Protocl),RFC 792.是IP助手
当A向B发送消息的时候,在R3中出现了错误,R3会通过ICMP协议,将错误传送给A,并且ICMP携带的错误信息不会被R2和R1处理,因为它们承载在IP报文之上,而R3发送的目标接受者很明确是A。
TTL超限:Type = 11
traceroute/tracert
当IP报文到达R4的时候,TTL=0,此时R4将会回复TYPE=11的ICMP报文。
举一反三:Traceroute的工作原理,就是首先把TTL设置为1,查出第一个路由器IP,接着设置为2,查出第二个路由器IP,以此类推...
windows可以通过tracert+域名来测试,抓包分析可以验证上述观点。
ipv4地址只有32位长度,ipv6地址有128位长度,它允许各种设备终端都拥有唯一的公网IP地址,并且连接到公网中,所以它是万物互联的基础。
ipv6目的:
wireshark中可根据ip6过滤,抓包看ipv6地址
主机地址占据64位,网络地址也占据64位(由全局路由(48位)+子网ID(16位))。 主机地址会映射mac地址。
48位mac地址,后24位表示设备标识,前24位表示组织唯一表示OUI,先将 OUI放在主机64位地址中的前24位,并且把第七位的数字改为1,接下来中间的16位,硬编码为FFFE,最后把mac地址的后24位,放在主机后面的最后24位,这就是RFC规范中定义的mac地址映射方法。
这会带来一个问题,那就是通过IP地址把mac地址暴露在网络中,所以包括微软等公司,提出了方法来隐藏我们的mac地址。这边可以本地抓包看下,根据报文中的ip地址和mac地址,看最后24位有没有对应上。可以看到,没有对应上,那是因为我们操作系统给我们打开了隐私增强设置,我们可以关闭隐私增强,然后在抓包看下。
win10中netsh interface ipv6 set privacy state=disabled. 然后查看ipconfig/all,查看ip和mac地址。
抓包看下
IPv6报文格式:
将可选的扩展首部和主首部串联在一起,扩展首部和主首部如何串联在一起呢?通过Next Header进行串联,如果没有扩展首部,那么Next Header中填写的是6,即代表TCP Data。
如果后面有扩展首部,Next Header应该填入固定的值,比如第一个是0,代表是逐条选项,接收方收到0的时候,知道接下来要解析逐条首部的长度...
接下来以分片扩展首部为例,
抓包分析:可以看到这个报文没有扩展字段,主首部后面直接跟着UDP data。
文章浏览阅读370次。UVA 1411题意:有n个白点和n个黑点,要求用n条不相交的线段把他们连接起来,其中每条线段恰好连接一个白点和一个黑点。思路:连接两点a1和b1,如果还有其他的线段a2,b2相连与之相交,必有dist(a1,b1)+dist(a2,b2)大于dist(a1,b2)+dist(a2,b1),原因是两条相交线段构成了几个三角形,三角形性质有两边之和必大于第三边,所以,如果每条线段都没有与之相..._给定一个二分图,该二分图有 nn 个黑点与 nn 个白点
文章浏览阅读1k次。使用自己的数据训练网络时,需要用到两个函数:tf.train.slice_input_producer、tf.train.batch和两个类tf.train.Coordinator和tf.QueueRunner。参考博客:tensorflow中 tf.train.slice_input_producer 和 tf.train.batch 函数和tensorflow中协调器 tf.train.Co..._tensorflow 实现简单的批处理训练例子
文章浏览阅读368次,点赞8次,收藏10次。其中,基于注意力的伪标记方案是主要来获取候选未知查询的,从中间特征的注意力图上求取各个查询的平均分数(比如a-e),然后再用top-k来分配是不是物体,此阶段只区分unknown和no-objects两类,上图中a,b,c是unknown类别,d,e是非目标类别。论文的开放世界目标检测模型使用基于能量的分类头和对未知类别敏感的RPN来识别潜在的未知对象,此外,在特征空间中进行对比学习,以学习有区分性的聚类,并可以灵活地以连续的方式添加新的类别,而不会遗忘先前的类别。然后,查询的目标分数用于识别伪未知对象。_检测模型
文章浏览阅读92次。RDF 的全称叫 Resource Description Framework (资源描述框架)。它是实现语义网络的三个基础技术之一 (其他两个是 SPARQL 和 OWL)。它是被 W3C 推荐的一个数据模型:这意味着所有的语义网络数据都用 RDF 来存储;另外它也是一种在万维网中表示资源信息的语言,有着一套自己的语法规则。_rdf绘制知识图谱
文章浏览阅读1k次。highlight_query突出显示搜索查询之外的其他查询的匹配项rescore_query重新打分 QueryRescorerBuilder rescorerBuilder = new QueryRescorerBuilder(QueryBuilders.matchPhraseQuery("search", keyword)); rescorerBuilder.setQueryWeight(0.7f); rescorerBuilder.setRescoreQueryWeight(1.2f);_rescorerbuilder
文章浏览阅读689次。#include"stdafx.h"#include#include#define TRUE 1#define FALSE 0using namespace std;typedef struct Node//坐标点{double x;double y;}Node;typedef struct List{Node* data; //点int count; //点的个数}List;..._c++分治法求平面最近点对。
文章浏览阅读1k次。首先使用axios发送一个GET请求,并将其响应类型设置为“stream”。这将使axios返回一个包含可读流的响应对象。我们然后创建一个可写流,并将响应数据流(pipe)到可写流中。最后,我们返回一个Promise,以便在下载完成时进行通知。当Promise被resolve时,文件将下载到本地磁盘,并且可以使用相应的路径访问。如果下载过程中发生错误,Promise将被reject,并且在控制台上将打印出错误消息。_elementui下载文件到本地
文章浏览阅读1.5k次。stream_stream list空的会报空指针吗
文章浏览阅读121次。?1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859..._pom完整的内容
文章浏览阅读86次。SpringBoot默认支持两种技术来和ElasticSearch交互。Jest(默认不生效)1.首先需要导入jest的工具包(io.searchbox.client.JestClient)。<dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifac..._spring elasticsearchproperties
文章浏览阅读1.9k次。️接上一篇Docker自定义镜像️第1步去github官网上下载搜索docker-compose选择most stars最多收藏,点击第一个选择发行版本️2. 下载的拖拽到Xterm中/root目录下_docker-compose-linux-x86_64
文章浏览阅读525次。1.设置默认打印格式并不是再代码里写,而是跟用户绑定。2.输入事务码SU01。_sap lp01