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

1,网络介绍

  为什么要存在互联网?

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

 主要讲互联网的各种协议。如:

   osi七层协议

2,子网划分(通过控制子网页码来达到划分不同局域网的目的)

  192.168.10.11/24

  192.168.10.230/24  

  在/24的子网页码的时候,是一个网段的,但是如果改了子网页码,即使它们连接在同一个交换机上,也不是一个网段的,也无法通信。

3,vlan (virtual lan ,虚拟局域网,一个交换机就一个局域网,但是现在一个交换机可以当多个局域网,也算是虚拟化技术的一种。)

  交换机的基础知识

  然后讲配置网络,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的状态下,说明服务端正处于高并发的状态下。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

拓展:上网为什么要花钱,如果是局域网,自己和自己玩,不用花钱。因为属于后来者,其他各个组织,机构,开始尝试把个个网络设备连接在一起,如果自己想去外网,去哪个网站,必须连接到别人连接好的网络。        

 

posted @ 2021-04-01 22:00  sagelasi  阅读(565)  评论(0编辑  收藏  举报