zoukankan      html  css  js  c++  java
  • day04 五层模型之间的通信过程及Linux的目录相关内容

    【OSI七层模型、TCP/IP五层模型---------协议概述(图)】

     

     

     

     

     

     

     

     

     

     

     

     

    协议:每一层都是为了完成一种功能。为了实现这些功能,就需要大家都遵守共同的规则。

    越下面的层,越靠近硬件;越上面的层,越靠近用户。

    应用层协议有:

    SMTP:简单邮件传输协议                             Telnet:远程登录协议 

    SNMP:简单网络管理协议                             FTP:文件传输协议

    LPD:行式打印机守护进程                             TFTP:简单文件传输协议

    NFS:网络文件系统协议                                 HTTP:  超文本传输协议 

    五层之间的通信过程:

    物理层——物理层就是把电脑连接起来的物理手段(以用光缆、电缆、双绞线、无线电波等方式),它主要规定了网络的一些电气特性,作用是负责传送0和1的电信号。

    数据链接层——单纯的0和1没有任何意义,必须规定解读方式,数据链接层确定了0和1的分组方式。

    互联网层——以太网在互联网层中占主导地位,以太网规定,一组电信号构成一个数据包,叫做”帧”(Frame)。每一帧分成两个部分:标头(Head)和数据(Data)。“标头”包含数据包的一些说明项,比如发送者、接受者、数据类型等等;”数据”则是数据包的具体内容。以太网规定,连入网络的所有设备,都必须具有”网卡”接口。数据包必须是从一块网卡,传送到另一块网卡。网卡的地址,就是数据包的发送地址和接收地址,这叫做MAC地址(且独一无二)。有了MAC地址,就可以定位网卡和数据包的路径了。以太网采用了一种很”原始”的方式,它不是把数据包准确送到接收方,而是向本网络内所有计算机发送,让每台计算机自己判断,是否为接收方。

        上图中,1号计算机向2号计算机发送一个数据包,同一个子网络的3号、4号、5号计算机都会收到这个包。它们读取这个包的”标头”,找到接收方的MAC地址,然后与自身的MAC地址相比较,如果两者相同,就接受这个包,做进一步处理,否则就丢弃这个包。这种发送方式就叫做”广播”(broadcasting)。有了数据包的定义、网卡的MAC地址、广播的发送方式,”链接层”就可以在多台计算机之间传送数据了。

         但是,这样缺点颇多,以太网以“广播”的方式,致使所有成员人手一“包”,不仅效率低,而且局限在发送者所在的子网络格里。因此,必须找到一种方法,能够区分哪些MAC地址是否属于同一个子网络。如果是同一个子网络,就采用广播方式发送,否则就采用”路由”方式发送。(”路由”的意思,就是指如何向不同的子网络分发数据包。)遗憾的是,MAC地址本身无法做到这一点。(它只与厂商有关,与所处网络无关。)这时候诞生了“网络层”,它的作用是通过网络地址,使得我们能够区分不同的计算机是否属于同一个子网络。(网络地址简称地址)自此每台计算机出现了两种地址,一种是MAC地址【将数据包送到该子网络中的目标网卡(后执行)】,一种是网络地址【确定计算机所在的子网络(先执行)】。两种地址之间没有任何联系,MAC地址是绑定在网卡上的,网络地址则是管理员分配的,它们只是随机组合在一起。

         IP协议:规定网络地址的协议,叫做IP协议。它所定义的地址,就被称为IP地址。目前,广泛采用的是IP协议第四版,简称IPv4。这个版本规定,网络地址由32个二进制位组成。

    习惯上,我们用分成四段的十进制数表示IP地址,从0.0.0.0一直到255.255.255.255。互联网上的每一台计算机,都会分配到一个IP地址。这个地址分成两个部分,前一部分代表网络,后一部分代表主机。比如,IP地址172.16.254.1,这是一个32位(十进制与二进制的转换)的地址,假定它的网络部分是前24位(172.16.254),那么主机部分就是后8位(最后的那个1)。处于同一个子网络的电脑,它们IP地址的网络部分必定是相同的,也就是说172.16.254.2应该与172.16.254.1处在同一个子网络。

    但是,问题在于单单从IP地址,我们无法判断网络部分。还是以172.16.254.1为例,它的网络部分,到底是前24位,还是前16位,甚至前28位,从IP地址上是看不出来的。那么,怎样才能从IP地址,判断两台计算机是否属于同一个子网络呢?

    这就要用到另一个参数”子网掩码”【子网络特征的一个参数】(subnet mask)。它在形式上等同于IP地址,也是一个32位二进制数字,它的网络部分全部为1,主机部分全部为0。比如,IP地址172.16.254.1,如果已知网络部分是前24位,主机部分是后8位,那么子网络掩码就是11111111.11111111.11111111.00000000,写成十进制就是255.255.255.0。

    知道”子网掩码”,我们就能判断,任意两个IP地址是否处在同一个子网络。方法是将两个IP地址与子网掩码分别进行AND运算(两个数位都为1,运算结果为1,否则为0),然后比较结果是否相同,如果是的话,就表明它们在同一个子网络中,否则就不是。比如,已知IP地址172.16.254.1和172.16.254.233的子网掩码都是255.255.255.0,请问它们是否在同一个子网络?两者与子网掩码分别进行AND运算,结果都是172.16.254.0,因此它们在同一个子网络。

    总结一下,IP协议的作用主要有两个,一个是为每一台计算机分配IP地址,另一个是确定哪些地址在同一个子网络。

          IP数据包(分为标头数据):根据IP协议发送的数据,就叫做IP数据包(其中必定包括IP地址信息)。我们把IP数据包直接放进以太网数据包的”数据”部分,因此完全不用修改以太网的规格。这就是互联网分层结构的好处:上层的变动完全不涉及下层的结构

         “标头”部分:主要包括版本、长度、IP地址等信息

         ”数据”部分:则是IP数据包的具体内容

          ARP协议:因为IP数据包是放在以太网数据包里发送的,所以我们必须同时知道两个地址,一个是对方的MAC地址,另一个是对方的IP地址。通常情况下,对方的IP地址是已知的,但是我们不知道它的MAC地址。所以,我们需要一种机制,能够从IP地址得到MAC地址。这里又可以分成两种情况:       

    • 如果两台主机不在同一个子网络,没有办法得到对方的MAC地址,只能把数据包传送到两个子网络连接处的”网关”(gateway),让网关去处理。
    • 如果两台主机在同一个子网络,那么我们可以用ARP协议,得到对方的MAC地址。ARP协议也是发出一个数据包(包含在以太网数据包中),其中包含它所要查询主机的IP地址,在对方的MAC地址这一栏,填的是FF:FF:FF:FF:FF:FF,表示这是一个”广播”地址。它所在子网络的每一台主机,都会收到这个数据包,从中取出IP地址,与自身的IP地址进行比较。如果两者相同,都做出回复,向对方报告自己的MAC地址,否则就丢弃这个包。              

           总之,有了ARP协议之后,我们就可以得到同一个子网络内的主机MAC地址,可以把数据包发送到任意一台主机之上了。                            

     

    传输层——有了MAC地址和IP地址,我们已经可以在互联网上任意两台主机上建立通信。此时,我们还需要一个参数,表示这个数据包到底供哪个程序(进程)使用。(比如,你一边浏览网页,一边与朋友在线聊天。当一个数据包从互联网上发来的时候,你怎么知道,它是表示网页的内容,还是表示在线聊天的内容?)这个参数就叫做”端口(port),它其实是每一个使用网卡的程序的编号。每个数据包都发到主机的特定端口,所以不同的程序就能取到自己所需要的数据。

           端口:是0到65535之间的一个整数,正好16个二进制位。0到1023的端口被系统占用,用户只能选用大于1023的端口。不管是浏览网页还是在线聊天,应用程序会随机选用一个端口,然后与服务器的相应端口联系。

           “传输层”的功能,就是建立”端口到端口”的通信。相比之下,”网络层”的功能是建立”主机到主机”的通信。只要确定主机和端口,我们就能实现程序之间的交流。因此,Unix系统就把主机+端口,叫做”套接字”(socket)。有了它,就可以进行网络应用程序开发了。

           UDP协议:现在,我们必须在数据包中加入端口信息,这就需要新的协议。最简单的实现叫做UDP协议,它的格式几乎就是在数据前面,加上端口号。UDP协议的优点是比较简单,容易实现,但是缺点是可靠性较差,一旦数据包发出,无法知道对方是否收到。

         (不可靠)UDP数据包:由【”标头”(主要定义了发出端口和接收端口)】和【”数据”(具体的内容)】两部分组成。把整个UDP数据包放入IP数据包的”数据”部分。UDP数据包非常简单,”标头”部分一共只有8个字节,总长度不超过65,535字节,正好放进一个IP数据包。

         (可靠)TCP协议:为改进UDP,TCP协议就诞生了。这个协议非常复杂,但可以近似认为,它就是有确认机制的UDP协议,每发出一个数据包都要求确认。如果有一个数据包遗失,就收不到确认,发出方就知道有必要重发这个数据包了。因此,TCP协议能够确保数据不会遗失。它的缺点是过程复杂、实现困难、消耗较多的资源。

            TCP数据包和UDP数据包一样,都是内嵌在IP数据包的”数据”部分。TCP数据包没有长度限制,理论上可以无限长,但是为了保证网络的效率,通常TCP数据包的长度不会超过IP数据包的长度,以确保单个TCP数据包不必再分割。

    应用层——作用是规定应用程序的数据格式(解读各个程序信息,所以会事先规定)。(举例来说,TCP协议可以为各种各样的程序传递数据,比如Email、WWW、FTP等等。那么,必须有不同协议规定电子邮件、网页、FTP数据的格式,这些应用程序协议就构成了”应用层”。)

            这是最高的一层,直接面对用户。它的数据就放在TCP数据包的”数据”部分。因此,现在的以太网的数据包就变成下面这样。

           发送这个包,需要知道两个地址:对方的MAC地址和IP地址

           有了这两个地址,数据包才能准确送到接收者手中。但是,前面说过,MAC地址有局限性,如果两台电脑不在同一个子网络,就无法知道对方的MAC地址,必须通过网关(gateway)转发。

           上图中,1号电脑要向4号电脑发送一个数据包。它先判断4号电脑是否在同一个子网络,结果发现不是(后文介绍判断方法),于是就把这个数据包发到网关A。网关A通过路由协议,发现4号电脑位于子网络B,又把数据包发给网关B,网关B再转发到4号电脑。

           1号电脑把数据包发到网关A,必须知道网关A的MAC地址。所以,数据包的目标地址,实际上分成两种情况:

           发送数据包之前,电脑必须判断对方是否在同一个子网络,然后选择相应的MAC地址。

           这时候我们就需要拥有上网功能,需要记住的就是一点:不管是”静态IP地址”还是”动态IP地址”,电脑上网的首要步骤,是确定四个参数。

           *本机的IP地址

           *子网掩码

           *网关的IP地址

           *DNS的IP地址

    https://blog.csdn.net/qq_20363225/article/details/79698084


     

    Linux的目录结构

    1、Windows下的目录结构(windows分区)

    Linux分区

    读取boot分区方式cd/boot


     

    2、Linux(Ubuntu)的目录结构

                  树状结构;一切文件从根开始;

                  关于磁盘分区与挂在的命令(/etc/fstab--开机自动挂载)

                                 df-h     查看磁盘挂载情况

                                【dd if=/dev/zero of=/root/image bs=1024k count=100 //创建环回设备(虚拟磁盘)】

                                 fdisk 【磁盘文件】 --做磁盘分区;

                                             sd--scsi类型的磁盘(hd IDE)

                                             a--第一块磁盘(b,c。。。)

                                             1--第一个分区(2,3,4...)

                                 mkfs--格式化(创建文件系统)

                                mount--磁盘挂载

                                umount--将磁盘卸载下来

    Linux的磁盘管理

                  fdisk--分区(就是划分逻辑边界)写入文件系统;

                  mkfs-t//指定文件系统格式;

                  mount要挂载的设备 挂载点【存储设备在Linux系统上必须挂载)

                  umount 要挂载的设备/挂载点

    3、Linux的主要目录

                   /

                                /bin--存放命令文件

                                /boot--存放系统启动文件(内核、grub程序)

                                /cdrom--光盘目录

                                /dev--存放设备文件 (c字符设备、d块设备)

                                /etc--大部分的系统配置文件

                                /home--普通用户的家目录

                                /lib  /lib64--库文件(.so结尾的文件)

                                /lost+found--非正常关机下的碎片文件(空磁盘挂载上来,默认就会 有这个目录)

                                /mnt /media--专门提供挂载的挂载点

                                /opt--第三方软件的安装目录

                                /proc /sys--进程、系统目录(默认是空的,只有启动后才会存放对应进程和系统文件)

                                /root--root用户的家目录

                                /sbin--存放命令的目录

                                /tmp--临时文件存放目录 

                                /usr--常见软件安装目录

                                /var--文件会随时更改的目录


    目录的常见命令

    1、查看目录内容

                     终端使用技巧;

                                       自动补全

                     ls  查看文件内容;

    2、搜索使用过的命令

                     Ls

                     文件通配符:

                                        * -- 任意长度的任意字符

                                        ?-- 任意一个字符

                                        [] -- 取值范围(只取范围中的一个字符)

                                                     sd[abc] -- sda  sdb   sdc

                                                     [a-f] -- sd[a-f]   sda   sdb...sdf

                                        ^ -- 托字符,指定以某个字符开头

                                        $ -- 以什么字符结尾

                      grep命令  -- 行过滤

                                        grep[选项][匹配的字符][对象]

                                        查看文件中的匹配,过滤某一行:

                                        -v  反选

                                        -i  忽略大小写

                                        ^$  空白行

    正则表达式 1、字符串匹配。[] [^] [:digit] [:alpha:]...2、次数匹配 * ? {m} {m,n} {0,n} {m,} 3、位置锚定 ^ $  <  /> 4、分组(ab)*  abababab        ab*   abbbbb

    2、切换目录

                      CD

                      常见特殊目录:

                                    .

                                    ..

                                    ~  

                                    -

                      绝对路径

                                   从根开始,写全

                      相对的路径

                                   相对当前路径而言,你所要处理的目录;     

  • 相关阅读:
    bzoj3033
    noip2016 Day1T3
    编译php的问题
    JavaScript <script>标签的位置、延迟脚本(defer属性)与 异步脚本(async属性)
    连接远程数据库时出现 SSH: expected key exchange group packet from server / 2003
    laravel中使用的PDF扩展包——laravel-dompdf和laravel-snappy
    laravel 生成 key
    windows下apache配置虚拟主机
    composer设置忽略版本匹配
    laravel 服务容器实例——深入理解IoC模式
  • 原文地址:https://www.cnblogs.com/hisashi-mitsui/p/11288191.html
Copyright © 2011-2022 走看看