关于OSI七层模型、TCP五层模型、TCP的三次握手、HTTP协议、DNS解析等相关的网络基础知识请参考我整理的一篇博客:http://www.cnblogs.com/wxisme/p/4699049.html
TCP协议使用的端口,0-65535,1-1024是系统端口,所以开发应用一般使用大于1024的端口号
常见端口号:FTP:20(数据传输),21(命令通信)
SSH登录:22
telnet:23
DNS:53
http:80
SMTP:25
POP3:110
IMAP:143
https:443
查看服务器开启的所有端口:netstat -an
hosts文件优先级高于DNS解析
hosts文件按行填写 格式为:IP地址 主机名 #为注释
根域名服务器只有13个,*域由ISO组织制定
*域分为:组织域、国家和地区域
网关是充当转换任务的服务器或者路由器,网关就是内网和外网进行数据通信的设备
局域网访问是不需要网关的,如果要访问互联网则必须确定网关和DNS才可以正常与外网通信
自动获取IP需要配置DNS服务器
Linux网络配置的方法:
1、ifconfig命令临时配置、查看网络状态
2、setup工具配置
3、修改配置文件永久配置
4、图形界面配置(一般不常用,服务器一般不安装图形界面)
ifconfig 查看网络配置信息一般都有eth0 lo两个,lo是回环地址,一般查看其它有用信息
临时设置eth0的IP地址和子网掩码,重启或者重置网络设置后失效:
ifconfig eth0 192.168.1.36 netmask 255.255.255.0
永久配置(redhat系列):
1、setup 根据提示配置即可,配置DHCP的时候,输入空格代表*,配置*代表开启DHCP,下面的IP都不用配置了;默认为*输入空格可以取消*,然后可以编辑静态IP地址,全部配置完成后确认并退出
2、然后重启网络服务使配置生效(保证下面配置文件ONBOOT=yes):service network restart
重启后即可生效,确认重启服务时远程连接工具会暂时断开,如果没有其他问题,则稍等即可重新连接
通过修改网络配置文件配置IP(Linux下一切内容皆文件,网络设置也是放在配置文件中):
文件存放位置:/etc/sysconfig/network-scripts/ifcfg-网卡名称 比如ifcfg-eth0,ifcfg-lo等,有几个网卡就有几个配置文件,网卡名称通过ifconfig命令查看
使用setup配置也是写到这个文件中
属性解释:
DEVICE=eth0 配置网卡文件名称,属性值和文件名位置必须保持一致,文件名为ifcfg-eth1则DEVICE=eth1
BOOTPROTO=dhcp 配置自动获取或者手动配置,dhcp是自动获取,none或者static是手动指定
如果设置为dhcp则IP地址就不用配置了,否则需要手动配置所有属性
HWADDR=00:0c:29:17:c4:09 设置MAC地址
NM_CONTROLLED=yes 是否可以由Network Manager图形管理工具托管
ONBOOT=yes 设置网卡配置是否随网络服务启动,建议设置为yes,否则上面设置重启网络服务也不一定生效,设置为yes即可正常启动
TYPE=Ethernet 类型为以太网
UUID=ba72570b-7dbb-487a-b0b7-3af6d53f094a 唯一识别码,当安装多个计算机镜像时,可以直接复制网络配置文件,只需要修改UUID的唯一性即可,如果局域网中UUID都相同,并且其他配置都相同,那么计算机将不能上网
IPADDR=192.168.1.36 配置IP地址
NETMASK=255.255.255.0 配置子网掩码
GATEWAY=192.168.1.1 配置网关
DNS1=114.114.114.114 主DNS配置
IPV6INIT=no 不启用IPv6
USERCTL=no 不允许非root用户控制此网卡
主机名文件:/etc/sysconfig/network
NETWORKING=yes 启动主机通信,no就是不启用
HOSTNAME 可以配置主机名,服务器相关服务配置时,需要配置主机名
修改主机名后重启计算机使主机名生效
hostname test1 临时修改主机名,重启失效
所以如果打算不重启,永久修改主机名,则采用配置文件+hostname临时设置方式,保证永久生效
hostname 命令可以查看当前主机名
远程shell提示符的主机名需要重新连接登录时才会更新
DNS配置文件:/etc/resolv.conf 如果上面网络设置是DHCP那么一定会用到这里的设置
search net 如果没有写全,则自动补全设置的域名,这里补全net
nameserver 219.147.1.66 这里就是设置名称服务器地址,也就是DNS服务器的地址,可以设置多条
如果setup工具可以使用的话,推荐使用setup,以上配置文件修改是标准配置,对于所有Linux通用,只是个别Linux文件存放位置不太一样
虚拟机网络配置:
1、首先使用setup配置好,修改配置文件ONBOOT=yes,然后重启网络服务
2、如果克隆了多个虚拟机,需要修改网络配置文件的UUID,修改方法如下:
首先删除网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,打开文件,删除HWADDR=MAC地址这一行,保存退出
手动删除网卡和MAC地址绑定文件:rm -rf /etc/udev/rules.d/70-persistent-net.rules
重新启动操作系统
启动后,UUID即可修改成功,如果是光盘手动安装的Linux系统则UUID问题不用考虑
3、虚拟机设置:桥接设置,是虚拟机使用和真实机的网卡进行独立的IP地址配置,既能和局域网计算机进行通信,也可以访问外网
NAT设置,使用网络设置建立的第二个虚拟连接分配IP,可以访问外网并且和本地计算机通信,但是不能和局域网内其他计算机进行通信
Host-only设置,使用网络设置的第一个虚拟连接,只能和本机通信,不能和本地局域网其他计算机以及外网进行通信,推荐使用桥接方式,使用真实网卡进行通信。
4、设置桥接到的网卡
一般计算机有本地连接和无线连接两个连接,即有线网卡和无线网卡,根据计算机连接网络环境不同,所以虚拟机应该编辑网络桥接到无线网卡还是有线网卡,配置正确之后可以正常使用本地网络进行通信
使用ifconfig查看网卡的信息,包括IP、子网掩码、IPv6等
ifdown 网卡设备名 禁用网卡
禁用之后,通过ifconfig无法查看信息了,
ifup 网卡设备名 启用网卡
netstat -t 列出TCP协议网络状态,当前开启的状态
netstat -u 列出UDP协议网络状态
netstat -tn 按照IP和端口查看,避免了DNS解析
netstat -tnl 只查看监听的所有tcp端口
netstat -tunl 查看tcp和udp的所有监听端口,一般常用查看已启动服务的端口
netstat -an 查看所有的网络连接状态,包括程序的连接
根据netstat提供的信息统计当前服务器一共有多少远程连接:
netstat -an | grep ESTABLISHED
统计服务器并发连接个数:netstat -an | grep ESTABLISHED | wc -l
列出路由表:netstat -rn 可以查看网关和命令 route -n结果一样,-n就是表示用IP显示而不用域名显示,速度更快
临时修改网关:route add default gw 192.168.0.2 必须是和原来网关是同一网段,不建议设置,这样会导致数据报无法通过,所以通过命令:route del default gw 192.168.0.2 删除添加的网关
网关分为内网网关和外网网关,一般通过路由器进行转换,内网网关可以通过计算机和路由器设置,如果没有外网网关,那么路由器将无法知道数据报应该发送到什么地方,因此会循环重传导致失败,外网网关属于相对来说属于公网,是上一级网络分配,一般是运营商分配,所以通过外网网关后,才可以正常的传递数据
nslookup www.baidu.com 利用DNS设置查看域名对应的IP地址,可以打印设置的DNS地址和域名解析到的IP地址
只输入nslookup可以进入交互式输入,然后输入server可以查看设置的DNS地址(包括首选和备用),输入exit退出到原命令行
检查网络连通性:ping www.baidu.com (首先解析出IP然后进行测试)或者ping 114.114.114.114
Linux会向指定服务器发送icmp数据包通过响应来统计数据,但是会一直不停止的检测下去,有些网站会禁止ping命令
ping 192.168.1.2 -c 5 指定ping的次数
telnet 220.168.0.252 80 可以远程登录管理,目前最流行的是使用加密的ssh 22端口进行shell外壳连接,因为telnet明文传输,所以一般不会使用,或者一些服务器关闭了23端口以及telnet服务
使用netstat -tuln 查看本地连接的端口
使用telnet 192.168.1.58 80 测试对方计算机是否开启80端口,很多Linux目前默认已经没有telnet命令了,需要安装telnet服务
traceroute 域名或者ip 查看到指定域名或者IP的路由节点,本质也是使用ping发送数据包,如果显示*则是节点路由禁止了ping
路径一般是本地网关,外网网关等后面所有的经过的路由,路由追踪一般可以查看网络错误,是本地还是运营商发生了故障,是故障检测中常用的命令之一
wget url 远程下载指定url的文件
抓包命令:tcpdump -i eth0 -nnX port 21 参数解释:-i指定网卡设备,-nn将域名以IP地址的方式显示,-X以十六进制和ASCII码显示数据包内容,port指定监听端口,,比如21是ftp传输端口,ftp也是明文传输,是不安全的
tcpdump -i eth2 -nnX port 8983 >> test.log 可以将抓包结果放到日志文件中便于分析
对称加密算法:也叫作单密钥加密,加密和解密使用同一个密钥,中间使用密文传输,问题:使用相同的密钥,对方也需要知道密钥,安全性降低
非对称加密:双方各自使用公钥和私钥通信,公钥就是锁,私钥就相当于钥匙,使用双方公钥加密,使用各方私钥都可以打开,从而保护双方密码的安全性
ssh 安全外壳协议,就是基于非对称的加密算法进行加密,ssh保证了数据传输中的安全性,虽然传输过程中安全但是防止穷举法破解还是要设置高强度的密码从而提高安全性;ssh虽然传输过程中安全但是在本地输入时不能保证安全,所以要清楚本地木马病毒的威胁,从而更加提高安全性;ssh连接之前一般要从远程服务器下载公钥,同意后输入密码即可连接,ssh免密码登录也需要第一次下载公钥和密码校验操作
一般连接其他服务器的公钥位置放在:~/.ssh/known_hosts,根据IP存放公钥串
如果需要重新生成公钥,则删除known_hosts对应的服务器那一行即可重新下载公钥
通过ssh ip可以远程访问其他服务器或者ssh root@ip设置以root用户访问
scp 本地文件 ip:服务器路径 用来上传文件,scp -r 本地文件 ip:服务器路径 递归上传整个目录
下载文件直接反过来即可,比如:scp -r 192.168.1.32:/usr/app/abc/ /home/abc/
scp是基于ssh协议安全传输文件的,ssh登录或者scp传输文件时,主机也可以写成:username@ip: 表示以username用户身份登录或者传递文件
FileZilla或者winSCP都是两个FTP上传工具,默认FTP协议使用21端口,数据明文传输,而且需要在服务器端搭建FTP文件服务器vsftpd服务,所以推荐使用SFTP协议,即ssh加密的FTP协议,只需要下载一次密钥,不需要任何的服务器配置即可使用
利用网络远程数据通信方式:
命令行远程操作:ssh
Linux服务期间文件传输:scp命令行,基于ssh的cp操作
Windows和Linux服务器之间文件传输:SFTP协议,基于ssh的FTP传输