当前位置: 首页 > news >正文

网站升级公告模板一个企业seo网站的优化流程

网站升级公告模板,一个企业seo网站的优化流程,wordpress首页视频播放,沧州企业网站建设方案网络层 IP协议 前置认识 我们之前详谈过TCP协议#xff0c;TCP协议主要是提供一种可靠的传输策略#xff0c;但是并不能直接将报文发送给对方主机#xff0c;而IP协议的本质就是提供一种将数据跨网络从A主机送到B主机的能力#xff0c;而用户需要的是一种将数据 可靠的 跨…网络层 IP协议 前置认识 我们之前详谈过TCP协议TCP协议主要是提供一种可靠的传输策略但是并不能直接将报文发送给对方主机而IP协议的本质就是提供一种将数据跨网络从A主机送到B主机的能力而用户需要的是一种将数据 可靠的 跨网络从A主机送到B主机的能力。 网络是划分了很多很多的子网的子网之间通过路由器连接。 将数据跨网络从C主机发送到D主机首先得先找到目标主机的子网然后才能找到目标主机。 因此ip地址 目标网络 目标主机 这样设计的方式可以大幅提高查找目标主机时排除其他主机的效率。  ip协议格式 虽然协议格式看起来复杂但是通过学习TCP协议后有很多报头的内容我们很容易就理解了先说简单的复杂的后续补充。 这4位版本一般是ipv4不过现在ipv4技术已经有点不够用了ipv6可以解决ip地址不足的问题但是还并没大面积推广。 关于IPV4 我们知道现在的IP地址是4字节也就是32位那么IP地址一共就只有2^32个差不多就是42亿多个IP地址我们现在几乎人手一部手机需要一个IP地址更何况还有电脑电视等联网的设备都要IP地址所以现在的情况就是IP地址严重不足了而IPV6的IP地址大小是16字节也就是2^128就现在来说还是很充裕的了但是IPV6和IPV4并不是版本升级那么简单这两种完全不兼容的版本所以现在还是流行IPV4。 首先我们还是需要搞懂两个问题 1.报头和有效载荷如何分离。 2.如何将有效载荷交给上层。 16位总长度顾名思义也就是报文的总长度。并且我们发现UDP是有总长度的而TCP没有。说明不管是面向字节流还是面向数据报都是要把数据交给IP协议处理的在IP层以数据报的形式发送的。所以面向字节流并不是IP层的概念其实是TCP提供给应用层让应用层所关注到的概念。 4位首部长度也就是首部 选项的长度因此IP报头的长度就是[20,60]字节因此可以通过固定长度4位首部长度 自描述字段总长度 来实现报头和有效载荷的分离。 8位服务类型 3位优先权字段(已经弃用), 4位TOS字段, 和1位保留字段(必须置为0). 4位TOS分别表示: 最小延时, 最大吞吐量, 最高可靠性, 最小成本. 这四者相互冲突, 只能选择一个. 对于ssh/telnet这样的应用程序, 最小延时比较重要; 对于ftp这样的程序, 最大吞吐量比较重要也就说数据从A主机到B主机是有多条路径可以选择的这些都是给路由器提供转发依据的。并且这个最高可靠性也不能保证数据一定不会丢包而已选择一条尽可能不会丢包的路径如果还是丢包了那就只能看上层是怎么处理的了比如超时重传。 8位生存时间TTL其实数据报在网络中传输时也可能会存在信号衰减所以运营商在建设网络基础设施的时候对于衰减的信号用放大器放大。这个TTL就是这个数据报经过路由器的最大跳数最大能设置成64每经过一个路由器TTL就减1如果到0了依旧没有到达目的主机那么就会被当前路由器直接丢弃以此来防止路由循环导致大量的游离数据报遗存在网络中。 8位协议决定了要将IP的有效载荷交给上层的哪一种协议也就是交给上层。 32位源IP地址和32目的IP地址我们之前在写一个网络服务的时候需要端口号和IP地址现在我们知道了TCP需要的是端口号因为它要交给上层的进程而IP协议这里要的是源IP地址和目的IP地址这里也解释了当时我们为什么要在用户层将字符串风格的IP地址转化为4字节的IP地址因为路由器需要根据目的IP地址来进行路径选择。 关于IP这里可以举一个形象的例子比如唐僧受唐皇之令去西天取经在这里唐皇和如来佛祖就是一个进程唐僧其实就一个报头他携带了他从哪里来要到哪里去唐僧不断通过路径选择最终到达了目的地--西天而所求的真经其实就是数据所以本质上就是唐皇和如来佛祖之间的进程通信。 在路由器里是没有TCP这个概念的它只处理网络层及以下。只有用户的主机才有传输层这些。技术上来说路由器可以有TCP这些但是它一般只工作在网络层。 网段划分 我们知道IP地址分为网络号和主机号。 网络号: 保证相互连接的两个网段具有不同的标识; 主机号: 同一网段内, 主机之间具有相同的网络号, 但是必须有不同的主机号; 这样做可以把相同网络号的主机放在一起用主机号标识不同的主机而不同的网络号的主机主机号可以相同。 这里我们需要注意 1.路由器本质上也是特定的一个子网的主机也要配置IP地址。毕竟将数据从A主机送到B主机只能通过路由器 2.因为路由器能跨网段转发所以路由器一定至少要连接两个子网也就相当于同时在两个子网因此路由器可以配置多个IP地址且是一定要的可以认为路由器有多张网卡。 3.路由器一般是一个子网中的第一台设备一般它的IP地址是 网络号.1但是如果路由器重启之类的就不一定了。 4.路由器的核心功能虽然是IP报文的转发但不仅仅如此它还能构建子网局域网。 如果在子网中新增一台主机那么这个主机的网络号跟子网的网络号是一致的但是主机号不能跟该子网中其他主机的重复。 比如我们想用手机上网首先我们得连上该子网比如输密码什么的然后就会被分配一个IP地址这个IP地址可以做到不重复这种IP称之为内网IP。我们之前说的数据包在路由器之间转发是公网IP。 手动管理子网内的IP是相当麻烦的事情所有有一种技术叫DHCP能够自动给子网内新增主机结点分配IP地址一般路由器都带有这个功能因此路由器也可以看作一个DHCP服务器,也就可以动态分配IP地址。 所以我们的电脑的IP地址其实是只有在联网的时候才会有的。 我们说过因为IP地址是32位的因此总数就只有42亿多用完就没了。因此IP地址是一种有限的资源所以全球的IP地址是各个国家所要争取的。 过去有一种划分网络号和主机号的方案就是将IP地址分类分为五类。 A类 0.0.0.0到127.255.255.255 B类 128.0.0.0到191.255.255.255 C类 192.0.0.0到223.255.255.255 D类 224.0.0.0到239.255.255.255 E类 240.0.0.0到247.255.255.255 但是随着网络的飞速发展这种分类的局限性就体现出来了大多数组织都申请B类网络地址导致B类地址很快就分配完了而A类地址会浪费大量地址因为一个子网中可以分配给2^24个主机IP地址而通常一个子网中并不会有这么多主机。而且B类网络也很少会把2^166万多占满也会形成浪费。 要注意的是申请这种网络的一般都不是个人而是组织甚至是国家层面的而且这些都是公网。 一般都是由各个国家的运营商一起商讨IP的分配比如中国的有移动电信联通。不过网络本质上不赚钱的只有让更多人使用才赚钱。 针对这种情况就引入了子网掩码的子网划分方案称为CIDR。不过这种划分方案是在分类划分的基础之上的。 引入一个额外的子网掩码来区分网络号和主机号。 并且子网掩码也是一个32位正整数通常用一串0来 结尾。 将IP地址和子网掩码进行 “ 按位与” 操作得到的 结果就是网络号。 网络号和主机号的划分与这个IP地址是A类B类还是C类无关。 示例 网络号就是IP地址跟子网掩码进行按位与操作得来的将示例的子网掩码转成二进制就是 1111.1111.1111.0000。后面是以一串0结尾的。因此可以通过调整子网掩码1的个数来改变网络号和主机号的个数。  并且图中140.252.20.0和140.252.20.255这两个IP地址是不用的140.252.20.0称之为网络号主机号为全0140.252.20.255这种称之为广播号主机号为全1这两个IP地址被特殊使用不作为主机的IP地址。注意子网掩码可以按任意个比特位进行划分。 而平常我们却没有感觉到有子网掩码这个概念。其实子网掩码已经被配置进全球的路由器当中了。 虽然我们在IP报文或者TCP报文中没有看到子网掩码但是在数据包在一个一个路由器转发中已经被路由器处理好了。 特殊的IP地址 IP地址的主机号为全0就是是网络号代表这个局域网。 IP地址主机号为全1就是广播号用于给同一个链路中相互连接的所有主机发送数据包。 127.*的IP地址用于本机环回loop back测试通常是127.0.0.1。 IP地址的数量限制 之前也谈过目前IP地址的总数为42亿多对于现在来说是严重不足的更何况还有浪费。 假设现有有一个运营商申请到了一个B类IP地址虽然B类IP地址允许一个子网最多有6万多台主机但是实际上只有10台主机呢 那么就会导致大量的IP地址被浪费了。所以我们就可以对这个B类网络进行子网掩码划分比如将16位主机号中再拿出12位作为网络号剩下的才作为主机号这样就大量的减少了浪费的情况。所以实际网络号有28位4位作为主机号那么2^4 - 2 14,也就是能分配14个IP地址。 所以就是我们再原来的16位网络号的基础上再自己搭建内网这样就多了2^12个网络号每个网络号能分配14个IP地址。 所以子网掩码虽然没有解决IP地址的上限但是很大程度上缓解了浪费的问题。现在解决IP地址不足还有三种做法 1.动态分配IP地址只给写入网络的设备分配IP地址因此同一个MAC地址的设备每次接入互联网中得到的IP地址不一定是相同的。说白了就是用时候给你不用就回收也就是共享IP地址。 2.NAT技术。 3.IPV6技术不是简单的IPV4的升级版这是两个互不相干的协议彼此并不兼容。IPV6才是从根本上解决了IP地址不足的问题因为它的IP地址是16字节的它解决了上限不足的问题。 私有IP地址和公有IP地址  如果一个组织内部组建局域网 ,IP 地址只用于局域网内的通信 , 而不直接连到 Internet 上 , 理论上 使用任意的 IP 地址都可以, 但是 RFC 1918 规定了用于组建局域网的私有 IP 地址 10.*,前8位是网络号,共16,777,216个地址 172.16.到172.31.,前12位是网络号,共1,048,576个地址 192.168.*,前16位是网络号,共65,536个地址 包含在这个范围中的, 都成为私有IP, 其余的则称为全局IP(或公网IP); 比如学校要想搞个局域网那么局域网内任意的IP地址都是可以的。 我们之所以能用我们的云服务器因为它们是公网并不是私网 所以IP地址是被硬性的划分成为 公网IP 和 私网IP。 在Linux中使用 ifconfig 可以查看当前网络信息。 其中可以看到我们的IP地址 192.168.0.205以及子网掩码。这个IP地址并不是刚刚云服务器那里的公网IP而是私有IP。 192.168.0.205不过是腾讯云或华为云的内网IP。 其实在我们大部分人的上网生涯中几乎用的都是私有IP直到使用云服务器才接触到了公网IP。 不过要彻底的理解私有IP和公网IP还需要理解运营商 我们以前在家上网需要一个调制解调器也就是猫还需要一个家用路由器。但是首先需要接上光纤然后猫的作用就是将模拟信号转为数字信号然后再给路由器或者数字信号转模拟信号然后给光纤。 那个时候我们上网需要交钱然后会获得一个账号和密码并将其配置进路由器里面然后路由器有权利访问外网了因为访问外网要争得运营商的许可比如电信。 而我们知道路由器还有一个功能就是构建局域网。虽然现在是无线的但是原理是一样的但是家里人可以通过路由器上网邻居家里也可以我们不想咋办呢所以家用路由器又允许用户给路由器本身设置账号和密码进行登录验证。 现在我们知道IP地址是一份很大的资源并且是有限的假设现在我们按国家的数量平均来分配IP地址那么我们可以拿IP地址的前8位来划分比如美国为0000.0001。那么美国的IP格式就是1.X.X.X。然后每个国家都有一个国际路由器并且这些路由器都是联通的。 然后拿中国举例中国又有30多个省那么可以再拿6个比特位对省进行分配省之间的路由器也是联通的然后每个省又有很多市那么同理也要给市进行划分假设这里也拿4位比特位。 假设有一个报文将源IP地址进行子网掩码后发现是发往中国的那么就由中国的国际路由器接收然后再看看是哪个省的然后放到那个省的路由器以此类推。所以公网IP是会根据国家省市来划分的报文一旦到了中国那么后续所有的工作都是由运营商做的。 而之前我们说我们上网一般都是私网IP那么公网和私网有什么关系呢 家用路由器是能构建子网的构建子网后每一台子网中的设备都有一个IP地址我们访问外网时是先将数据由设备发送给路由器然后路由器再交给对应的运营商到了运营商后再进入公网然后才能访问到互联网公司比如B站。 其中src ip 就是192.168.X.X这些而dest ip 是 122.77.241.3/24这样的公网IP。 我们发送请求的时候先判断目的主机是否在这个子网如果不在就只能交给路由器路由器发现也不在它的子网也就继续向上转发然后就到了公网最后通过目标地址找到了服务器。 然而当服务器处理请求之后要返回响应时发送dest ip 是私有IP我们知道私有IP是不能出现在公网IP中的因为私网IP可能是一样的。那该这么办呢 我们知道公网之下有一个运营商运营商也有路由器而且它还有俩IP一个是子网IP以10开头的也就是内部使用的IP。还有一个就是WAN口IP这个就是一个公网IP这个也叫做运营商的入口IP。而对我们家里的家用路由器也有子网IP和WAN口IP这里的子网IP也就是家里面的主机包括这个路由器所用到IP因为家用路由器连接了运营商家用路由器之间也是构成了一个子网的因此家用路由器的WAN口IP就相当于运营商的内网IP。 所以我们发出去的报文有一种策略就是每经过一个路由器将源IP替换成每一个路由器的WAN口IP也就是外网IP。也就是报文的替换目标地址依旧不变。 那么回到服务器响应那里服务器就可以将dest ip 设置成上一个路由器的WAN口IP。 这是我们个人跟互联网公司进行网络通信那么其实公司给我们返回报文也是类似的原理一般大公司都有一个入口路由器然后通过这个入口的路由器将外来的请求发送给大公司组件的内网服务器里面进行处理这些内网的服务器给我们返回报文也是要通过这个入口路由器入公网的。别看我们手机使用网络要给运营商钱互联网公司同样要给运营商钱。 不过说到底之所以要公网私网这样绕来绕去的还是因为IP地址不足了不同的子网中私有IP可以相同可以省下很多IP地址。 并且现在我们也知道了运营商也可能在用子网的不过运营商一定要有一个公网的路由器。 我们将私有IP不断被替换将内网到公网的技术叫做NAT技术 不过我们已经发现了路由器或者运营商是可以对我们的数据报文进行替换的虽然这里只是网络层但是我们在使用HTTP协议的时候数据都是明文发送的没有加密的话运营商也能做到在应用层读取我们的数据然后进行替换。 至于为什么不用公网因为我们也看到了当IP地址划分到市的时候已经严重不足给那多人使用了所以才要用私网IP。因此比如将公网分配到省之后之后就都用私网了。 所以现在IP地址严重不足那么就是 私网 公网的方式构建了现在的互联网。这样局部的私有IP重复也没关系。 而且我们发现10.开头的是私网但是它能分配的数量是千万级别的那么就足以覆盖很多人了比如一个市。互联网公司一定申请的得是公网IP。 我们如果访问的IP是国外的那么运营商也很清楚我们访问的是国外的因此可以直接拦截掉。所以我们要上q就是上运营商。 因为路由器具备转发报文的能力还有构建子网所以路由器至少要连接两个网段所以路由器具备LAN口IP私有IP和WAN口IP。而家用路由器和运营商的路由器性质是类似的。 路由 首先我们要清楚我们的报文由上层往下发时先要在本机内进行路由。  我们可以用指令 route 来查看本机的路由表 所以主机一般拿到IP地址的查询步骤是这样的 首先拿着目标主机的IP跟Genmask也就是子网掩码进行按位与 如果它等于当前的Destination目的地那么就将该IP报文发送到这个目的地去通过Iface接口行的eth0发送过去。 查询路由表的结果 1.不清楚也不给任何解决方案有这种情况但是很少一般是路由器算法有bug。 2.指明具体的下一跳。 3.路由器不清楚但是转入默认路由一般是同网段的另一台路由器。 4.到达入口路由器。 一直重复直到到达目的IP的子网的入口处。 我们可以看看一般的主机的路由表 这台主机有两个网络接口,一个网络接口连到192.168.10.0/24网络,另一个网络接口连到 192.168.56.0/24网络; 路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接 口,Flags中的U标志表示此条目有效(可以禁用某些 条目),G标志表示此条目的下一跳地址是某个路由器的地址,没有G标志的条目表示目的网络地址是与本机接口直接相连的网络,不必经路由器转发 假设我们要转发的数据包的目的地址是192.168.56.3那么与第一行的Genmask按位与比对后没有对上于是排除掉第一行然后发现与第二行比对上了就通过eth1发送给下一跳。 再比如要要发送的数据包目的地址是202.11.23.2发现比对下来都不是直到到了最后一行也就是缺省路由那里然后再通过eth0转发给下一跳。 其实路由器早就不仅仅只是工作在网络层了我们家里面的路由器就可以登录并访问甚至路由器都可以构建子网了所以路由器早已经能工作在应用层了 数据链路层 对比理解数据链路层和网络层  实际上我们在一台主机中报文并没有通过网络层直接发送出去而是要交给下一层协议也就是数据链路层。 数据链路层本质属于网卡的驱动层一般数据链路层不能一次发送过大的报文。那么也就要求上层不能交付过大的报文。 我们可以用指令 ifconfig 来查看当前主机最大能发送多大的报文。 其中这个mtu后面跟的数字就是能发送的报文的最大字节数。 这里是1500。 但是如果IP层的报文还是太大了那么就会要求IP层对数据进行分片。为什么不是数据链路层分片呢因为谁分片谁组装如果在数据链路层分片的话那么每经过一张网卡就要分片组装影响效率。 所以IP是有可能分片的所以IP报文中就要包含IP分片和组装的信息。 IP的分片和组装 这个16位标识就是用来标识不同的IP的不同的IP报文之间的标号是不一样的。但是分片的IP报文的标识是相同的。 每个IP协议报头中的3位标志位中其中第一位是弃用的第二位如果是0则表示允许分片否则不允许。第三位用来表示结束标记如果这是最后一个小包那么置为0否则为1。  这个13位片偏移假设这个报文被分成了若干片那么这个13位片偏移则表示这个报文在原始数据的偏移量是多少它的作用就是为了将分片的报文组装在一起。 也就是上一个偏移量 这个数据的大小就是这个报文的片偏移量。  那么如何组装呢 假设我们将一个报文分成了3片每片大小为1500算上报头但是即便是同一个报文分的片它每一片依旧要加上IP的报头。 那么这3片报文的16位标识都是相同的标识位第一位弃用不管第二位都是0第三位先不管然后第一片的片偏移量是0那么第二片就是1500第三片就是3000。 前置问题我们怎么知道一个IP被分片了 首先第二位标记位只能说是允许分片不一定百分之百判断这个报文是分片的。 如果这个报文分片了的话除了第一片的报文后面的报文的偏移量都不为0且第二位标记位为0并且就算是第一片虽然偏移量为0但是它的第三位标记位为1就说明它不是一个完整独立的IP报文一定被分片了。 所以如果满足  偏移量0 或者 第三位标记 1那么这就是分片的IP报文。 a.首先可以通过相同的标识将这三片聚在一起。 如果出现丢失了怎么办 1.丢了第一个 2.丢了中间的 3.丢了最后一个 对于1收到了很多同一个IP报文的分片报文但是没有一个偏移量是0的那么就可以判断是第一个丢了。 对于2在对收到的分片报文根据片偏移排序后发现如果有空缺那么就是中间丢了。 对于3如果分片报文里面没有一个结束标记位为0的那么就是丢最后一个了。 但是不管是哪一个分片丢了IP层都会将整个报文全部丢弃要求对方全部重新重发。所以我们是不建议分片的。比如假设一个报文丢失的概率是千分之一但是它被分成了四片那么本来重发的概率是千分之一或者丢包现在变成千分之四了。 但是IP层是从传输层拿数据的数据要发多少是传输层说了算因此我们可以发现TCP滑动窗口的大小假设即便有5000字节大小但是依旧被划分成1000字节一个段被称为MMS这样的形式发送明明一起发效率会更高一些但是还是分段发送的原因就是这个。另外在TCP三次握手的时候双方其实会交换自发单次发送最大报文的大小的。 另外我们要注意一个细节分片的时候是要算报头的大小的标准报头大小为20字节假设最大能发送1500字节那么1500 报头20字节 1480数据。而片偏移量是按原始报文大小为基准的不要把新增的分片报头大小算进去了。 假设有一个IP报文的总长度为3000字节那么分片后如下 那么这三片的偏移量依次为015002980。注意这个偏移量是根据原始报文大小来算的不要把新加的报头大小算进去。 总之TCP是可以控制发送大小的从而尽量避免分片而UDP就没办法了因为它是一个一个数据报发送的大小无法控制。  b.根据片偏移进行排序完成组装。 最后需要注意IP协议字段中分片偏移字段是以8字节为单位的因此在分片时为了更好描述分片偏移因此每个分片(除了最后一个)大小都必须是8的整数倍大小。 关于Mac地址 回到数据链路层 数据链路层解决的是直接相连的两台主机也包括路由器之间进行数据交付的问题。  每一张网卡都有唯一的一个Mac地址 同样可以用ifconfig命令来查看 在ether那里就是以太网的Mac地址。 Mac地址的作用是区分同一个局域网中特定的主机。  以太网Mac帧的格式 其中数据也就是有效载荷大部分就是上层的IP报文。 同理对于每一层的协议我们要考虑两个问题 1.Mac帧如果做到解包和封装 可以看出Mac帧采用定长报头来进行对报头和有效载荷的分离。就是解包和封装的。 其中目的主机就是下一跳主机的Mac地址源地址就是当前这台主机的Mac地址。类型和CRC都是固定字段能分离也能组装。 2.如何做到分用  根据类型的不同来进行分用比如0800表示有效载荷是一个IP报文0806就是ARP协议的报文。 局域网通信原理  同一个局域网的所有主机都是连在一起它们都有各自的IP地址和Mac地址。 如果有一台主机给另一台主机发送了数据那么不只是目标主机当前局域网的所有主机都能拿到报文只是除了目标主机外它们将报文解包后发现目的地址对不上然后直接将报文丢弃了只有目标主机拿到后才逐层向上解包直到用户。  如果H1刚发送了一个信息这时H3主机也刚好发送了一个信息那么这种现象就称之为数据碰撞并且H1和H3是能识别出发生数据碰撞的。 那么这时H1和H3就要进行碰撞避免算法了其实也就是双方都等一等错开发送信息的时间并且在等期间其他主机也可以通信等完之后还是要进行数据包的重发的。所以重发不仅仅在TCP有在数据链路层也有。 所以在局域网中主机数越多发生碰撞的概率也就越大。局域网在任何时刻只允许一台主机发数据。 所以现在主机A要想给主机B发送消息那么会先查自己的路由表然后发送给该局域网的入口路由器接着由这个路由器发给下一跳。并且路由器也是主机它也有数据链路层和网络层每经过一个路由器都会先解包分用交给它的网络层然后查询路由表然后再封装好Mac报头并且此时Mac源地址已经变成了该主机自己的Mac地址而Mac目的地址也变成了下一跳主机的Mac地址除非该报文已经到目的地了。 这也再一次说明了Mac帧只在局域网中有效。 我们直到交换机这个设备是工作在数据链路层的 交换机的作用是划分碰撞域减少局域网的数据碰撞。 假设交换机左侧发送数据碰撞那么交换机也能识别左侧的报文是碰撞报文那么就不会转发到右侧。  对于局域网数据碰撞可以看出在局域网发送的报文越短越好这个岔开各主机发送报文的时间 所以Mac帧的数据大小范围最大是1500最小是46字节。 所以对于网络层来说IP报头标准大小是20字节那么为了避免分片它的有效载荷最大是1480字节再到传输层TCP的标准报头大小也是20字节因此TCP也要为了避免分片的话每次发送的有效载荷最大是1460字节通常把这个长度称为MMS所以明明TCP的滑动窗口有时候有那么一大块但还是要划分成一段一段的就是这个原因为了避免分片而导致丢包概率增大在数据链路层有MTU在TCP这里有MMS。 而双方在通信的时候所经过的路由器的MTU可能不一样那么MMS也就不一样因此在三次握手的时候双方就协商好了各自的MMS大小并取双方的最小值。  ARP协议 ARP协议主要原理  ARP协议不是一个单纯的数据链路层的协议它是一个介于网络层和数据链路层之间的协议。它在IP协议之下在Mac帧协议之上。 刚刚谈过局域网通信原理我们将数据从主机A千里迢迢送到主机B所在的局域网后一般由入口路由器再转发给主机B而局域网通信是需要Mac地址的我们只直到主机B的IP地址但是却不知道主机B的Mac地址如何解决问题就要用到接下来要谈的ARP协议了。 ARP的数据报格式 注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。 硬件类型指链路层网络类型,1为以太网; 协议类型指要转换的地址类型,0x0800为IP地址也就是要将哪种地址转化成Mac地址。 硬件地址长度对于以太网地址为6字节;也就是当前Mac地址的长度如果是以太网这里就是6代表6个字节。 比如之前我们用ifconfig命令查看过 这个ether就是以太网后面每个冒号分隔的就代表1字节这里数下去就是6字节。  协议地址长度对于和IP地址为4字节;这里就是代表IP地址的长度我们通常用IPV4所以是4字节一般这里设置的就是4。 op字段为1表示ARP请求,op字段为2表示ARP应答 首先我们看到外面依旧裹着一层Mac帧的报头 其中这个帧类型我们之间也说过0800就代表这是一个IP协议那么就会直接解包后交给IP层如果是0806那么则说明这是一个ARP协议就会交给Mac帧协议的上层也就是ARP协议但是ARP依旧属于数据链路层的协议可见即便是同一层层里面也会有分层。 接下来再说说ARP的工作流程 如假设主机A要发送数据给主机B经过路由器的不断跳转终于到了主机B局域网的的入口路由器处可是入口路由器并不知道主机B的Mac地址它只知道主机B的IP地址。那么首先路由器会先通过广播号给当前局域网的所有主机发送一个ARP请求以此来找到目标主机的Mac地址 为方便将路由器假定为主机R目标主机为主机B。  在这个请求中各自对应的参数依旧是 Mac帧的 以太网目的地址由于根本就不知道是谁于是填全F不过全F也就代表这是一个广播Mac地址。 以太网的源地址主机R的Mac地址。 帧类型0806说明是ARP协议的报文 CRC先不管 ARP协议的 硬件类型1代表是以太网。这里假设是1当然也有表示无线的 协议类型 因为这里是要将IP地址转Mac地址所以是0x0800。 硬件地址长度也就是Mac地址的长度这里一般固定填6代表6字节。 协议地址长度就是IP地址的长度IPV4也就是4字节那么这里也填的是4。 op这里填1代表的是ARP请求。 发送端的以太网地址MacR 发送端IP地址IPR。主机R的IP地址 目的以太网地址跟Mac帧那里一样全F 目的IP地址IPB。主机B的IP地址 这样就构成了一个Mac帧在局域网内对该网的所有主机发送了过去因为Mac帧的源以太网地址填的是广播号地址因此所有主机都要受理并通过帧类型0806发现是ARP协议于是就都交给ARP协议。 在同一局域网内任何主机都会收到ARP请求那么任何主机也会收到ARP应答。  到了ARP软件层之后在这么多字段里所有主机先看的是op字段如果是1那么说明这是一个ARP请求那么再看目的IP地址如果目的主机不是自己那么会直接丢掉这个ARP报文。 接着主机B收到了这个ARP请求后就要给主机R发送ARP应答了 这里就只补充相比请求不同的部分了首先是Mac帧 此时的目的Mac地址变成了MacR源Mac地址变成了MacB。 然后ARP部分 首先就是op字段这里就要设置成2代表是应答。 然后是目的/源Mac地址对应的改变目的/源IP地址也对应改变。 构建好ARP应答后接着向下封装好Mac帧后就发送到局域网内了这里已经不用全F的广播地址了。 返回应答的过程中不像请求时那样所有主机收到Mac帧之后都要受理根据帧类型交付给ARP软件层这里可以直接通过目的Mac地址进行比对发现不是就可以直接丢弃了。 然后就是主机R收到了这个ARP应答了Mac帧解包后进入ARP软件层后依旧是先看op字段发现是2表示这是一个应答。总之op决定了这个ARP报文的类型。 然后主机R就顺利的拿到了主机B的Mac地址。 我们可以用指令 apr -a 来查看ARP缓存 我们可以看到IP地址都对应了一个Mac地址。 主机在经过一次ARP请求之后 目标主机的IP地址和Mac地址会被主机临时缓存起来。有效时间一般是几十分钟不等。 在Windows的命令窗口中也可以查看 这些都是IP地址与主机Mac地址的映射关系。 在得到这样的映射关系后才会回到最开始也就是主机R能真正将数据发送给主机B。  ARP协议周边问题  1.ARP只有在缓存失效的时候才会进行不必每次都做。 2.另外ARP协议很广泛并不是只有在入口路由器到目的主机之间才会做路由器与路由器之间也会构成一个局域网该局域网的入口路由器要找到下一跳也要进行ARP协议的。 3.我们知道我们的主机有自己的内网IP地址以及当前的子网掩码 比如Windows下用该命令 然后还有ping命令 那么其实我们也可以通过自己主机的内网IP与子网掩码进行按位与得到该网段的网络号之后遍历除了主机号和广播号的所有IP地址将它们ping一遍这样就能拿到该网段所有主机的IP地址与Mac地址的对应关系了。 3.我们知道ARP缓存是有有效时间的这是因为为了防止有些主机换网卡了导致Mac地址变了IP地址可能没变的情况。但是ARP有这样一个特点 如果一个主机收到多次同样的ARP应答那么会以最新的ARP应答为准。那么就可能有如下情况 主机R是路由器在该路由器下有两台主机AM。主机M向主机A发送大量的虚假的ARP报文它将这个ARP报文的源IP地址修改成IPR以此来伪造自己是主机R但是源Mac地址依旧是MacM。 那么即便主机A缓存了IPRMacR的映射关系但是由于收到了很多来自主机M的ARP报文导致主机A对于IPR的映射关系变成了IPRMacM也就是现在主机A将主机M误认为是路由器那么主机A以后发送数据就向主机M发送如果主机M拿到数据之后直接丢弃掉那么就实现了让主机A定向断网/离线的操作。 这种攻击就称之为ARP欺骗 或者主机M也可以不将数据直接丢弃而是将Mac帧的IPA和MacA替换成了IPMMacM然后将数据转发给了主机R主机R再将数据转发出去然后同理收到的应答也是主机R先发送给主机M然后主机M再以主机R的名义转发给主机A那么此时主机M就成了主机A与主机R之间的中间人机器。也就是基于ARP成为中间人的方式。 既然主机M能欺骗主机A那么也可以以同样的方式欺骗主机R也就是说成为中间人不一定只有单向欺骗的方式也可以直接通过双向欺骗的方式成为中间人。 并且是有能够向某主机发送ARP欺骗报文的工具的不过这里不能说可以直接问文心一言这样的AI模型。 最后我们知道ARP协议是为了将IP地址转Mac地址还有一个协议RARP协议与ARP协议反过来的它是将Mac地址转IP地址的 也就是拿着Mac地址去找IP地址因此比拿着IP地址找Mac地址是要容易得多的。 DNS协议  DNS(Domain Name System)  也就是域名解析服务。我们现在已经知道了我们可以拿着域名去访问服务器但是实际上是域名先被解析成IP地址后再通过IP地址访问的。 所以我们实际访问服务器还是根据IP地址访问的至于为什么还要域名这是因为为了让互联网更具有通用性方便人们去记忆。所以我们拿着域名去访问服务器首先浏览器会拿着域名通过浏览器内置的DNS服务器的地址找到DNS服务器然后将域名解析成IP地址然后再通过IP地址去发起请求。 所以往后要是面试官问HTTP请求到拿到网页的过程是要先通过DNS进行域名解析如果已经对域名和IP地址的映射关系缓存了就直接用如果没有就先解析后拿到IP地址再发起请求。完了之后就是我们熟悉的事了先通过TCP的套接字进行三次握手三次握手之后构建HTTP请求这里面分请求行请求报头空行和正文然后再构建一个Request发送给对方然会对方再构建一个响应返回将返回拿到的信息资源交给浏览器处理然后浏览器通过渲染就形成了我们的网页。 最开始没有域名的时候有一个叫主机名的东西在现代主机中会有一个文件里面记录了主机名对应的IP地址。 Linux下可以用命令 cat /etc/hosts 最初, 通过互连网信息中心(SRI-NIC)来管理这个hosts文件的 如果一个新计算机要接入网络, 或者某个计算机IP变更, 都需要到信息中心申请变更hosts文件. 其他计算机也需要定期下载更新新版本的hosts文件才能正确上网. 但是这样太麻烦了于是就有了DNS系统。 一个组织的系统管理机构, 维护系统内的每个主机的IP和主机名的对应关系. 如果新计算机接入网络, 将这个信息注册到数据库中; 用户输入域名的时候, 会自动查询DNS服务器, 由DNS服务器检索数据库, 得到对应的IP地址. 至今 , 我们的计算机上仍然保留了 hosts 文件 . 在域名解析的过程中仍然会优先查找 hosts 文件的内容 这里看起来很简单但是DNS服务其实是一种很关键的服务如果域名解析服务出问题了影响范围非常大。 关于域名的介绍 主域名是用来识别主机名称和主机所属的组织机构的一种分层结构的名称。 com: 一级域名. 表示这是一个企业域名. 同级的还有 net(网络提供商), org(非盈利组织) 等. baidu: 二级域名, 公司名. www: 只是一种习惯用法. 之前人们在使用域名时, 往往命名成类似于ftp.xxx.xxx/www.xxx.xxx这样的格式, 来表示主机支持的协议. 很重要的一个面试题 问 浏览器输入URL后发生的事情。 这是一个开放式的面试题它能直接考察到对网络理解的水准 可以从三个方面来谈 1.域名解析 http的过程 2.提一下https 3.谈论细节比如构建请求的时候的请求行请求报头正文等并且实际在http请求之前要先进行三次握手要先建立好链接再构建http请求然后再通过网络转发给对方主对方主机再构建应答也就是响应构建响应报头的时候也要构建状态行响应报头还有正文等然后再把响应报文通过网络发送回来浏览器拿到之后再对报文进行解析然后对正文进行解释解释好之后就可以把网页渲染出来了。这是最简单的回答如果还要详谈还可以再细说https在通信之前还要进行密钥协商如果还要再详细那么就开始往TCP开始讲比如在传输层我们的数据其实都是字节流通过发送缓冲区发送给对方这里又要考虑流量控制和拥塞控制还有超时重传面向连接确认应答还可以再说说效率方面的有延迟应答快重传等这些。再说就到了IP层有子网划分查路由表还有分片和组装再往下问还有Mac帧总之还有很多能谈的至于究竟要谈多深要和面试官边谈边商量。 总之这种开放式问题比直接问什么是什么是要难很多的不仅要考理解还会考到语言组织能力 ICMP协议   ICMP协议是一个网络层协议。它是在IP之上传输层之下的。 一个新搭建好的网络, 往往需要先进行一个简单的测试, 来验证网络是否畅通; 但是IP协议并不提供可靠传输. 如果丢包了, IP协议并不能通知传输层是否丢包以及丢包的原因。 ICMP的主要功能包括 确认IP包是否成功到达目标地址. 通知在发送过程中IP包被丢弃的原因. ICMP也是基于IP协议工作的. 但是它并不是传输层的功能, 因此人们仍然把它归结为网络层协议; ICMP只能搭配IPv4使用. 如果是IPv6的情况下, 需要是用ICMPv6; 我们平常用的ping命令其实就是用的ICMP。可以ping一个域名 这个TTL就是报文经过了53次路由器跳转。 如假设底层没有采用ICMP这样的协议那么如果发生丢包了就只能等TCP协议触发超时重传了但是如果采用了ICMP协议那么假设发生了丢包它就会返回一个ICMP报文来告诉主机A目标主机是不可达的。 在网络层ICMP会给IP层封装一个ICMP的报头然后再给IP层最后再向下封装然后再发送出去。 然而在应用层有一种原始套接字它允许我们绕过传输层直接访问网络层比如构建ICMP。ping命令就是采用了这种方式。  ICMP报文的格式 ICMP报文大致分为两种 1.通知出错原因。 2.用于诊断查询。 部分类型字段的内容 一个面试很坑的问题telnet是23端口, ssh是22端口, 那么ping是什么端口? ping命令是基于ICMP的也就是工作在网络层的而端口号是传输层的内容网络层根本不关心端口号这样的信息。 traceroute命令 也是基于ICMP协议实现, 能够打印出可执行程序主机, 一直到目标主机之前经历多少路由器。 NAT技术 NAT技术是解决IP地址不足的主要手段或者说最重要的手段它是路由器的重要功能。 NAT能够将私有IP对外通信时转为全局IP. 也就是就是一种将私有IP和全局IP相互转化的技术方法: 很多学校, 家庭, 公司内部采用每个终端设置私有IP, 而在路由器或必要的服务器上设置全局IP;   全局IP要求唯一, 但是私有IP不需要; 在不同的局域网中出现相同的私有IP是完全不影响的; 之前只是简略说过主机A发送的数据报由内网到公网期间经过路由器不断的替换源IP地址直到将数据报发送到对方服务器但是我们并不知道服务器又该怎样将报文转发回来给主机A。 简单回顾发出去的过程 NAPT 对于服务器怎么找到主机A采用的就是NAPT技术使用IP port 来建立关联关系。 主机A将数据发送出去在通过每次局域网转发的时候都会建立一张转换表也就是NAPT并且通过IP port的方式来保证K值的唯一性。 流程如下 比如首先在转发出去的时候替换之前源IP之前会将源IP地址 源端口号和目的IP 目的端口号先组成一个Key。 替换之后会将替换之后的源IP地址 源端口号和目的IP 目的端口号再组成一个Key。 但是假设此时主机B也要对服务器发送请求并且端口号也是1025那么在右侧的Key值就会和主机A右侧的Key值重合了因为Key要具有唯一性因此它把端口号替换成了1026用不同的端口号来区分唯一性。 因此NAT不仅仅只会替换IP地址它还有可能替换端口号。 那么服务器想要返回响应的时候它只要将响应发送到上一级路由器然后路由器通过查转化表又不断的通过替换IP来完成外网到内网的转化。 这种关联关系也是由 NAT 路由器自动维护的 . 例如在 TCP 的情况下 , 建立连接时 , 就会生成这个表项 ; 在断开连接后 , 就会删除这个表项。 其实可以将这两个Key看作两个哈希表都是通过Key去查Val但是Val又是另一张表的Key。 不过如果路由器上有很多IP和端口号不会卡死吗这里我们之前一直说我们家里面用的是家用路由器而运营商的路由器是企业路由器二者的功率配置等有很大差别毕竟价格就差距很大。就算运营商的企业级路由器的端口号被打满了它也可以再构建一个子网来管理。 NAT技术的缺陷 1.因为我们看到了NAT技术是通过每个路由器查转换表一级一级往上直到服务器那么它只能先由内网发送请求到外网才能建立这个转换表而无法外网直接访问内网。 2.转化表的生成与销毁都是要开销的。但是查询成本并不高因为类似哈希的原理。 3.通信过程中一旦NAT设备异常, 即使存在热备, 所有的TCP连接也都会断开。 内网穿透 在不同的局域网中我们是无法直接从主机A发送数据给主机B的 一般都是先把数据交给公网然后再由公网交给主机B就比如QQ微信那样。 如果我们就是想让主机A与主机B通信那么就必须在公网上有一个公共的服务器比如主机A想给主机B通信的场景那么主机B得先跟服务器建立一个TCP长链接还得有一个专门的客户端这样的然后主机A就可以发送数据给服务器然后服务器再转发给主机B这样就能实现主机A与主机B通信了这种技术就是内网穿透。 如果玩过MC并且用过内网穿透联机的应该知道首先需要一个伙伴先开放游戏内的局域网后主要是开放端口号然后通过内网穿透的客户端软件建立一个链接然后客户端将对应的IP地址和端口号本主机游戏的端口号返回给你然后你拿着返回过来的IP地址和端口号发给好伙伴然后好伙伴就可以拿着IP地址和端口号进行联机了本质上也就是通信本质上也还是好伙伴发送的数据经由公共服务器的转发到你的主机上。 还有一些内网穿透的工具比如frpgithubgitee上有它有俩功能 frpcclient客户端还有frpsserver服务器。那么未来使用就是先将服务器部署在我们的云服务器上客户端部署在我们要通信的主机上这个主机一般都是全天不断电不断网的就是为了和服务器建立长链接那么未来我们在地球的任何地方只要能找到我们的云服务器就能通过内网穿透的方式跟那台主机进行通信。注意我们的云服务器并不提供真正的网络服务它只提供消息转发。 NAT和代理服务器 刚刚说的内网穿透其实也还只是路由器级别的跟真正的服务器还是有差别的。 关于代理服务器有一个很典型的例子就是我们的校园网。如果我们连着校园网那么我们看B站刷抖音所发出的请求并不是直接交给网络运营商的而是要先交到学校的服务器上的。还记得我们使用校园网之前要先打开浏览器先输入账号和密码登录之后才能使用吗这个登录其实就是认证这个认证是在干啥呢 其实认证就是为了获取局域网IP地址然后路由器并没有认证的能力它只有分配IP地址的能力因此就需要服务器来进行登录和认证 所以我们发送的数据先经过路由器然后这个路由器会先转发到学校的服务器上然后这个服务器再将数据转发到外面的运营商。这样也就说明我们发送的数据学校其实是知道的。 校园网这里为什么要有服务器呢这是因为它要对我们的账号进行管理要管理每个账号的缴费问题等这样才能进行收费。这样的话我们的钱就不是交给运营商了而是交给学校了但是也并没有抢运营商的生意因为学校也同样要交些钱给运营商毕竟最终数据还要交给运营商去做处理的。 另外如果发送了一些非法请求也可以直接在学校的服务器里进行拦截或者屏蔽。比如前段时间用校园网登录不上ssh我用的X-shell但是换成热点后就能登录了这就是因为一些学校会对ssh这样的一些请求做屏蔽。 或者我们有同学用校园网看电影对方的服务器的数据依旧要先经过学校的服务器我们看完一部电影这部电影也在学校的服务器上缓存好了那么有些学校搭建的一些电影网站把这些电影放上来用校园就可以直接看也就是在内网直接看。 但是如果数据加密了就不行了。 所以这种服务器也就是代理服务器同时它是为客户端代理的所以也叫做正向代理服务器注意这种服务器不是什么路由器而是Linux机器并且可以是多台机器。 有正向代理服务器那么还有一种就是反向代理服务器了。 比如在一家大公司里它有很多服务器都要处理来自各地的请求很多服务器就有不同的IP地址如果有很多请求都集中在一台服务器上导致这台服务器非常繁忙而其它服务器却又很闲这就是服务器负载不均衡那么为了解决这个问题可以在这么多服务器外面再加一台服务器但是这个服务器对请求不做任何处理它只负责转发工作它可以通过随机或者轮询的方式将到来的请求转发给内部的服务器以此来达到负载均衡的目的这种服务器也就是反向代理服务器。 我们之前说的内网穿透其中那个公共的服务器其实就是一种反向代理服务器。 总结 正向代理一般就是做请求的转发一般是广域网。 反向代理一般应用在服务器的负载均衡上一般是局域网。 接下来简单说说翻q的原理 首先我们访问国内服务器的流程已经知道了正常访问国外IP的请求会被运营商直接拦截。 但是我们国内其实是有一些特殊地区比如香港这些是可以直接访问国外的而我们国内又可以访问这些特殊地区那么我们可以先给特殊地区先前就建立好的服务器发送数据然后再由这个代理服务器转发给国外服务器然后拿到响应后再经由国内的运营商转发回来给我这样就完成了一次翻q。不过如果我们的数据没有加密的话运营商是有可能会识别出来异常的如果识别出来了就一样被会拦截掉。 这种加密协议可以我们自己做也可以用 Socks5 协议来做。  总之这种代理服务器也就是正向代理服务器。不过这种个人来搞的话成本是比较高的一般都是使用别人做好的我们一般下载好它的客户端这个客户端就会即时的劫持我们的请求然后通过代理服务器转发然后再转发回来。 总之我们可以先对自己要发送的数据进行特殊加密然后以正常的http请求去访问特殊地区的服务器然后这个服务器当然一般是我们部署的将拿到的数据解密之后再发送给外端的服务器然后将拿到的响应进行加密再发送回来我们拿到后再进行解密就完成访问了期间绕过了运营商的检查。 常规情况下http默认携带的数据是非http的其他数据但是这个其他数据也可以是其他数据的报文我们把这个叫做http的 隧道 技术。 同理我们的服务器也不一定非要用http协议它也可以用其他的协议因此隧道技术不是只有http才有的。 NAT和代理服务器有哪些区别呢 虽然NAT和代理服务器在技术实现上看起来有点像但其实是完全不同的两个东西。 从应用上讲NAT设备是网路基础设备它解决的是IP地址不足的问题。而代理服务器更贴近应用比如通过代理服务器进行翻墙还有很多游戏都有加速器。 从底层上讲NAT是工作在网络层的它直接对IP地址进行了替换。而代理服务器是工作在应用层的。 从使用范围上来讲NAT一般在局域网的出口部署代理服务器既可以在局域网做也可以在广域网做。 从部署位置上来讲NAT一般集成在防火墙路由器等硬件设备上而代理服务器是一个软件程序需要部署在服务器上。
http://www.zqtcl.cn/news/298778/

相关文章:

  • 奥迪网站建设策划书wordpress取消评论审核
  • 无锡百度正规公司专业seo网站优化推广排名教程
  • 湖南城乡建设厅网站青岛网站推广招商
  • 网站备案信息加到哪里国际要闻军事新闻
  • 商河县做网站公司如何仿制国外网站
  • 网站如何跟域名绑定唐山正规做网站的公司哪家好
  • 网站建设wang.cdwordpress文章链接插件
  • 本地进wordpress后台搜索优化师
  • 网站备案证书下载失败法国 wordpress
  • 海南平台网站建设企业优秀的设计案例
  • 拿别的公司名字做网站合肥网页设计培训班
  • 到哪个网站做任务太原百度seo优化推广
  • 北京外贸网站开发广东智慧团建系统入口
  • 做百度网站接到多少客户电话阿里云服务器win系统建站教程
  • 天空在线网站建设深圳外贸网站怎么建
  • 网站的交流的功能怎么做小商品网站建设
  • 求职招聘网站建设投标书怎样在手机上面建设网站
  • 重庆工厂网站建设备案域名出售平台
  • 免费网站优化校园电商平台网站建设
  • 宁波市住房和城乡建设局网站成都网站建设网站制作
  • 网站制作还花钱建设银行网站查询密码是啥
  • 周到的做pc端网站产品图册设计公司
  • 淘宝客新增网站网页设计板式类型
  • 怎么使用wordpress建站吃什么补肾气效果好
  • 建设网站中期wordpress做分类信息网站
  • 百色住房和城乡建设部网站江苏交通建设监理协会网站
  • 常州网站建设哪儿好薇有哪些做外贸网站
  • ip域名找网站一级域名和二级域名的区别
  • 手机网站 底部菜单网站切换效果
  • 珠海公司做网站wordpress最近访客