linux day23(网络介绍,互联网通讯协议osi七层协议,arp协议,tcp协议)

1,网络介绍python

  为何要存在互联网?shell

  为了数据传输更加方便快捷。数组

 主要讲互联网的各类协议。如:浏览器

   osi七层协议服务器

2,子网划分(经过控制子网页码来达到划分不一样局域网的目的)网络

  192.168.10.11/24架构

  192.168.10.230/24  并发

  在/24的子网页码的时候,是一个网段的,可是若是改了子网页码,即便它们链接在同一个交换机上,也不是一个网段的,也没法通讯。运维

3,vlan (virtual lan ,虚拟局域网,一个交换机就一个局域网,可是如今一个交换机能够当多个局域网,也算是虚拟化技术的一种。)tcp

  交换机的基础知识

  而后讲配置网络,ip,地址,路由的配置,路由条目等等。  

  路由器,也是硬件,操做系统,只不过专门为路由转发的硬件和操做系统。

 

运维,就是维护软件的稳定,而软件,基本上都基于网络通讯的软件,操做系统,网络的稳定。因此网络很重要。

 

一,网络介绍

  1,基于网络通讯的软件有俩种架构:

  cs架构  clienk(客户端)------------网络----------------server(服务器)  

  bs架构   browser(浏览器,在早期至关于万能客户端)------------网络-------------server(服务器)

 cs架构的软件,优势:客服端,服务端都是本身开发,客户端服务端如何通讯,本身说了算。      

        缺点:客户端,服务端都要本身开发。用户必须下载客户端才能访问问服务端。

  bs架构的软件,优势:只开发服务端,

         缺点:开发的服务端的规则须要受制别人,由于客户都下载好了浏览器客户端。

   注意:如今开发,既有本身配套的客户端,也能被浏览器访问,如腾讯视频。

 

  2,什么是网络

  底层的物理链接介质要准备好,如同打电话,首先须要一个电话,而后是电话线链接在一块儿,而后打电话为了互相能听懂,都学了普通话,就等于你们一块儿商讨出来的统一标准,就是通讯的协议。

  网络=物理连接介质+通讯的标准(互联网通讯协议)

  互联网通讯协议如同互联网界的英语。等于你们必须都能听懂才行

  物理连接介质主要是网络工程师来管,更多的是将各类通讯协议。

云计算

  原本本身电脑若是看高清视频的压力,或者玩大型网络游戏,本地资源的压力都在本身这一端,有了云计算,只须要保证网速,显卡,本身其余电脑的性能不须要特别高,就能轻松使用,复杂的操做性能方面的问题,都在服务端解决。我的pc计算机的发展也会愈来愈小。

  3,互联网通讯协议(osi七层协议)如同计算机界的英语,你们都会才能通讯:

主要学5层和7层

第一层,物理层:发送高低电平,单纯的电信号没有意义,计算机只能发送高低电平,就规定高电平对应1,低电平对应0,发出来的信号101001010110.....

第二层,数据链路层:可是即便如此单纯的二进制数依然没有意义,因此想让它有意义,必须进行分组附加对应的意义。这个划分的协议就是,ethernet以太网协议,研究以太网协议,就是看它如何规定。

  以太网协议:规定三件事

   1,规定了名字:称为数据帧,每一组数据帧,

   2,规定了数据格式,都分为头,和数据俩部分,

         头(至关于快递单,地址,简单描述):一共14个字节,前6个是源地址/发送者,紧接着6位是目标地址/接收者,后俩位是数据类型,数据的一些描述信息。

          数据部分(至关于要送的快递):最短46,最长1500字节

     3,以太网协议规定,一台计算机但凡进入网络,必须有一块以太网卡,而每一块以太网卡,在出厂的时候都烧制一块地址,这个地址叫mak地址。

     mak地址

     mak地址,由12位16进制数组成的,前6位是厂商地址,后6位是流水线地址,为了让每一块mak地址都是独一无二的地址。以太网的工做方式是广播,广播包是在局域网里发的,若是只是在一个局域网里通讯,只须要以太网的工做方式,加上mak地址就够了。是网络实际上是由一个个局域网组成的,因此若是不在一个局域网,那么就须要跨局域网,就须要先找到对方在哪一个小局域网,这时候就须要新的协议,地址,专门标识局域网的地址。

第三层,网络层:

    ip协议,如今一般使用ip的第四个版本,因此又叫ipv4协议。

    iPv4协议,规定每台计算机必需要有一个ip地址。

    点分十进制,0.0.0.0 这是最小值,分4个位,每一位都是8个二进制数,8个二进制数的最小值就是00000000,最大值是11111111,8个1转换成10进制,255.255.255.255,不够用,后来诞生ipv6,目前主流仍是ipv4,子网页码和ip地址结构同样。

    可是,单纯的ip地址是没有意义的,须要搭配子网页码,一般都是搭配出现的。

    例子:

      172.16.10.2/24 (24,表明连续写24个1)

      10101100.00010000.00001010.000000001 -》172.16.10.2 ip地址    

       11111111.11111111.11111111.00000000     -》 255.255.255.0    子网页码

      ip地址和子网页码,会进行按位与运算,俩个二进制数,上下同时为1,就为1,不然就为0

        10101100.00010000.00001010.000000000  -》172.16.10.0    子网地址,或者叫网络地址,用来标识别人在哪一个局域网里。

      可是只是拿到子网地址,还不够,须要找到局域网里究竟是那台机器,就须要加上mak地址。

    ip(ip+子网页码)+mak地址 -》标识全世界范围内独一无二的一台计算机。

    arp协议:就如同不知道对方地址,想给对方寄快递,arp协议如同打电话问对方的地址在哪。经过ip问对面mak地址是什么。

    须要拿到对方的ip地址

    计算机怎么知道对面的计算机跟本身在不在一个局域网

    例:

      源:172.16.10.10/24   经过和子网页码按位与运算,得172.16.10.0

      目标:172.16.10.11/24                                               得172.16.10.0

      1,计算机基于arp协议,会把本身和目标的ip地址和对应的子网页码进行按位与运算,算出一个网络地址,两个若是同样,就能够肯定对方和本身在一个局域网内。(xshell,使用python,bin()括号内输入数字,就能够转为10进制数,而后再和子网页码进行按位与运算,得出一个网络地址)

      2,判断本身的子网地址与对方的子网地址是否同样

        子网地址若是同样,证实本身与对方是在一个局域网,须要拿到对方的mak地址就能够通讯了。

(1)本机,封一个arp协议的包

网络层,数据包              源ip                      目标ip                     数据部分                     

                                    172.16.10.10/24    172.16.10.11/24          要你的mak地址

数据链路层,数据帧                      源mak                     目标mak                

                                          本身mak地址          FF-FF-FF-FF-FF-FF     (谁看到都会明白这是在要本身的mak地址,给不给就看目标ip地址是否是本身。)     

 (2)交换机    

物理层,把上面的打成2进制数,传给交换机(2层设备),收到一堆二进制数,而后汇总成一个包,交换机会解析到数据链路层,看到以太网协议的数据的包,目标mak地址是FF,直接广播的方式发在局域网内,

(3)局域网内机器

从物理层-》数据链路层-》网络层。每一个人都拆开看看,发现FF,知道要本身的mak地址,而后看ip头,看看目标ip是否是本身,不是就丢掉,是本身就发回信息,对方知道本身的mak地址,之后用mak地址通讯。 返回的流程略。       

至此,本身的计算机就拿到了,172.16.10.11/24的mak地址,为发数据最好了准备工做。并非完成通讯。

 

交换机:

  自带mak地址学习功能,交换机都有一个mak地址表,最开始是空的,1号端口什么也没对应,其余号端口也是,可是当有人把机器经过网线链接在交换机上,总有机器向交换机发包,交换机就会把二进制汇总到数据链路层,它能够基于以太网协议拆数据链路层的包,前6个字节是源mak地址,它立刻就知道例如,10号端口对应的mak地址是谁,而后再拆6位,知道目标机器的mak地址是多少,而后广播,而后总有一台机器相应,那么又知道一个端口对应的mak地址,最后这张mak地址表就会被填满。之后就会直接发给目标mak地址。若是没记的,仍是广播。

    在什么状况下交换机才广播:

      1,目标mak是FF-FF-FF-FF-FF-FF

      2,目标mak地址不存在与mak地址中去

 

    总结:若是两台计算机在同一个局域网内,ip地址做用只是用来获取对方的mak地址。而mak地址才是真正用来通讯的

 

      若是经过ip和子网页码算出来的网络地址发现不同,那么就须要跨局域网通讯。首先须要获得网关的mak地址,那就和上面同样经过arp协议,由于路由器和交互机是连在一块儿的,就至关于和咱们在同一个局域网内。

     (1)本机,封一个arp的包 

网络层,数据包              源ip                      目标ip                     数据部分                     

                                    172.16.10.10/24    172.16.10.11/24          要你的mak地址

数据链路层,数据帧                      源mak                     目标mak                

                                          本身mak地址          FF-FF-FF-FF-FF-FF (这里要的mak就是网关路由器的mak地址,交互机就会广播,网关拆到ip,发现是本身,就会给我mak地址)

      (2)交换机广播

      (3)目标机器,也就是网关,发现ip是本身,返回我mak地址,我拿到了网关的mak地址。

         网关是有俩个地址,一个是对内,一个是对外网,

      (4)如今要发数据,源mak是本身的mak地址,而目标mak地址,不是想发给目标的mak地址,由于根本不在一个局域网,没法拿到mak地址,因此目标mak地址是网关的mak地址。源ip是本身的,目标ip是目标ip,不是网关的ip地址

1)本机,封一个arp的包 

网络层,数据包              源ip                      目标ip                     数据部分                     

                                    172.16.10.10/24     不在同一个局域网的目标ip    数据

数据链路层,数据帧                      源mak                     目标mak                

                                          本身mak地址             网关的mak

        拓展:路由器是三层设备。路由器拆到第三层,发现源地址是一个内网的ip地址,而目标ip是外网的ip地址,就知道这个包要往外网发,不过路由器自己就是一边链接内网,一边链接之外的设备。路由器会作一个源地址转换,换成本身的地址,目标地址不变,再往外发,之后就是做为运营商的地址,再往外发。。。。一旦路由器往外发了,就是网络工程师的事了,走的事路由协议。

 

以上讲的是经过ip地址和mak地址来找到计算机在哪,应该是找到某台计算机,上面运行的多个软件的其中一个。

第四层,传输层 tcp,udp(端口号0-65535,其中1024之前的都被系统占用了)

  凡是基于tcp协议和udp协议通讯的软件都会被操做系统分配一个端口号,表示一台计算机上经过网络通讯的软件,每个端口号对应一个。

 

ip+mak+port(端口号)-》表示全世界范围内独一无二的一个基于网络通讯的应用软件。

 

端口:端口号,是操做系统管理的,客服端的端口号,每次都是随机的,服务端的客户端是固定的。

第五层,应用层(若是是cs架构的软件,想怎么定义协议,想用哪些协议随便,可是若是是bs架构的软件,就必须属于如http,fto等协议,由于客户端不是本身开发的。)

整个流程:

  应用层数据包处理好以后,交给传输层

  传输层加了一个头,是源端口和目标端口,交给网络层

  网络层,加个头,源ip,目标ip,交给下一层

  数据链路层,加上头,源mak地址,和目标mak地址,给下一层

  物理层,所有打散成二进制

  先到交换机,而后分析,给对方计算机了。

  而后物理层,汇总

  数据链路层,基于以太网协议,看源mak,目标mak,发现是本身再往上交

  网络层,根据ip协议,这里意义不大

  传输层,根据tcp/udp协议分析,源端口意义不大,关键是目标端口,把包交给对应的端口的软件。

   应用层,这个数据包被处理过,可是,客户端服务端都是本身开发的,随便,确定能够反解出来。

 

  目的就是把客户端把数据送给了服务端,为何这么复杂,缘由就是由于,网络是通过一个个不一样种类的物理介质链接起来的,因此每次日后发,必须让不一样的设备之间清楚这个包下一步要往哪里发。

 

tcp协议(好人协议,有弊端,不会拒绝):传输层的

  tcp传数据可靠:是由于它每发一个数据包过去,内存里的数据包是不删除的,等到对面回一个ack=1确认信息,它才删除内存里的数据。若是没回,会再发一次

  udp传数据不可靠:每发一个数据,udp立刻就会把数据删掉。

  tcp协议是基于连接

  udp协议没有连接

  udp传数据的效率更高

  

  但凡一个应用程序是基于tcp工做的,在通讯以前必须先创建一个双向通路。

  如同打电话问一下对面是否赞成挖一个到他家的通道,挖通以后,他也打电话问我,也挖通道。一共4次。可是中间他赞成和请求能够合并,变成3次完成。

 tcp三次握手,

  好人协议           

 客户端,俩种状态,syn_sent(寄出) established(创建成功,可是客户端看到的建议成功,有可能这个链接尚未真正的创建成功)

  syn_sent

  established

 服务端,三种状态,listen(倾听,监听,netstat -按 | grep 80 ,会发现服务器在listen状态),syn_rcvd (收到) established (创建成功)

  listen

  syn_rcvd (已经收到的状态)基本看不到这个状态,由于传输速度很是快,若是长期属于这样的状态,多是本身的服务器,正在遭受syn洪水攻击,dos拒绝服务攻击,ddos分布式攻击。

        dos拒绝服务攻击,如同拍一群人堵住对方饭店的门,让正经常使用户进不去。(通常都是有预谋有组织的攻击)

  established

 

    若是服务器长时间停留在syn_rcvd状态,一直没有进入创建状态,极可能正遭受洪水攻击。

   syn洪水攻击,服务端收链接,是一个个收的,在半链接池里,为何叫半链接池,由于收到syn链接时,并非一个完整的链接创建成了,因此叫半链接池。每发一个syn请求

,服务端都会把半链接放这个半链接池里,请求都是按照先进先出法则,客户端不停的往里放请求,操做系统不停的从里面往外拿,正常状况下,协做很好,速度很是快,这时候有人模拟大量的syn无效请求,让正经常使用户请求没法进入,直接报错,池子默认128个。因此遇到洪水攻击,须要把半链接池调大,可是会占用内存空间,同时还颇有可能无济于事,属于内核的优化,不如硬件方面的优化,直接加内存条。

 

  tcp断开链接,4次挥手,中间俩步不能合并,由于极可能有数据在传输

  若是是客服端先发完数据,上面的隧道就没有存在的意义。可是服务端的数据不必定就发完了,因此中间不能合并。

 

 客户端                                                                                                       服务端

fin_wait_1证实你是断链接的发起方,                                               close_wait 等待关闭 

fin_wait_2表明被动断开链接,表明客户端到服务端的通道断开了    last_ack服务端断开请求

 time_wait表明链接立刻就要断了

 一般状况下,服务端都是第一个发起断链接的,若是服务端一直处于time_wait的状态下,说明服务端正处于高并发的状态下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

拓展:上网为何要花钱,若是是局域网,本身和本身玩,不用花钱。由于属于后来者,其余各个组织,机构,开始尝试把个个网络设备链接在一块儿,若是本身想去外网,去哪一个网站,必须链接到别人链接好的网络。        

相关文章
相关标签/搜索