一、计算机网络
1. 计算机通信
计算机通信是面向计算机和数据终端的一种现代通信方式,从计算机应用的广泛与深入角度出发可以实现计算机与计算机、人与计算机之间数据信息的生成、存储、处理、传递和交换。要求处于不同地理位置的计算机系统之间能够交换信息。共享资源,协同工作,更好的完成给定的任务。
2.网络协议
网络协议是为计算机网络中进行数据交换而建立的规则、标准或者说是约定的集合。因为不同用户的数据终端可能采取的字符集不同,两者需要进行通信,必须要在一定的标准上进行。其中TCP/IP标准网络协议比较流行。
TCP/IP协议已经成为Internet中“通用语言”,下图为不同计算机群之间利用TCP/IP进行通信的示意图。
3.网络层次划分
为了是不同计算机厂家生产的计算机能够相互通信,以便在更大范围内建立计算机网路,国际标准化组织(ISO)在1978年提出了“开放系统互联参考模型”,即著名的OSI/RM模型。
它将计算机网络体系结构的通信协议划分为7层,自下而上依次为:物理层,数据链路层,网络层,传输层,会话层,表示层,应用层。其中第四层完成数据传送服务,上面三层是面向用户。
网络体系结构分层
应用层:应用层的任务是通过应用进程间的交互来完成特定网络应用。
对于不同的网络应用需要不同的应用层协议。如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等。
传输层:主要的任务是负责向两台主机进程之间的通信提供通用的数据传输服务。是根据通信子网的特性,最佳的利用网络资源,为两个端系统的会话层之间,提供建立、维护和取消传输连接功能,负责端到端的可靠数据传输。在这一层,信息传送的协议数据单元称为段或报文。网络层只是根据网络地址将源结点发出的数据包传送到目的结点,而传输层则负责将数据可靠的传送到相应的端口。
传输层主要使用如下两种协议:
传输控制协议TCP:提供面向连接的,可靠的数据传输服务。
用户数据协议UDP:提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)
TCP协议:
1). TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
2). 每一条 TCP 连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
3). TCP 提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
4). TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。
5). TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
6). 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
UDP协议:
1). UDP 是无连接的;
2).UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
3).UDP 是面向报文的;
4).UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);
5).UDP 支持一对一、一对多、多对一和多对多的交互通信;
6).UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。
二、Linux网络管理命令
1. ifconfig命令
ifconfig用于配置网卡ip地址信息等网络参数或显示网络接口状态,类似于windows的ipconfig命令。可以用这个工具来临时性的配置网卡的ip地址、掩码、广播地址、网关等。
注:只能用root使用此命令,且系统如果没有此命令,需要单独安装。
安装此命令:yum install net-tools
语 法:
ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络设备类型><硬件地址>][io_addr<I/O地址>][irq<IRQ地址>][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadcast<地址>][-pointopoint<地址>][IP地址]
add<地址> 设置网络设备IPv6的IP地址。
del<地址> 删除网络设备IPv6的IP地址。
down 关闭指定的网络设备。
<hw<网络设备类型><硬件地址> 设置网络设备的类型与硬件地址。
io_addr<I/O地址> 设置网络设备的I/O地址
irq<IRQ地址> 设置网络设备的IRQ。
media<网络媒介类型> 设置网络设备的媒介类型。
mem_start<内存地址> 设置网络设备在主内存所占用的起始地址。
metric<数目> 指定在计算数据包的转送次数时,所要加上的数目。
mtu<字节> 设置网络设备的MTU。
netmask<子网掩码> 设置网络设备的子网掩码。
tunnel<地址> 建立IPv4与IPv6之间的隧道通信地址。
up 启动指定的网络设备。
-broadcast<地址> 将要送往指定地址的数据包当成广播数据包来处理。
-pointopoint<地址> 与指定地址的网络设备建立直接连线,此模式具有保密功能。
-promisc 关闭或启动指定网络设备的promiscuous模式。
[IP地址] 指定网络设备的IP地址。
[网络设备] 指定网络设备的名称。
2. ifconfig实践:
MAC地址,为局域网地址,以太网地址或者物理地址,是一个用来确认网上设备位置的地址。在OSI模型中,第三层网上层负责IP地址,第二层数据链路层则负责MAC地址。
启动/关闭指定网卡:ifconfig 网卡名 up/down
修改、设置网卡ip:ifconfig 网卡名 ip地址
为网卡设置别名、添加多个ip地址:ifconfig 网卡别名 ip地址 子网掩码 up
修改MAC地址:ifconfig 网卡名 hw ether MAC地址
上述命令修改的网卡信息都是临时生效,机器重启后,网卡信息会还原,要永久修改网卡信息,需在网卡配置文件中修改。网卡配置文件路径:ll /etc/sysconfig/network-scripts |grep ifcfg
3. ifup命令
ifup eth0 用于激活指定的网络接口,ifup其实是读取配置文件/etc/sysconfig/network-scripts/ifcfg-eth0
ifdown eth0 关闭指定的网络接口
4. route命令
route程序对内核的IP选路由表进行操作。它主要用于通过已用ifconfig(8)程序配置好的接口来指定的主机或网络设置静态路由。
路由:计算机之间的数据传输必须经过网络,网络可以直接连接两台计算机,或者通过一个一个的节点构成。路由器可以理解为互联网的中转站,网络中的数据包就是通过一个一个路由器转发到达目的地的。
从源主机到目的主机的转发过程
路由的分类:静态路由和动态路由
Linux配置的都是静态路由,是系统管理员使用route命令,也就是通过手动输入的方式添加路由规则。
动态路由是无需人为干预,是本机与不同机器之间经过路由的顺序,相互交换路由规则而来。
route命令参数
-v:选用细节操作模式
-A family:用指定的地址族(如`inet‘,`inet6‘)。
-n:以数字形式代替解释主机名形式来显示地址。此项对试图检测对域名服务器进行路由发生故障的原因非常有用。
-e:用netstat(8)的格式来显示选路表。-ee将产生包括选路表所有参数在内的大量信息。
-net:路由目标为网络。
-host:路由目标为主机。
-F:显示内核的FIB选路表。其格式可以用-e 和 -ee选项改变。
-C:显示内核的路由缓存。
del:删除一条路由。
add:添加一条路由。
target:指定目标网络或主机。可以用点分十进制形式的IP地址或主机/网络名。
netmask Nm:为添加的路由指定网络掩码。
5. route示例
route将IP地址进行DNS解析成主机
route添加-n参数,不解析DNS
其中:
Destination:表示网络好,network的意思
Gateway:网关地址,网络是通过该ip地址连接出去的,如果显示0.0.0.0代表该路由是直接本机传送出去的,如果有Ip表示本条路由必须经过该ip地址才能连接出去
Genmask:子网掩码地址,也就是netmask,IP+NETMASK组成一个完整的网络
Flags:路由标记信息,标记当前网络节点状态。
U Up表示此路由当前为启动状态 。
H Host表示此网关为一主机
G Gateway表示此网关为一路由器
R Reinstate Route使用动态路由重新初始化的路由
D Dynamically此路由是动态性地写入
M Modified 此路由是由路由守护进程或导向器动态修改
!表示此路由当前为关闭状态,用于禁止不安全的网络
Metric:需要经过几个网络节点才能到达路由的目标地址。
Ref:参考到此路由规则的数据
Iface:路由对应的网络设备接口
192.168.146.0 0.0.0.0 255.255.255.0 U 100 0 0 eth0
表示主机所在的网段是192.168.146.0。若数据传送目标在同一网段,可以直接通过eth0转发数据包
0.0.0.0 192.168.146.2 0.0.0.0 UG 100 0 0 eth0
是系统默认网关,表示去任何地方的请求,都转发给192.168.146.2网关去处理。
添加和删除默认网关
默认网关就是数据包不匹配任何设定的路由规则最后流经的地址关口
6.arp命令
arp是地址解析协议(ARP、Address Resolution Protocol),主要功能是根据IP地址获取物理地址(MAC地址)
[描述]
用来管理系统的arp缓存,常用的命令包括:
arp: 显示所有的表项。
arp -d address: 删除一个arp表项。
arp -s address hw_addr: 设置一个arp表项。
常用参数:
-a 使用bsd形式输出。(没有固定的列)
-n 使用数字形式显示ip地址,而不是默认的主机名形式。
-D 是指定一个网络接口的名称,表项将使用相应接口的MAC地址。一般用来设置ARP代理。
-H type, --hw-type type: 指定检查特定类型的表项,默认type为ether,还有其他类型。
-i If, --device If: 指定设置哪个网络接口上面的arp表项。
-f filename: 作用同‘-s‘,不过它通过文件来指定IP地址和MAC地址的绑定。文件中每行分别是主机和MAC,中间以空格分割。
显示arp缓存区的所有表项
Address:主机地址或是主机名
Hwtype:硬件类型
HWaddress:硬件地址
Flags Mask:记录标志(C表示arp缓存中的条目,M表示静态arp条目)
Iface:网络接口
7. ip命令
ip是iproute软件包里面的一个强大的网络配置工具,用于显示或管理Linux系统的路由、网络设备、策略路由等。
ip命令的用法如下:
ip [OPTIONS] OBJECT [COMMAND [ARGUMENTS]]
目前,ip支持如下选项:
-V,-Version 打印ip的版本并退出。
-s,-stats,-statistics 输出更为详尽的信息。如果这个选项出现两次或者多次,输出的信息将更为详尽。
-f,-family 这个选项后面接协议种类,包括:inet、inet6或者link,强调使用的协议种类。如果没有足够的信息告诉ip使用的协议种类,ip就会使用默认值inet或者any。link比较特殊,它表示不涉及任何网络协议。
-4 是-family inet的简写。-6 是-family inet6的简写。-0 是-family link的简写。
-o,-oneline 对每行记录都使用单行输出,回行用字符代替。如果你需要使用wc、grep等工具处理ip的输出,会用到这个选项。
-r,-resolve 查询域名解析系统,用获得的主机名代替主机IP地址
OBJECT是要管理或者获取信息的对象。目前ip认识的对象包括:
link 网络设备
address 一个设备的协议(IP或者IPV6)地址
neighbour ARP或者NDISC缓冲区条目
route 路由表条目
rule 路由策略数据库中的规则
maddress 多播地址
mroute 多播路由缓冲区条目
tunnel IP上的通道
COMMAND设置针对指定对象执行的操作,它和对象的类型有关。一般情况下,ip支持对象的增加(add)、删除(delete)和展示(show或者list)
ARGUMENTS是命令的一些参数,它们倚赖于对象和命令。ip支持两种类型的参数:flag和parameter。flag由一个关键词组成;parameter由一个关键词加一个数值组成。为了方便,每个命令都有一个可以忽略的默认参数。例如,参数dev是ip link命令的默认参数,因此ip link ls eth0等于ip link ls dev eth0
link支持:set、show
address支持:add、del、flush、show
8. ip命令使用示例
显示eth0网卡信息: ip link show dev eth0
关闭/激活网络设备:ip link set eth0 down/up
修改MAC地址:ip link set eth0 address 0:0c:29:13:10:11
查看网卡信息:ip address show/ ip a
添加/删除ip地址:ip a add 192.168.146.132/24 dev eth0
ip link set eth0 up
ip a del 192.168.146.132/24 dev eth0
ip 命令添加别名:ip a add 192.168.146.132/24 dev eth0 label eth0:1
ifconfig查看
ip检查路由表:ip route
ip检查arp缓存(显示网络邻居信息):ip neighbour
9. netstat命令
显示网络连接,路由表,接口状态,伪装连接,网络链路信息和组播成员
输出活动的Internet网络连接(TCP,UDP,raw)
其中:
Proto:套接字使用的协议。
Recv-Q:连接此套接字的用户程序未拷贝的字节数。
Send-Q:远程主机未确认的字节数。
Local Address:套接字的本地地址(本地主机名)和端口号。除非给定-n --numeric ( -n ) 选项,否则套接字地址按标准主机名(FQDN)进行解析,而端口号则转换到相应的服务名。
Foreign Address:套接字的远程地址(远程主机名)和端口号。 Analogous to "Local Address."
State:套接字的状态。因为在RAW协议中没有状态,而且UDP也不用状态信息,所以此行留空。通常它为以下几个值之一:
ESTABLISHED:套接字有一个有效连接。
SYN_SENT:套接字尝试建立一个连接。
SYN_RECV:从网络上收到一个连接请求。
FIN_WAIT1:套接字已关闭,连接正在断开。
FIN_WAIT2:连接已关闭,套接字等待远程方中止。
TIME_WAIT:在关闭之后,套接字等待处理仍然在网络中的分组
CLOSED:套接字未用。
CLOSE_WAIT:远程方已关闭,等待套接字关闭。
LAST_ACK:远程方中止,套接字已关闭。等待确认。
LISTEN:套接字监听进来的连接。如果不设置 --listening (-l) 或者 --all (-a) 选项,将不显示出来这些连接。
CLOSING:套接字都已关闭,而还未把所有数据发出。
UNKNOWN:套接字状态未知。
State:包含以下几个关键字
FREE:套接字未分配。
LISTENING:套接字正在监听一个连接请求。除非设置 --listening (-l) 或者 --all (-a) 选项,否则不显示。
CONNECTING:套接字正要建立连接。
CONNECTED:套接字已连接。
DISCONNECTING:套接字已断开。
(empty):套接字未连。
常用组合参数:
netstat -tunlp
参数解释:
-l:显示所有Listen监听中的网络连接
-n:显示IP地址,不进行DNS解析成主机、域名
-t:显示所有tcp连接
-u:显示所有udp连接
-p :显示进程号与进程名
显示当前系统的路由表:netstat -rn/route -n
显示网络接口情况:netstat -i
iface:网络设备的接口名
MTU:最大传输单元,单位字节
RX-OK/TX-OK:正确接收,发送了多少数据包
RX-ERR/TX-ERR:接收、发送数据包时丢弃了多少数据包
RX-OVR/TX-OVR:由于错误遗失了多少数据包
Flg:接口标记(L是会换地址;B设置了广播地址;M接收所有数据包;R接口正在进行;U接口正处于活动状态;O表示该接口禁止arp;P表示一个点到点的连接)
正常丢包、错误包的数值如果不为0,说明网络存在问题,性能下降。
检测sshd是否监听:netstat -tunlp |grep sshd
10. ss命令
ss命令,它是在centos7之后目的在于替代netstat的工具,用来检查网络状态信息,包括TCP、UDP、连接、端口等。优点在于能够显示更多详细的网络状态信息。
如果没有ss命令,则需要安装:yum install iproute
ss命令参数
-a 显示所有网络连接
-l 显示LISTEN状态的连接(连接打开)
-m 显示内存信息(用于tcp_diag)
-o 显示Tcp 定时器x
-p 显示进程信息
-s 连接统计
-n 显示ip地址,不进行dns解析
-d 只显示 DCCP信息 (等同于 -A dccp)
-u 只显示udp信息 (等同于 -A udp)
-w 只显示 RAW信息 (等同于 -A raw)
-t 只显示tcp信息 (等同于 -A tcp)
-x 只显示Unix通讯信息 (等同于 -A unix)
-4 只显示 IPV4信息
-6 只显示 IPV6信息
--help 显示帮助信息
--version 显示版本信息
显示正在监听的TCP和UDP连接:ss -tunlp |column -t
显示socket统计,可用于统计服务器链接数的宏观数据统计:ss -s
11. ping命令
此命令用于检测主机之间网络的连通性,执行ping命令使用ICMP传输协议,发出要求回应信息。
参数:
-c:count 在发送(和接收)了正好数量为 count 的回显应答分组后停止操作。在发送了 count 个分组后没有收到任何分组的特别情况是发送导致了终止(选程主机或网关不可达)。
-d:在所用的套接字上使用SO_DEBUG 选项。
-i:wait 在发送每个分组时等待 wait 个秒数。缺省值为每个分组等待一秒。此选项与-f选项不能同时使用。
-l:preload 如果指定 preload ,那么 ping 程序在开始正常运行模式前尽可能快地发送分组。同样只有超级用户可以用这个选项。
-n:只以数字形式输出信息。这样就不尝试去查找主机名了。
-p:pattern 可以指定最多16个填充字节用于保持分组长度为16的整数倍。在网络上诊断与数据相关问题时此选项很有用。例如``-p ff将使发出的分组都用全1填充数据区。
-q:静态输出。在程序启动和结束时只显示摘要行。
-R:记录路由。在回显请求分组中包含记录路由选项并在相应的分组返回时显示路由缓冲区。注意IP首部的容量只能存放9条这样的路由。很多主机忽略或禁用此选项。
-r:在所连接的网络上旁路正常的选路表,直接向主机发送分组。如果主机未处于直接相连的网络上,那么返回一个错误。此选项可用来通过无路由接口对一台主机进行检测(例如当接口已被routed 程序丢弃后)。
-s:packetsize 指定要发送数据的字节量。缺省值为 56 ,这正好在添加了 8 字节的 ICMP 首部后组装成 64 字节的 ICMP 数据报。详细模式输出。打印接收到的回显应答以外的ICMP分组
-t:设置存活数值TTL的大小-v
-w:waitsecs 在 waitsecs 秒后停止 ping 程序的执行。当试图检测不可达主机时此选项很有用。
测试到目标及其网络的连通性:ping 域名/ip
ping命令跟着域名或者ip地址,会一直刷新ping的结果
从上图可以看出ping发送了56个字节的数据,从目标及其收到的数据是64字节,icmp_seq是收到的序列包,ttl是数据包的生存期,time是延迟。直到ctrl +C 终止ping
ping命令的输出信息中含有TTL值,Time To Life(生存期),指的是ICMP报文在网络中的存活时间。不同的操作系统发出的ICMP报文生存期不同,有32、64、128、255等。
ping命令组合:ping -c 3 -i 3 -s 1024 -t 255 www.baidu.com
参数解释:
-c 3 :发送3次ICMP包
-i 3:每隔3秒发包
-s 1024:发送1024字节的数据包
-t 255:设置数据包存活值255
12. telnet命令
telnet命令以前用于登录远程主机然后进行管理,但是telnet采用明文传输报文,安全性很低,因此几乎已经弃用telnet,采用更安全的ssh服务。大多数网络设备,还是使用telnet登录,且telnet主要用于判断服务器是否打开了远程端口。
telnet命令使用的安装包:yum install telnet
检测ssh端口是否开放:telnet 192.168.146.130 22
13. ssh命令
ssh命令是openssh套件中的客户端连接工具,可以使用ssh加密协议远程登录服务器,实现对服务器的远程管理,在windows中使用xshell、SecureCRT等远程工具,Linux或MacOS使用ssh命令连接。
参数
-p port:指定远程主机的端口. 可以在配置文件中对每个主机单独设定这个参数.
-t:强制分配伪终端. 可以在远程机器上执行任何全屏幕(screen-based)程序, 所以非常有用, 例如菜单服务。即使没有本地终端,多个-t选项也会强制分配终端
-v:调试模式,打印关于运行情况的调试信息. 在调试连接, 认证和配置问题时非常有用。
远程登录服务器:ssh 用户名@主机ip
指定端口,用户登录服务器:ssh 用户名@主机ip -p 端口号
远程执行服务器的命令,如:ssh root@192.168.146.130 "free -m"
14. wget命令
wget命令用来从指定的URL下载文件。
wget特点:1)支持断点下载;2)支持FTP和HTTP下载;3)支持代理服务器
下载单个文件:
下载文件,指定文件名保存到本地:
15. nslookup命令
此命令用于查找域名服务器的程序,nslookup有两种模式:交互和非交互
此命令需要安装:yum install bind-utils
16. nmap命令
nmap是一款开放源码的网络探测工具,全称Network Mapper。目的在于快速扫描大型网络,nmap可以发现网络上有哪些主机,主机提供了什么服务,并且探测操作系统类型等信息。
需要安装此命令:yum install nmap
查看主机开放的端口,默认扫描1~1000的端口:nmap 127.0.0.1
扫描指定端口范围:nmap -p 1024-65535 127.0.0.1
扫描局域网内的ip,端口开放情况:nmap 192.168.146.130/24
探测目标主机的服务和操作系统版本(对于网络安全性较高的机器,最好屏蔽服务版本信息,防止黑客利用版本漏洞攻击):nmap -O -sV 127.0.0.1(其中-O显示系统版本,-sV探测服务版本信息)