什么是网络?
网络就是一群通过一定形式连接起来的计算机。一个网络可以由两台计算机组成,也可以拥有在同一大楼里面的上千台计算机和使用者。
网络协议和管理:
:虚拟的专有网络
感觉像一条专线,但是虚拟的
网络:网络识别通过有形或无形的媒介连接通信
网络应用程序:
Web 浏览器
即时消息:QQ,微信,钉钉
电子邮件
协作:VNC 网络会议
web网络服务:apache,nginx,IIS
文件网络服务:ftp,nfs,samba
数据库服务:MySQL, MariaDB, MongoDB
中间件服务:Tomcat,JBoss
安全服务:Netfilter
用户应用程序对网络的影响
批处理应用程序
FTP、TFTP、库存更新
无需直接人工交互
带宽很重要,但并非关键性因素
交互式应用程序
库存查询、数据库更新
人机交互
因为用户需等待响应,所以响应时间很重要,
但并非关键性因素,除非要等待很长时间
实时应用程序
VoIP、视频
人与人的交互
端到端的延时至关重要
网络的特征:
速度:bps /8 以位为单位
成本:
安全性:
可用性:
可扩展性:
可靠性:
拓扑:
物理拓扑:
总线拓扑,环状拓扑,星型拓扑
单环状:沿着一个方向传输
双环状:提高冗余性,信号沿相反方向传输
逻辑拓扑:描述了信息在网络中流动的方式
带宽:
主机到主机的通信:
OSI:模型标准
网络模型分层:
应用层:网络进程访问应用层,为应用程序进程提供网络服务,提供身份验证,http。。。
表示层:确保接受系统可以读出该数据,格式化数据,构建数据,协商用于应用层的数据传输语法,提供加密
会话层:主机间通信,应用程序之间通信
传输层:确保数据可靠的传输,建立,维护和终止虚拟电路,通过错误检测和恢复,信息流控制来保障可靠性
实现数据点对点的传输
segment:段
网络层:路由数据,选择传递数据的最佳路径,支持逻辑寻址和路径选择
逻辑地址:ip地址
package:包(packet)
数据链路层:定义如何格式化数据以便进行传输以及如何控制对网络的访问,支持错误检测,对0,1数据的组织,格式化
物理地址
frame:帧
物理层:二进制传输,高低电平。物理设备的连接电气特性,机械规范,过程规范,功能规范
bit: 位
注:每一层都有一个唯一地址
数据封装:每一层都要封装一个报头,除了物理层
数据解封:和上面正好相反
对等通信:
PDU:
PDU: Protocol Data Unit,协议数据单元是指对等层次之间传递的数据单位
物理层的 PDU是数据位 bit
数据链路层的 PDU是数据帧 frame
网络层的PDU是数据包 packet
传输层的 PDU是数据段 segment
其他更高层次的PDU是消息 message
三种通讯模式:
单播:
虽然单播,但是不代表别人收不到。
组播(多播):部分主机
广播:一定范围内的所有。
局域网:Local Area Network (LAN)
LAN组成:
Computer
PCs
Servers
Interconnections:网络连接
NICs:网卡
Media
Network devices:网络设备
Hubs
Switches
Routers
Protocols:协议
Ethernet
IP
ARP
DHCP
网络线缆和接口:
10Base5: 10M 基带(数字), 最大传输距离500m
10BaseT: T 双绞线, 8根四对,避免电磁干扰
STP:屏蔽式双绞线
UTP:非屏蔽式双绞线
光纤:
注:以上都有最大传输距离
双绞线:100m
光纤:公里级别
UTP:
直通线:默认是1,2传,3,6 接受
交叉线:相同的设备连接,如两台电脑,连接,如果都是1,2 发送,3,6接受,就无法使用,所以A pc 1,2发送,B pc,3,6发送
中通线 使用 T568B
交叉线 使用 T568A
插头是:RJ-45 Connector
被插的是: Jack
双绞线针脚定义:
通讯术语:
单工:单向传输
全双工:可双向传输
半双工:不能同时传 --- 对讲机
LAN 标准:
Ethernet Evolution:以太网现在使用的是第二代
MAC:前三位 国际标准规定产商编号
写在ROM中,是可以改的,通过软件方式
Type:上层协议类型
Ethernet Frame 结沟:
整个以太网帧长度: 8 + 6 + 6 + 2 + (46, 1500) + 4
60- 1514 (72 - 1526)
type:指的是上层的协议类型!
数据链路层:
MAC地址:
CSMA/CD:冲突检测的载波侦听多路访问
应用在 数据链路层。
它的工作原理是: 发送数据前 先侦听信道是否空闲 ,若空闲,则立即发送数据。
若信道忙碌,则等待一段时间至信道中的信息传输结束后再发送数据;
若在上一段信息发送结束后,同时有两个或两个以上的节点都提出发送请求,则判定为冲突。
若侦听到冲突,则立即停止发送数据,等待一段随机时间,再重新尝试。
Hub:集线器
Hub:多端口中继器(信号放大器,传输更远举例)
Hub并不记忆该信息包是由哪个MAC地址发出。
Hub的特点:
共享带宽
半双工:同一时间只能一个人发
不会隔离冲突域
冲突域:
主机越多,冲突域越大
网桥(交换机):工作原理一样,有学习能力。
工作原理:
以太网桥监听数据帧中源MAC地址,学习MAC,建立MAC表
对于未知MAC 地址,网桥将转发到除接受该帧的端口之外的所有端口
当网桥接收到一个数据帧时,如果该帧的目的位与接收端口所在的网段上,他就过滤掉该数据帧,如果目的MAC 地址在位与另外一个端口,网桥就将该帧转发到该端口。
当网桥接收到广播帧时候,它立即转发到除接收端口之外的所有其他端口。
有一个内存:记录MAC 和 交换机接口对应关系
学习的是源MAC
隔离冲突域,
不能隔离广播域
Hub 和 交换机:
Hub工作在物理层,交换机在 数据链路层
后者可以隔离冲突域
Hub 共享所有总线,共享宽带,网桥每个端口占一个宽带。
路由器:隔离广播域
为了实现路由,需要做以下事情:
分隔广播域
选择路由表中到达目标最好的路径
维护和检查路由信息
连接广域网
路由:把一个数据包从一个设备发送到不同网络里的另一个设备上去。这些工作依靠路由器来完成。路由器只关心网络的状态和决定网络中的最佳路径。
路由的实现依靠路由器中的路由表来完成
网卡:数据链路层MAC
VLAN:虚拟局域网
分隔广播域
安全
灵活管理
VLAN = 广播域 = 逻辑网络(Subnet)
目前使用网络标准:
wapi:国内局域网标准
wifi:国际标准
wlan:wapi + wifi + 其他无线网络协议
分层的网络架构:
TCP/IP :协议栈,很多协议,只是用来命名的
Transmission Control Protocol/Internet Protocol
传输控制协议/因特网互联协议
TCP/IP是一个Protocol Stack,包括TCP、IP、UDP、
ICMP、RIP、TELNET、FTP、SMTP、ARP等许多协议
最早发源于美国国防部(缩写为DoD)的因特网的前身
ARPA网项目,1983年1月1日,TCP/IP取代了旧的网络
控制协议NCP,成为今天的互联网和局域网的基石和标
准,由互联网工程任务组负责维护
共定义了四层
和ISO参考模型的分层有对应关系
四层:
应用层:
传输层
internet层
network访问层(network 包括了internet)
TCP/IP协议栈 和OSI 模型对比:
TCP & UDP 对比:
tcp:
面向连接(可靠新差,效率不是很高)
序列化数据,添加数据标号的,将数据组装起来
udp
非面向连接
非序列化数据,不会添加数据编号
TCP特性:
半关闭:你可以理我,我可以不理你
工作在传输层
面向连接协议
错误检查
将数据打包成段,排序
确认机制
数据恢复,重传
流量控制,滑动窗口
拥塞控制,慢启动和拥塞避免算法
TCP包头:
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个
序列号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的 字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个 字节,就会出现序列号回绕,再次从 0 开始
确认号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送方:我希望你(指发送方)下次发送的数据的第一个字节数据的编号为此确认号
序列号:是全局的,不是针对某个传输 对象来说的,
确认号:我希望你发11包,含义就是10 已经收到了。
----也可以批量确认,提高效率(通过数据报文中的窗口得知,,是否批量)
窗口有固定窗口,滑动窗口
序列号:2^31
----用完了,转圈使用,还有辅助选项,比如加上时间
数据偏移:报头长度
数据偏移:表示TCP报文段的首部长度,共4位,由于TCP首部包含一个长度可变的选项部分,需要指定这个TCP报文段到底有多长。它指出 TCP 报文段的数据起始处距离 TCP 报文段的起始处有多远。该字段的单位是32位(即4个字节为计算单位),4位二进制最大表示15,所以数据偏移也就是TCP首部最大60字节
URG:表示本报文段中发送的数据是否包含紧急数据。后面的紧急指针字段(urgentpointer)只有当URG=1时才有效
ACK:表示是否前面确认号字段是否有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1,带ACK标志的TCP报文段称为确认报文段
PSH:提示接收端应用程序应该立即从TCP接收缓冲区中读走数据,为接收后续数据腾出空间。如果为1,则表示对方应当立即把数据提交给上层应用,而不是缓存起来,如果应用程序不将接收到的数据读走,就会一直停留在TCP接收缓冲区中 网卡缓存区---》 tcp缓冲区---》应用程序缓冲区
RST:如果收到一个RST=1的报文,说明与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明上次发送给主机的数据有问题,主机拒绝响应,带RST标志的TCP报文段称为复位报文段
SYN:在建立连接时使用,用来同步序号。当SYN=1,ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1,ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1,带SYN标志的TCP报文段称为同步报文段
FIN:表示通知对方本端要关闭连接了,标记数据是否发送完毕。如果FIN=1,即告诉对方:“我的数据已经发送完毕,你可以释放连接了”,带FIN标志的TCP报文段称为结束报文段
窗口大小:表示现在允许对方发送的数据量,也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量,达到此值,需要ACK确认后才能再继续传送后面数据,由Window size value * Window size scaling factor(此值在三次握手阶段TCP选项Window scale协商得到)得出此值
校验和:提供额外的可靠性
紧急指针:标记紧急数据在数据字段中的位置
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,选项部分最长为:(2^4-1)*4-20=40字节
常见选项:
最大报文段长度:Maxium Segment Size,MSS,通常1460字节
窗口扩大:Window Scale
时间戳: Timestamps
网卡缓存区---》 tcp缓冲区---》应用程序缓冲区
TCP协议 PORT:
常用端口号:2^16 = 65535
0-1023:系统端口,特权端口
1024-49151:用户端口,注册端口
49152-65535:动态端口,私有端口
-- /proc/sys/net/ipv4/ip_local_port_range 查看范围
dns --> tcp 53 udp 53
SNMP --> up 161
TFTP --> udp 69
https --> tcp 443
cat /etc/servics
cmd中 --> tasklist:查看本机开启的服务
netstat -no :协议和端口号
TCP三次握手:
TCP四次断开:
有限状态机:
CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED 在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭
传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认
四次断开:
客户端先发送一个FIN给服务端,自己进入了FIN_WAIT_1状态,这时等待接收
服务端的报文,该报文会有三种可能:
只有服务端的ACK
只有服务端的FIN
基于服务端的ACK,又有FIN
1、只收到服务器的ACK,客户端会进入FIN_WAIT_2状态,后续当收到服务端
的FIN时,回应发送一个ACK,会进入到TIME_WAIT状态,这个状态会持续
2MSL(TCP报文段在网络中的最大生存时间, RFC 1122标准的建议值是2min).
客户端等待2MSL,是为了当最后一个ACK丢失时,可以再发送一次。因为服务
端在等待超时后会再发送一个FIN给客户端,进而客户端知道ACK已丢失
2、只有服务端的FIN时,回应一个ACK给服务端,进入CLOSING状态,然后接
收到服务端的ACK时,进入TIME_WAIT状态
3、同时收到服务端的ACK和FIN,直接进入TIME_WAIT状态
孤儿连接:(类似孤儿进程)
处于FIN_WAIT_2状态的客户端需要等待服务器发送结束报文段,才能转移至TIME_WAIT状态,否则它将一直停留在这个状态。如果不是为了在半关闭状态下继续接收数据,连接长时间地停留在FIN_WAIT_2状态并无益处。连接停留在FIN_WAIT_2状态的情况可能发生在:客户端执行半关闭后,未等服务器关闭连接就强行退出了。此时客户端连接由内核来接管,可称之为孤儿连接(和孤儿进程类似)
Linux为了防止 孤儿连接长时间存留在内核中,定义了两个内核参数:
/proc/sys/net/ipv4/tcp_max_orphans:指定内核能够接管的孤儿连接数目
/proc/sys/net/ipv4/tcp_fin_timeout:指定孤儿连接在内核中生存的时间
半链接,完全链接:
sync:半连接队列,未完成连接队列,三次握手次数是有限制的。也就是三次握手没有完成。
accept:全连接队列
ss -tnl
/proc/sys/net/ipv4/tcp_max_syn_backlog 未完成连接队列大小,建议调整大小为1024以上
/proc/sys/net/core/somaxconn 完成连接队列大小,建议调整为1024以上
TCP超时重传:
网络异常(开始出现超时或丢包),TCP 控制 数据传输以保证其承诺的可靠服务,
TCP服务必须能够重传超时时间内未收到确认的TCP报文段。为此,TCP模块为每个TCP报文段都维护一个重传定时器,该定时器在TCP报文段第一次被发送时启动。如果超时时间内未收到接收方的应答,TCP模块将重传TCP报文段并重置定时器。至于下次重传的超时时间如何选择,以及最多执行多少次重传,就是TCP的重传策略
与TCP 超时重传相关的两个内核参数:
/proc/sys/net/ipv4/tcp_retries1:指定在底层IP接管之前TCP最少执行的重传次数,默认是3
/proc/sys/net/ipv4/tcp_retries2:指定连接放弃前 TCP 最多可以执行的重传次数,默认15(一般对应13-30min)
TCP 确认:
可以看到,收到一个报文,确认一次,这样效率很低,所以TCP报头提供了窗口
固定窗口:
滑动窗口:不固定,与双方主机性能有关
拥塞控制:
网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可承受的能力,网络的性能就会变坏。此情况称为拥塞
TCP为提高网络利用率,降低丢包率,并保证网络资源对每条数据流的公平性。即所谓的拥塞控制
TCP拥塞控制的标准文档是RFC 5681,其中详细介绍了拥塞控制的四个部分:慢启动(slow start)、拥塞避免(congestion avoidance)、快速重传(fastretransmit)和快速恢复(fast recovery)。拥塞控制算法在Linux下有多种实现,比如reno算法、vegas算法和cubic算法等。它们或者部分或者全部实现了上述四个部分
当前所使用的拥塞控制算法: /proc/sys/net/ipv4/tcp_congestion_control
UPD协议:
特性:
工作在传输层
提供不可靠的网络访问
非面向连接协议:不关心发送的数据是否到达对方
有限的错误检查
传输性能高
无数据恢复特性
局域网中,比较稳定
UDP包头:
Internet层:
ICMP:ping
ARP广播:地址解析协议
第一次通讯类似交换机,记住对方MAC
第二次则直接读缓存即可
arp -n 可以查看ARP表。 ip neigh
免费arp:还没有通讯,就提示ip冲突 ---- win上测试
ARP病毒,就是冒充别人的 IP ,进而冒充别人的MAC 地址
如果出现冲突:
arping -I eth1 192.168.112.110
查看冲突后的mac,通过mac在找交互机上的缓存表,找到具体的机器
RARP :ip---》 mac
IP PDU 报头:
固定长度也是 20个字节 4* 5
标识:数据报文来自哪个同一的包,每个小包来自哪个大包。
片偏移:来自同一个大包的第几个小包
标志:后两位有意思
DF:为0:分片
MF:为1:后面还有分片, 为 0 ,最后一个分片
抓数据包测试:ping -s 3500 192.168.112.112
按照以太网帧1500的话,分三片
ttl:生命周期,默认64,通过一个减 1
/roc/sys/net/ipv4/ip_default_ttl ttl值
cmd--> tracert www.baidu.com 查看路由
协议:上层协议类型: /etc/protocols 查看
Internet 协议特征:
运行与OSI 网络层
面向无连接的协议
独立处理数据包
分层编址
尽力而为传输
无数据恢复功能
ping ip地址:另类做法:
IP地址:
网路 ID
主机 ID
A: 8位网络ID 0
0-127.x.y.z
除去0,127 ,所以 1-126
10.x.y.z 2^24-2
10.0.0.0 10网段ID
10.1.1.1 10网段的广播地址
B: 16位网络ID 10
128-191.x.y.z
C: 24位网络ID 110
192-223.x.y.z
D: 1110 多播地址,不能配置
一个网段中最多的主机数:
2^主机ID位-2
公共IP地址:
私有地址:
特殊地址:
0.0.0.0
0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络
255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1~127.255.255.254
本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为
“127.0.0.1”的 数据包
224.0.0.0到239.255.255.255
组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF
路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x
如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地
址,系统会为主机分配这样地址
特殊的dns
114.114.114.114 国内
8.8.8.8 google
0.0.0.0 澳大利亚
223.5.5.5 阿里提供dns
无类域间路由CIDR
公共IP 地址:
私有IP地址:
特殊地址:
0.0.0.0
0.0.0.0不是一个真正意义上的IP地址。它表示所有不清楚的主机和目的网络
255.255.255.255
限制广播地址。对本机来说,这个地址指本网段内(同一广播域)的所有主机
127.0.0.1~127.255.255.254
本机回环地址,主要用于测试。在传输介质上永远不应该出现目的地址为
“127.0.0.1”的 数据包
224.0.0.0到239.255.255.255
组播地址,224.0.0.1特指所有主机,224.0.0.2特指所有路由器。224.0.0.5指OSPF
路由器,地址多用于一些特定的程序以及多媒体程序
169.254.x.x
如果Windows主机使用了DHCP自动分配IP地址,而又无法从DHCP服务器获取地
址,系统会为主机分配这样地址
子网掩码:Netmask
= 0
= 128
= 192
= 224
= 240
无类域间路由CIDR:IP/netmask
A:172.16.0.0/16
B:172.16.0.0/24
是否在同一个网段:用自己的Netmask 与 自己的 ip 和用自己的netmask 与 对方 的ip ,看 是否在同一个网段
所以上面的IP是可以通信的
如果:会影响通信吗,A可以到B,B能回来吗?不能
A:172.16.0.0/16
B:172.16.2.0/24
127地址都是能ping通,除非修改netmask
子网划分:
网络ID 向主机ID 借位。网络ID 变多,主机变少
划分超网:
网络ID变少,主机ID 变多
跨网络通信:
路由:
作用:隔离 广播域,通过路由表选择最佳的路由路径
查看路由信息:
cmd --> route print
linux-->route -n
路由接口:(就是网卡)
到达对应网络时,本路由的出口对应的接口
网关:下一个路由器的邻近本路由器的接口对应的IP,下一跳的地址
接口直连的网络,不需要配置网关,网关为空
路由分类:
主机路由:到达某个主机的路由 ip/32
默认路由:0.0.0.0/0,所有网路都不匹配的时候(每个网络都要一条记录,但是不可能都写进去,所以走默认路由出去)
网络路由:网络段
windows 中配置的网关就是连接外网的!!看图0, 0.0.0.0就是指外面的所有的网段
Linux中默认是没有网关的,在配置文件中加入网关,就会出现默认路由
DHCP:(学习)
DNS:
linux:
域名解析:
/etc/hosts
本地DNS解析
/etc/resolve.cnf
Linux:同一个网卡可以设置多种方式:dhcp,static
一个eth0 文件,一个 eth0:1文件,一个用dhp,一个用static或者none
widows:
hosts:C:\Windows\System32\drivers\etc
windows上配置两种方式:一个配静态,一个配dhcp,在不同工作环境下使用
cmd:metsh命令行配置地址
分别Linux和windows修改MAC地址:
win:
Linux直接在配置文件中修改:
ifcfg-eth0
CentOS 6网卡名称:
接口命名方式:CentOS6
以太网:eth[0,1,2...]
ppp:ppp[0,1,2...]
网络接口识别 并命名相关的udev配置文件:
查看网卡:
dmesg | grep -i eth
ethtool -i eth0
查看装载的mod:
lsmod
卸载模块:
modeprobe -r e1000
重新加载模块:
modprobe e1000
修改配置文件后,卸载模块,在装载,同时注意配置文件eth的DEVICE名字
Linux:
配置网络接口:
ifconfig命令:
ifconfig -a
ifconfig eth0 [up|down]
ifconfig eth0 ip/netmask up
启动混杂模式: -promisc
手动配置路由:
route -n :没有n,会解析
route add [-net|-host[ target [netmask Nm] [gw] [dev eth0]
route add default gw Nm:添加默认路由
route del -----:删除
动态路由配置
通过守护进程获取动态路由:
安装quagga包
支持 rip, ospf , bgp多种路由协议
RIP:只会选择路径少的
网络配置文件:
IP、MASK、GW、DNS相关配置文件:/etc/sysconfig/network-
scripts/ifcfg-IFACE
路由相关的配置文件:
/etc/sysconfig/network-scripts/route-IFACE
/etc/sysconfig/network-scripts/ifcfg-IFACE:
说明参考/usr/share/doc/initscripts-9.49.30/sysconfig.txt
DEVICE:此配置文件应用到的设备
HWADDR:对应的设备的MAC地址
BOOTPROTO:激活此设备时使用的地址配置协议,常用的dhcp, static,
none, bootp
NM_CONTROLLED:NM是NetworkManager的简写,此网卡是否接受
NM控制;建议CentOS6为“no
ONBOOT:在系统引导时是否激活此设备
TYPE:接口类型;常见有的Ethernet, Bridge
UUID:设备的惟一标识
IPADDR:指明IP地址
NETMASK:子网掩码
GATEWAY: 默认网关
DNS1:第一个DNS服务器指向
DNS2:第二个DNS服务器指向
USERCTL:普通用户是否可控制此设备
PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的
dns服务器指向信息直接覆盖至/etc/resolv.conf文件中
修改主机名:
配置当前主机的主机名:
hostname [HOSTNAME]
/etc/sysconfig/network
HOSTNAME=
解析器执行正向和逆向查询
/etc/hosts
• 本地主机名数据库和IP地址的映像
• 对小型独立网络有用
• 通常,在使用DNS前检查
• getent hosts 查看/etc/hosts 内容
dns名字解析:
/etc/resolv.conf
nameserver DNS_SERVER_IP1
nameserver DNS_SERVER_IP2
nameserver DNS_SERVER_IP3
search jerry.com
/etc/nsswitch.conf
与/etc/hosts相比优先于DNS
正向解析:FQDN-->IP
dig -t A FQDN
host -t A FQDN
反向解析:IP-->FQDN
dig -x IP
host -t PTR IP
/etc/hsots 和、 /etc/reslov.conf的区别:
http://www.mamicode.com/info-detail-1140250.html
路由网路配置文件:两种风格:
/etc/sysconfig/network-scripts/route-IFACE
1、TARGET via GW
10.0.0.0/8 via 172.16.0.1
2、每三行定义一条路由:
ADDRESS#=
NETMASK#=
GATEWAY#=
网卡别名:
对虚拟机有用:
将多个IP地址绑定到一个网卡上
eth0:1, eth0:2 ...
ifconfig eth0:1 192.168.111.111/24 up
ifconfig eht0:0 down
ip 命令:
ip addr add 172.16.1.1/16 dev eth0
ip addr add 172.16.1.1/16 dev eth0 label eth0:0
ip addr del 删除
ip addr flush dev eth0 label eth0:0
设备别名:
为每个设备别名生成队独立的接口配置文件
关闭NetworkManager服务
ifcfg-ethX:xxx
必须使用静态联网:
DEVICE=eth0:0
IPADDR=10.10.0.2
NETMASK=255.0.0.0
ONPARENT=yes
参看:/usr/share/doc/initscripts-*/sysycongfig.tct
CentOS7 网络属性配置:
CentOS6 网络接口使用连续号码命名:eth0.。。,当删除或增加网卡时,名称可能会发生变化
CentOS7 使用基于硬件,设备拓扑和设置类型命名:
1、网卡命名机制:
systemd对网络设备的命名方式
如果Firmware或BIOS为主板上继承的设备提供的索引信息可用,且可预测根据此索引进行命名,,例如:eno1
如果Firmware或BIOS为PCI-E 扩展槽所提供的索引信息可用,可预测,则根据次索引进行命名,例如ens1
如果硬件接口的物理位置信息可用,则根据此信息进行命名,例如 enp2
s0
如果用户显示启动,可以根据MAC地质进行命名enx2387a1dc56
上述不可用,可以使用传统命名方式
网卡名称:
基于BIOS支持启用biosdevname软件
内置网卡:em1, em2
pci卡: pYpX Y:slot X:port
名称组成格式:
en:Ethernet 有线局域网
wl:wlan 无线局域网
ww:wwan 无线广域网
名称类型:
o
s
x
p
采用传统命名方式:
/etc/default/grub配置文件
FRUB_CMDLINE=“rhgb quiet net.ifnames=0”
为grub2 生成其配置文件
grub2-mkconfig -o /boot/grub2/grub.cfg
重启系统
也就是添加这句话:net.ifnames=0
网络配置工具:
CentOS主机名
配置文件:/etc/hostname, 默认没有此文件,通过DNS反向解析获取主机名,主机名默认为:localhost.localdomain
显示主机名信息:
hostname
hostnamectl status
设置主机名:
hostnamectl set-hostname cne7node1
删除文件 /etc/hostname 恢复默认主机名
CentOS 7 网络配置工具:
图形工具:nm-connection-editor
字符配置tui 工具:nmtui
命令行工具:nmcli
nmcli命令
地址配置工具:nmcli
nmcli [ OPTIONS ] OBJECT { COMMAND | help }
device - show and manage network interfaces
nmcli device help
connection - start, stop, and manage network connections
nmcli connection help
修改IP地址等属性:
nmcli connection modify IFACE [+|-]setting.property value
setting.property:
ipv4.addresses ipv4.gateway
ipv4.dns1 ipv4.method manual | auto
修改配置文件执行生效:systemctl restart network
nmcli con reload
nmcli命令生效: nmcli con down eth0 ;nmcli con up eth0
NeworkManager是管理和监控网络设置的守护进程
设备即网络接口,连接是对网络接口的配置,一个网络接口可有多个连接配置,
但同时只有一个连接配置生效
显示所有包括不活动连接
nmcli con show
显示所有活动连接
nmcli con show --active
显示网络连接配置
nmcli con show "System eth0“
显示设备状态
nmcli dev status
使用nmcli配置网络
显示网络接口属性
nmcli dev show eth0
创建新连接default,IP自动通过dhcp获取
nmcli con add con-name default type Ethernet ifname eth0
删除连接
nmcli con del default
创建新连接static ,指定静态IP,不自动连接
nmcti con add con-name static ifname eth0 autoconnect no type
Ethernet ipv4.addresses 172.25.X.10/24 ipv4.gateway 172.25.X.254
使用nmcli配置网络
启用static连接配置
nmcli con up static
启用default连接配置
nmcli con up default
查看帮助
nmcli con add help
使用nmcli配置网络
修改连接设置
nmcli con mod“static” connection.autoconnect no
nmcli con mod “static” ipv4.dns 172.25.X.254
nmcli con mod “static” +ipv4.dns 8.8.8.8
nmcli con mod “static” -ipv4.dns 8.8.8.8
nmcli con mod “static” ipv4.addresses “172.25.X.10/24 172.25.X.254”
nmcli con mod “static” +ipv4.addresses 10.10.10.10/16
DNS设置,存放在/etc/resolv.conf文件中
PEERDNS=no 表示当IP通过dhcp自动获取时,dns仍是手动设置,不自动获取
等价于下面命令:
nmcli con mod “system eth0” ipv4.ignore-auto-dns yes
使用nmcli配置网络
nmcli命令
nmcli con mod ifcfg-* 文件
ipv4.method manual BOOTPROTO=none
ipv4.method auto BOOTPROTO=dhcp
ipv4.addresses “192.0.2.1/24 192.0.2.254” IPADDR0=192.0.2.1
PREFIX0=24
GATEWAY0=192.0.2.254
ipv4.dns 8.8.8.8 DNS0=8.8.8.8
ipv4.dns-search example.com DOMAIN=example.com
ipv4.ignore-auto-dns true PEERDNS=no
connection.autoconnect yes ONBOOT=yes
connection.id eth0 NAME=eth0
connection.interface-name eth0 DEVICE=eth0
802-3-ethernet.mac-address . . . HWADDR= . . .
nmcli命令
修改连接配置后,需要重新加载配置
nmcli con reload
nmcli con down “system eth0” 可被自动激活
nmcli con up “system eth0”
nmcli dev dis eth0 禁用网卡,访止被自动激活
图形工具
nm-connection-editor
字符工具
nmtui
nmtui-connect
nmtui-edit
nmtui-hostname
测试网络工具:
hostname
ping
ip route
路由跟踪:
tranceroute(需要安装)
trancepath
mtr(需要安装)
确定名称服务器使用:
nslookup
host
dig (安装bind-utils)
mtr:
已报告模式显示
第一列:显示IP
第二列: 丢包率;
第三列: snt : 每秒发送数据包的数量,默认值是10
第四列: 显示最近一次的返回时延
第五列: 发送ping包的平均时延
第六列: 时延最短时间
第七列: 最长时延
第八列: 标准偏差
可以-c number 设置
网络客户端工具:
ftp,lftp:子命令get, mget,ls,help
lftpget URL
wget:
-q:静默模式
-c:断点续传
-P /path :保存在指目录
-O filename:保存为指定文件名,filename为 - 时发送至标准输出
--limit-tate= :之赐你个传输速率,k, M等
links URL:(安装)
-dump:获取文字
-source:原码
losf 查看具体的端口 :列出当前系统打开文件的工具;lsof -i :22
watch 命令 wath -n 1 'cat /var/log/access.log'
ping 的使用
-a 将目标的机器标识转换为ip地址
-t 若使用者不人为中断会不断的ping下去
-c count 要求ping命令连续发送数据包,直到发出并接收到count个请求
-d 为使用的套接字打开调试状态
-f 是一种快速方式ping。使得ping输出数据包的速度和数据包从远程主机返回一样快,或者更快,达到每秒100次。在这种方式下,每个请求用一个句点表示。对于每一个响应打印一个空格键。
-i seconds 在两次数据包发送之间间隔一定的秒数。不能同-f一起使用。
-n 只使用数字方式。在一般情况下ping会试图把IP地址转换成主机名。这个选项要求ping打印IP地址而不去查找用符号表示的名字。如果由于某种原因无法使用本地DNS服务器这个选项就很重要了。
-p pattern 拥护可以通过这个选项标识16 pad字节,把这些字节加入数据包中。当在网络中诊断与数据有关的错误时这个选项就非常有用。
-q 使ping只在开始和结束时打印一些概要信息。
-R 把ICMP RECORD-ROUTE选项加入到ECHO_REQUEST数据包中,要求在数据包中记录路由,这样当数据返回时ping就可以把路由信息打印出来。每个数据包只能记录9个路由节点。许多主机忽略或者放弃这个选项。
-r 使ping命令旁路掉用于发送数据包的正常路由表。
-s packetsize 使用户能够标识出要发送数据的字节数。缺省是56个字符,再加上8个字节的ICMP数据头,共64个ICMP数据字节。
-v 使ping处于verbose方式。它要ping命令除了打印ECHO-RESPONSE数据包之外,还打印其它所有返回的ICMP数据包。
netstat:
显示网络连接:
netstat [--tcp|-t] [--udp|-u] [--raw|-w] [--listening|-l] [--all|-a] [--
numeric|-n] [--extend|-e[--extend|-e]] [--program|-p]
-t: tcp协议相关
-u: udp协议相关
-w: raw socket相关
-l: 处于监听状态
-a: 所有状态
-n: 以数字显示IP和端口
-e:扩展格式
-p: 显示相关进程及PID
常用组合:
-tan, -uan, -tnl, -unl
显示路由表:
netstat {--route|-r} [--numeric|-n]
-r: 显示内核路由表
-n: 数字格式
显示接口统计数据:
netstat {--interfaces|-I|-i} [iface] [--all|-a] [--extend|-e] [--program|-p]
[--numeric|-n]
netstat -i
netstat –I=IFACE #指定网卡 eth0
ifconfig -s eth0
ss:
netstat通过遍历proc来获取socket信息,ss使用netlink与内核tcp_diag模块通信获取
socket信息。
选项:
-t: tcp协议相关
-u: udp协议相关
-w: 裸套接字相关
-x:unix sock相关
-l: listen状态的连接
-a: 所有
-n: 数字格式
-p: 相关的程序及PID
-e: 扩展的信息
-m:内存用量
-o:计时器信息
常见用法
ss -l 显示本地打开的所有端口
ss -pl 显示每个进程具体打开的socket
ss -t -a 显示所有tcp socket
ss -u -a 显示所有的UDP Socekt
ss -o state established '( dport = :ssh or sport = :ssh )' 显示所有已建立的
ssh连接
ss -o state established '( dport = :http or sport = :http )' 显示所有已建立
的HTTP连接
ss -s 列出当前socket详细信息
ip命令:
做路由转发:置为 1
cat /proc/sys/net/ipv4/ip_forward
ip:
link:管理接口
ip link show
dev IFCE:显示指定接口
up:显示启动的接口
ip link set
dev IFACE up[down]:指定设备启动或dwon掉
addr:管理地址
ip addr add |del 192.168.1.2/16 dev eth0 [label eth0:1]
ip addr change
ip addr flush
ip addr scop [global | link | host]
ip adr boradcast 不用专门配置,网卡会自动识别的,主机地址全为1
ip addr show:
dev IFACE
label eth0:0:只显示指定别名的
primary 主地址
secondary:辅助地址
ip address flush:清空ip地址
dev eth0:清空设备上的所有
label eth0:0:清空指定别名的
配置的地址是属于内核的,不属于网卡,所以以台主机上的两张网卡,不管主机是否打开核心转发功能,都能ping通,但是必须是有网关指定(如果不在同一网段)。
scop:global,全局都可以使用
scop:link,只能在当前网卡使用,别人通过该网卡ping另一个人 ,是不通的。
scop:host,只能在本机使用,自己ping自己,即便自己的网址是外网,别人也是ping不通。
route:管理路由
ip route list
ip route add
192.168.1.2 via 172.16.0.1 dev eth0 ---主机
192.168.0.0/24 via 172.16.0.1 dev eth0 -- 网段
192.168.0.0/24 via 172.16.0.1 dev eth0 src 原地址-- 网段
ip route add default via 172.16.0.1 --添加默认网关
ip route del
ip route flush
ip route show
dev IFACE:清空或显示指定网卡的所有的
via PREFIX:指定网关的
ip route get:显示单个路由
路由的配置文件需要自己创建:/etc/sysconfig/network-scripts/toute-xxx
第一种风格: 192.168.0.0/24 via 172.16.0.1 :由172 到192
第二种风格:
ADDRESS0=192.168.20.0
NETMASK0=
GATEWAY0=172.16.0.1
两种风格不能一起使用
网卡别名不能使用DHCP获取ip
按 Ctrl+C 复制代码nmap: 扫描器
其基本功能有三个:
(1)是扫描主机端口,嗅探所提供的网络服务
(2)是探测一组主机是否在线
(3)还可以推断主机所用的操作系统,到达主机经过的路由,系统已开放端口的软件版本
tcpdump: 嗅探器:
https://www.cnblogs.com/ggjucheng/archive/2012/01/14/2322659.html
tcpdump host 210.27.48.1 -- 例如截获所有210.27.48.1 的主机收到的和发出的所有的数据包
tcpdump host helios and \( hot or ace \) --- 打印helios 与 hot 或者与 ace 之间通信的数据包
tcpdump ip host ace and not helios ---打印ace与任何其他主机之间通信的IP 数据包, 但不包括与helios之间的数据包.
tcpdump ip host 210.27.48.1 and ! 210.27.48.2 ---如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令:
tcpdump -i eth0 src host hostname --- 截获主机hostname发送的所有数据
tcpdump -i eth0 dst host hostname --- 监视所有送到主机hostname的数据包
tcpdump tcp port 23 and host 210.27.48.1 --- 如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令
tcpdump -XvvennSs 0 -i eth0 tcp[20:2]=0x4745 or tcp[20:2]=0x4854 --- 0x4745 为"GET"前两个字母"GE",0x4854 为"HTTP"前两个字母"HT"。
tcpdump net ucb-ether --- 监视指定网络的数据包
tcpdump 'gateway snup and (port ftp or ftp-data)' --- 打印所有通过网关snup的ftp数据包(注意, 表达式被单引号括起来了, 这可以防止shell对其中的括号进行错误解析)
tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap
(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口eth1的包
(3)-t : 不显示时间戳
(4)-s 0 : 抓取数据包时默认抓取长度为68字节。加上-S 0 后可以抓到完整的数据包
(5)-c 100 : 只抓取100个数据包
(6)dst port ! 22 : 不抓取目标端口是22的数据包
(7)src net 192.168.1.0/24 : 数据包的源网络地址为192.168.1.0/24
(8)-w ./target.cap : 保存成cap文件,方便用ethereal(即wireshark)分析
wireshark: 嗅探器
tshark: 字符界面的
ethtool Interface:
ethtool ethX //查询ethX网口基本设置
ethtool –h //显示ethtool的命令帮助(help)
ethtool –i ethX //查询ethX网口的相关信息
ethtool –d ethX //查询ethX网口注册性信息
ethtool –r ethX //重置ethX网口到自适应模式
ethtool –S ethX //查询ethX网口收发包统计
ethtool –s ethX [speed 10|100|1000]\ //设置网口速率10/100/1000M按 Ctrl+C 复制代码