【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、位置锚定 ^ $ \b <\ \b /> 4、分组\(ab\)* abababab ab* abbbbb
2、切换目录
CD
常见特殊目录:
.
..
~
-
绝对路径
从根开始,写全
相对的路径
相对当前路径而言,你所要处理的目录;