6 计算机网络-线程和进程
6.1 TCP/IP协议
TCP/IP是Unix/Linux世界的网络基础,在某种意义上,Unix网络就是Tcp/ip,而且Tcp/ip就是网络互连的标准他不是一个独立的协议,而是一组协议(tcp,ip,udp,arp,rarp等协议)
tcp:传输协议
ip:以太网协议
udp:用户数据包协议
arp:地址解析协议
rarp:反地址解析协议
6.2 osi(开放式通信系统互联参考模型)
Tcp/ip协议是一个分层的协议分为:
1) 应用层application:为用户的应用程序提供网络通信服务;
负责用户信息的语义表示,即:做什么?
2) 表示层presention:处理被传送数据的表示问题,即信息的语法和语义
解决用户信息的语法表示,即:任务怎么描述?
3) 会话层session:建立、管理和中止不同机器上的应用程序之间的会话(完成一项任务而进行的一些列相关的信息交换)
会话的管理与数据的同步,即:从何时、何处开始?
4) 传输层transport:为源端主机到目的端主机提供可靠的、满足服务质量要求的数据传输服务(资源子网的端到端)
建立一条传输的连接,即:对方在何处?
5) 网络层ip:在源结点和目的结点间提供端到端的数据传输(通信子网的端到端)
选择合适的路由,即:走哪条路可到达该处?
6) 数据链路层link:在物理线路上提供可靠的数据传输,使之对网络层呈现为一条无错的、点到点链路
在链路上无差错地传送帧,即:每一步应该怎么走?
7)物理层physical:在物理介质上透明的传送原始比特流
将比特送到物理链路中传送,即:怎么利用物理链路?
6.3 现实中的TCP/IP模型
应用层:application smtp ,ftp,telnet 表示是哪个应用程序发送过来的
传输层:transport 解释数据
网络层:(ip层)定位ip地址确定连接路径 表示把东西发送到那个地址去,到这个层次的东西就叫做数据包。
链路层:(link)与硬件驱动对话,网卡会把数据传送到各个路由器去,路由器最终会找到另一路由器所在的网卡(因为数据包里面有目的地计算机的ip)
说明:ip地址与包的路由传递:每个Internet上的主机和路由器都有一个ip地址,它包括网络号和主机号,所有ip地址都是32位的,ip地址按照国际标准的划分为a,b,c,d,e五种类型
6.4 网络信息相关命令:
1)tracert www.baidu.com或者是目标ip
查看两台电脑之间传送数据经过多少网管(也就是路由器)
2)ping 目标ip/网址
测试两台电脑是否畅通或是两部主机间的介质是否为断、网线是否脱落或网卡故障及响应时间。如果要在Windows中 ping通虚拟机中的Linux,要把这两个的网卡设在同一段网卡号中。
3)ifconfig 在Linux下查看ip情况
ipconfig 在Windows下查看ip情况
4)netstat -an
显示网络统计信息的命令netstat:此命令用来显示整个系统目前的网络情况,例如日前的连接、数据包传递数据、或是路由表内容,此命令直接输入即可使用
5)
netstat -anp | more (可以显示出来进程的pid号,已经进程的ip号、端口号、)
netstat -an |more (可以显示出来进程有哪些,以及进程的ip号,端口号,但是无法显示进程的pid号)
6.5 Linux网络环境配置
第一种方法:
(1)用root身份登录,运行setup
(2)这时网卡的配置没有生效,运行/etc/rc.d/init.d/network restart命令,刚才的设置才会生效。
第二种方法:
(1)ifconfig etho x.x.x.x对网卡进行设置 会立即生效,但是当关机重启以后ip又会变成设置之前的。
(2)ifconfig etho network x.x.x.x对子网掩码设置,对广播地址和dns使用默认的。
注意:这样配置网络将会立即生效。但是是临时生效。
(3)第三种方法:
步骤1:修改/etc/sysconfig/network-scripts/ifcfg-etho这个文件里各个属性可以修改,包括ip,子网掩码,广播地址,默认网关。
步骤2:这是网卡的配置没有生效,运行/etc/rc.d/init.d/network restart命令我们刚才作的设置才生效。
这种方法是最底层的修改方法。
6.6 RPM管理
6.6.1 什么是RPM
是一种用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中,它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,这一文件格式名称虽然打上了RedHat的标志,但是其原始设计理念是开放的,现在包括OpenLinux、S.u.S.E以及Turbo Linux等Linux的分发版本都有采用,可以算是工人的行业标准了。RPM类似于Windows中的setup安装程序。 rpm命令是RPM软件包的管理工具
说明:RPM包的名称格式示例:
apache-1.3.23-11.i386.rpm
"apache" 软件名称
"1.3.23-11" 软件的版本号,主版本和次版本
"i386" 是软件所运行的硬件平台
"rpm" 文件扩展名,带包RPM包
6.6.2 RPM管理常用的命令:
语法:rpm 选项 文件名
-a:查询所有套件
-l:显示套件的文件列表
-q:使用询问模式,当遇到任何问题时,rpm指令会先询问用户
-i:显示套件的相关信息
-f<文件>+:查询拥有指定文件的套件
(1)rpm –qa 查询所安装的所有rpm软件包
rpm -qa | more 分页列出所有安装过的包
rpm -qa | grep sql 查找所有安装过的包含某个字符串sql的软件包
(2)rpm -q 软件包名 查询软件包是否安装
rpm -q jdk 查询jdk软件包的文件全名
显示为jdk-1.6.0_45-fcs
(3)rpm -ql 软件包名 查询软件包中的文件
rpm -ql 包名
注意:这里的是不包括.rpm后缀的软件包的名称,也就是说只能用jdk或者jdk-1.6.0_45-fcs
而不是jdk-1.6.0_45-fcs.rpm。如果只是想知道可执行程序放到那里去了,也可以用which,比如:which jdk
(4) rpm -qi 软件包名 查询软件包版本信息
rpm -qi jdk (一个已经安装过的软件包的版本信息)
(5) rpm -qf 文件全路径名 查询文件所属的软件包
rpm -qf /etc/passwd
rpm -qf /root/install.log
(6) rpm -qp 包文件名 查询包的信息对这个软件包的介绍
(7) rpm -qf ‘which 程序名’ #返回软件包的全名
(8) rpm -qif ‘which 程序名’ #返回软件包的有关信息
(9) rpm -qlf ‘which 程序名’ #返回软件包的文件列表
(10) 安装RPM包
rpm -i RPM包全路径名称: 安装包到当前系统
rpm -ivh RPM包全路径名称: 安装包到当前系统有提示信息
i install 安装
v verbose 提示
h hash 进度条
(11) 删除rpm包
rpm -e RPM包的名称
rpm -e jdk
rpm -e --nodeps jdk 强制删除jdk
(12) /etc/passwd中的用户都加到smbpasswd 中
cat /etc/passwd | mksmbpasswd.sh > /etc/samba/sabpasswd
(13) 查看Linux的所有用户的信息
cat /etc/passwd
(14) samba的所有用户
/etc/samba/sabpasswd
6.6.3 sshd服务
Linux中有一个服务sshd服务,是系统自带的,并且是默认启动的。他允许其他用户远程登录到该Linux系统。在此基础的基础上研发出了ssh 客户端,允许用户把在Windows下开发的程序等资料传到Linux系统上面。Linux系统是多用户操作系统,各个用户之间不相互影响。一个用户可以同时启动多个程序,这个叫做多任务操作。
6.7 线程与进程
在Linux中,每个执行的程序都称为一个进程,每个进程都会被分配一个ID号。每个进程都会对应一个父进程,而这个父进程可以复制多个子进程。每个进程都可能以两种方式存在的,前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但是屏幕上无法看到的进程,通常使用后台方式执行。一般系统的服务都是以后台进程的方式存在的,而且都会常驻在系统中,知道关机才结束。Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径。线程进程都会有自己的ID,这个ID就叫做PID,PID是不特指进程ID,线程ID也可以叫做PID。
僵尸进程:有个进程终止了,异常的终止了,但是由于某种原因没有通知他的父进程,那么这个进程所占用的CPU和内存就不会被系统回收,这种进程就是僵尸进程。
idle 表示闲置的状态
swap 分区 相当于Windows中的虚拟内存(虚拟内存一般是物理内存的2倍)
6.7.1 进程与线程区别
进程:进程就是正在执行的程序;进程有独立的地址空间,线程没有。
线程:线程是轻量级的进程;线程不能独立存在,它是由进程创建的。(fork)Thread 相对讲线程耗费的CPU和内存小于进程。
操作系统是这样控制你的线程和进程的,当你一个进程启动的时候,操作系统就会从内存里面给你分配一块空间,供你这个进程使用。
6.7.2 相关命令
1)ps -a 意思是说显示当前终端的所有进程信息
2)ps -u 以用户的格式显示进程信息
3)ps -x 显示后台进程运行的参数
示例:
ps –aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 10372 688 ? Ss 2016 0:57 init [5]
PID 进程识别号
%CPU 当前的进程对于CPU的占用率
%MEM 当前的进程对于内存的占用率
VSZ 表示进程分配的虚拟内存(K)
RSS 虚拟内存
TTY 终端机号
START 状态,表示是什么时候启动的。
Time 耗费CPU多少时间
COMMOND(CMD) 表示是哪个命令,也就是进程的命令5号进程
usz 物理内存
4)杀死进程命令1
kill 进程号 (但是不能终止所有的进程,因为有的进程是至关重要的,该方法终止进程的强度不够)
kill -9 进程号(因为有些进程会捕捉某些信号,如果直接不能结束进程可以用-9传送信息)
5)杀死进程命令2
killall 进程号 可以把这个进程以及这个进程的所开的子进程通通杀掉
6)top与ps命令很相似,他们都是用来显示正在执行的进程:top与ps最大的不同之处,在于top在执行一段时间可以更新正在运行的进程。
6.1)top 回车 查看执行的进程,按住q即可退出
6.2)top -u 用户名 查看该用户正执行的进程
6.3)top –k 进程id 结束进程
6.4)top -d 10 指定系统更新进程的时间为10秒
7)traceroute IP地址或主机名 显示数据包经过历程命令
即用来检测数据包在网络上传输的过程,从本机到远程的主机完整路径,帮助网络管理员解决问题
8)route 用来显示并设置Linux内核中的网络路由表,route命令设置的路由主要是静态路由。要实现两个不同的子网之间的通信,需要一台连接两个网络的路由器,或者同时位于两个网络的网关来实现。
所谓路由是指将数据由来源网络送往目的地网络的操作,在大型网络中,路由是非常复杂的,因为数据包在抵达目的地时,可能经过的节点有很多路由表示的是存储在路由器或一些其他链接设置上的窗体,其中记录着到指定目的地的网络路径,以及这些路径的相关数值。