Linux实战教学笔记19:Linux相关网络知识梳理

第十九节 Linux相关网络知识梳理

标签(空格分隔): Linux实战教学笔记-陈思齐


一,前言

一个运维有时也要和网络打交道,所以具备最基本的网络知识,对一个运维人员来说是必要的。但,对于我们的工作来说这些并不是重点,因此,我不可能从最基础的网络知识开始讲起。本节内容更多是从一个梳理和总结的角度进行阐述。如若同学们遇到不懂,或不明白的地方,那么你要留心了,你有很多基础性的网络知识还不具备,我建议从网上有针对性的学习一下。

二,网络基础学习体系

思科课程体系的大致浏览(CCNA),虽然知识不多,培训周期一般在1周左右,但涵盖了大部分的知识内容,对于初步理解网络知识,掌握网络的相关配置,基本上已经非常满足了,特别是系统运维人员。

第1单元 第2单元 第3单元 第4单元
网络基础 路由协议 二层交换网络 WAN网络和IPv6
OSI七层模型 IP路由原理 VLAN 串行点到点链路
TCP/IP简介 静态路由 VTP 帧中继网络
子网划分 默认路由 STP IPv6简介
Cisco IOS设备 动态路由 单臂路由
管理网络环境 用户访问列表初步管理IP流量

说明:

对于系统运维人员,以上知识可以都学习一下,CCNA的学习难度不是很大,而且学习周期较短,对于快速成为一个系统运维工程师中,网络搞的最好的,就足够了。如果时间精力有限,建议学习以下知识,作为步入网络知识的基石

1)网络基础知识:涉及到网路的发展历程,网络一些名词概念,路由交换。

2)OSI七层模型的介绍

3)TCP/IP协议簇的简介,包含TCP/IP三次握手和四次挥手的过程

4)VLSM可变子网的概念

三,网络重点知识总结性梳理

3.1 OSI七层模型

Linux实战教学笔记19:Linux相关网络知识梳理

层次 说明 功能/协议
应用层 应用程序及借口,类似于公司的老板 提供应用程序的借口FTP telnet http pop3等
表示层 对数据进行转换,加密和压缩 将上层的数据进行转换和编译压缩为标准的文件,如jpg,gif,ascii码等
会话层 建立,管理和终止会话
传输层 提供可靠的端到端的报文传输和差错控制,实质上就是负责建立连接的 TCP UDP 建立可靠和非可靠连接将上层的数据进行分段处理
网络层 将分组从源端传送到目的端,提供网络互联 实质上就是提供路由寻址(IP协议)将上层分段的数据进行打包
数据链路层 将分组数据封装成帧,提供节点到节点的传输 帧就是本地局域网中传输数据的一个单元,负责在局域网内部的点对点的寻址
物理层 在媒体上传输比特 就是底层的链路介质的规范

特点说明:

1,OSI模型每层都有自己的功能集

2,层与层之间相互独立又互相依靠

3,上层依赖于下层,下层为上层提供服务。

3.2TCP/IP三次握手和四次挥手

Linux实战教学笔记19:Linux相关网络知识梳理

报文类型 含义 状态
SYN 发起一个新连接 1表示发起连接
FIN 释放一个连接 1表示结束连接
ACK 确认序号有效 1表示序号有效
seq 随机序号 随机数
ack 随机序号回复 ack=seq+1

3.2.1 三次握手

1)第一次握手:Client将标志位SYN置为1,随机产生一个seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。

2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

3)第三次握手:Client收到确认后,检查ack是否为x+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。

3.2.2 四次挥手

1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传输,同时发送一个seq=x的随机序号。Client进入FIN_wait_1状态

2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)Server进入CLOSE_WAIT状态。

3)第三次挥手:Server发送一个FIN,用来关闭Server到CLient的数据传输,同时发送一个seq=y的随机数,Server进入LAST_ACK状态

4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次回挥手

3.3 DNS解析流程原理

Linux实战教学笔记19:Linux相关网络知识梳理

  1. 在浏览器中输入www.qq.com域名,操作系统会先检查自己本地的hosts文件是否有这个网址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
  2. 如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成域名解析。
  3. 如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找TCP/ip参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
  4. 如果要查询的域名,不由本地DNS服务器区域解析,但该服务器已缓存了此网址映射关系,则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
  5. 如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(是否设置转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该*域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责.com域的这台服务器。这台负责.com域的服务器收到请求后,如果自己无法解析,它就会找一个管理.com域的下一级DNS服务器地址(qq.com)给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找qq.com域服务器,重复上面动作,进行查询,直至找到www.qq.com主机。
  6. 如果用的是转发模式,此DNS服务器就会把请求转发至上一级DNS服务器,由上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转发请求转至上上级,以此循环。不管是本地DNS服务器用的是转发,还是根提示,最后都是把结果返回给本地DNS服务器,由此DNS服务器再返回给客户机。

3.5 http解析原理

1)地址解析

如用客户端浏览http://chensiqi:8080/index.html

协议名:http

主机名:chensiqi.com

端口:8080

对象路径:/index.html

在这一步需要域名系统DNS解析域名chensiqi.com得到主机的IP地址。

2)封装HTTP请求数据包

把第一步的解析结果在结合本机自己的信息,封装成一个HTTP请求数据包

3)封装成TCP包,建立TCP连接

TCP的三次握手

4)客户机发送请求命令

建立连接后,客户机发送一个请求给服务器,请求方式的格式为:统一资源标识符(URL),协议版本号,后边是MIME信息包括请求修饰符,客户机信息许可内容

5)服务器响应

  • 服务器接到请求后,给予相应的响应信息,格式为一个状态行,包括信息的协议版本号,一个成功或错误的代码,后边是MIME信息包括服务器信息,实体信息何可能的内容。
  • 实体消息是服务器向浏览器发送头信息后,它会发送一个空白行来表示头信息的发送到此为结束,接着,它就以Content-Type应答头信息所描述的格式发送用户所请求的实际数据

6)服务器关闭TCP连接

一般情况下,一旦Web服务器向浏览器发送了请求数据,它就要关闭TCP连接,然后如果浏览器或者服务器在其头信息加入了这行代码Connection:Keep-alive。TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立连接所需要的时间,还节约了网络带宽。

综上:

http解析的过程,虽然我写的比较具体,但其实大家只需要了解大概的过程就可以,如果建立URL请求,发起URL请求,处理及返回URL的过程。

3.5 同网段和跨网段数据传输原理

Linux实战教学笔记19:Linux相关网络知识梳理

3.4.1 同网段下(同广播域),两台主机通信过程

我们知道两主机要通信传送数据时,就要把应用数据封装成IP包(因为我们的网络大多都是TCP/IP的以太网),然后再交给下一层数据链路层继续封装成帧;之后根据MAC地址才能把数据从一台主机,准确无误的传送到另一台主机。

当NO要和N1通信时,

1)假如NO知道N1的IP但却不知道它的MAC地址,那NO就会发送一个ARP的广播请求(里面源IP是NO目标IP是N1源MAC是N0目标MAC是12个F)给同一广播域中的所有成员。

2)当交换机SW0从自己的1接口上收到这个广播包,然后它会读取这个帧的源MAC地址和目标MAC地址,由于交换机SW0刚启动加电时,它的MAC表为空的。所以它会把NO的MAC地址与之相对应的接口1放到一张表里,这张表就是MAC地址表。

3)然后SW0再从别的接口广播这个数据帧,当别的主机收到这个广播时,查看目标IP不是自己的,就会丢弃此包。如果N1接收到这个数据帧,它检查目标IP和这个的IP是一样的,就会回应这个ARP请求,把自己的IP和MAC封装成源IP和源MAC,N0的IP和N0的MAC地址为目标IP与目标MAC,并记录N0的MAC与IP,放进自己的ARP缓存表中。

4)此时,这个应答包经过交换机SWO时,它又会检查源MAC,目标MAC,把N1的MAC和自己接口2放进MAC地址表中,再查看自己的MAC地址表,发现存在目标MAC与自己的1接口对应(由于刚开始有记录过N0的MAC),那它就会直接把这个应答包从接口1送出去了。

5)主机N0收到这个包后发现目标MAC是自己,就会处理这个包。并把N1的MAC与IP放进自己的ARP缓存表中。这时主机N0就知道N1的MAC地址了,

6)后续的发送数据任务,就会直接把N1的IP与MAC封装进帧中进行点对点的发送了。

3.4.2 跨路由(不同网段)数据传输过程

当N0要和N2通信时

1)N0会先检查N2的IP地址和自己是否处于同一网段,由于N2和自己处在不同网段,因此,N0会把数据包给它的网管,也就是R0上的F0/0接口了。

2)当这个数据包到达R0时,路由器R0会查看目标IP是否是自己的,由于目标不是自己,所以会查看自己的路由表,找出到达N2网段的路由;(如果找不到就会丢弃数据包)

3)当R0查看路由表发现到达N2网段的出接口是F0/1.于是,把数据包转到F0/1接口上,再由接口F0/1传给R1.这个过程,数据包的源IP是N0源MAC是F0/1目标IP是N2目标MAC是R1的F0/1接口IP

4)当R1收到这个数据包后,同样也要检查包的目标IP是否自己,它会主动查找自己的路由表,发现目标IP跟自己F0/0接口处在同一网段,于是就把包传到F0/0接口上去发给N2。)

四,linux网络相关配置

4.1 配置网卡

网卡:编辑配置文件 /et/sysconfig/network-scripts/ifcfg-eth0

[root@chensiqi ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0 #第一块网卡逻辑设备名,第二块为eth1,有些系统也会以em等字符标识
TYPE=Ethernet #上网类型,目前基本都是以太网
ONBOOT=yes #这个地方要为yes,才能保证下次开机自动启动激活网卡设备
NM_CONTROLLED=yes #是否通过NetworkManager管理网卡设备
BOOTPROTO=dhcp #启动协议,获取配置方式,有none|bootp|dhcp三个选项
USERCTL=no
PEERDNS=yes
IPV6INIT=no #是否支持IPV6
HWADDR=00:0c:29:cb:f9:c0 #以太网硬件地址即MAC地址,如果是vmware克隆的虚拟机无法启动网卡可以毫不犹豫的删除此项
IPADDR=10.0.0.8 #这是虚拟机桥接模式,局域网linux服务器的固定IP
NETMASK=255.255.255.0 #子网掩码,用来规划网络位和主机位,一般为255.255.255.0
DNS1=202.106.0.20 #主DNS,这里默认会覆盖以及优先于/etc/resolv.conf
DNS2=8.8.8.8 #第二个DNS,这里默认会覆盖以及优先于/etc/resolv.conf

通过软件修改网卡:

1)输入命令setup

2)Network configuration进入网卡配置文件

网卡生效

1)针对单一网卡

ifup eth0 启动eth0网卡

ifdown eth0 停掉eth0网卡

2)针对所有网卡重启

/etc/init.d/network restart

注意:

1,网卡配置里的DNS优先于/etc/resolv.conf配置的,并且重启网卡,会把/etc/resolv.conf里的覆盖

2,网络如果没有配置DNS,那么在/etc/resolv.conf里配置会生效,如果有多块网卡(DHCP获取方式)时候,可能会覆盖/etc/resolv.conf里已有配置

4.2 主机名变更

1)临时修改主机名(重启系统失效)

hostname 主机名

2)永久修改主机名

/etc/sysconfig/network

[root@chensiqi ~]# cat /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=chensiqi #修改这个

4.3 默认网关的更改

第一生效文件:

[root@chen ~]# grep -i gate /etc/sysconfig/network-scripts/ifcfg-eth0
GATEWAY=202.106.0.20

第二生效文件:

[root@chen ~]# grep -i gate /etc/sysconfig/network
GATEWAY=202.106.0.20

第三:命令行优先,且临时生效

route -n 查看路由规则

route add default gw 10.0.0.254 #添加路由规则

route del default gw 10.0.0.254 #删除路由规则

route 功能很多,不仅仅配置默认网关,网络(静态)路由

4.4 命令行配置ip别名辅助

[root@chen ~]# ifconfig eth0:0 192.168.197.244 netmask 255.255.255.0 up
[root@chen ~]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0C:29:CB:F9:C0
inet addr:192.168.197.133 Bcast:192.168.197.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fecb:f9c0/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:816 errors:0 dropped:0 overruns:0 frame:0
TX packets:546 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:73249 (71.5 KiB) TX bytes:83087 (81.1 KiB) eth0:0 Link encap:Ethernet HWaddr 00:0C:29:CB:F9:C0
inet addr:192.168.197.244 Bcast:192.168.197.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b) [root@chen ~]#

linux一块网卡可以配置多个临时的IP地址

五,已知端口查服务的多种方法

方法一:lsof

[root@chen ~]# lsof -i:22
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 1136 root 3u IPv4 12469 0t0 TCP *:ssh (LISTEN)
sshd 1136 root 4u IPv6 12478 0t0 TCP *:ssh (LISTEN)
sshd 1211 root 3r IPv4 13199 0t0 TCP www.test.com:ssh->localhost:51527 (ESTABLISHED)

知识扩展:文件已经被删除,但进程还在占用,导致磁盘空间不释放,怎么查找?

[root@chen ~]# lsof | grep del
php-fpm 1165 root 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1166 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1167 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1168 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1169 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)
php-fpm 1170 nginx 3u REG 8,3 0 132492 /tmp/ZCUDnCFFxq (deleted)

方法二:netstat -lntup

[root@chen ~]# netstat -antup | grep 22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1136/sshd
tcp 0 0 192.168.197.133:22 192.168.197.1:51527 ESTABLISHED 1211/sshd
tcp 0 0 :::22 :::* LISTEN 1136/sshd

六,网络及服务故障的排查思路

例:假如http://www.cnblogs.com/chensiqiqi/ 网址打不开

第一步:查一下看看通不通

ping -c3 -i2 -s512 www.cnblogs.com icmp协议是否被禁止

-c:次数

-i:时间间隔

-s:发包大小

traceroute www.cnblogs.com 查看各个节点是否畅通

telnet www.cnblogs.com 80

检查服务器WEB有没有开启,服务开没开,以及防火墙有没有挡住。

[root@chen ~]# telnet www.cnblogs.com 80
Trying 118.178.114.231...
Connected to www.cnblogs.com.
Escape character is '^]'.
#一直卡在这里就代表通的 [root@chen ~]# telnet www.cnblogs.com 800
Trying 118.178.114.231...
#一直处在连接中就代表不通

综上:如果不通

1,80服务没开或端口不存在

2,服务被防火墙阻挡了

3,服务监听的端口不在连接的IP上(连接被限定了连接IP)

Linux实战教学笔记19:Linux相关网络知识梳理

4,运营商默认不开,申请开端口

七,企业面试题两道

7.1 作为局域网网管,局域网的某个机器无法上网(网管角度)

基本检查思路:

(一)单机器无法上网

1)ping www.baidu.com

如果通,但不能上网,可能是浏览器,中毒等问题

2)ping 网关(目的是排除物理链路问题)

  • 如果ping网关不通,则查看ip设置,然后ping自身ip或ping网内其他机器IP;如果ping自身不通:检查ip设置,网卡驱动,物理链路
  • 如果ping网关通,则检查DNS的设置是否正确。pingDNS地址看看通不通或者nslookup进行公网的域名解析看看是否正常。

3)上网的路由器以及ISP线路问题

4)辅助排查:IP地址冲突,ARP病毒,核心交换机坏了,交换机环路,其他人能否上网

(二)大面积不能上网思路:

路由器,ISP,核心交换机,ARP病毒,核心交换机坏了,交换机环路。

7.2 作为linux运维,客户反应打开的网站慢,如何排查?(运维角度)

(一)用户个例还是全部都如此

模拟用户环境,进行访问测试,如果没有问题,就从客户角度思考,如果自己测试同样有问题,按下面思路排查

1,路是否通的问题

1)ping 网站地址,看看道路通不通

  • 如果ping通,不丢包。就是服务有问题(服务宕机,服务过载)
  • 如果ping通,但丢包。机房问题(带宽不稳定,各个线路不稳定)
  • 如果ping不通,那么ping百度看看通不通,如果也不通,那还是机房问题。

2)路由追踪:看看从客户端到服务器的线路节点是否有问题

traceroute -d(linux)

tracert -d(windows)

-d禁止反向解析(速度快)

2,机房业务是否OK

3)telnet www.baidu.com 80 检查服务器WEB服务有没有开启以及防火墙有没有挡住

nmap www.baidu.com -p 80

curl www.baidu.com 或wget www.baidu.com #相当于浏览器访问

4)提供服务的服务器是否资源过载,服务器及服务连接数过多,负载高,CPU高,IO高等

3,外部问题

5)网站购买的带宽满了,通过流量监控服务查看

6)内链外链(调用外部网站网址有问题)

根据网站URL调式网站

a,google浏览器直接F12

b,火狐firebug等

没有错误,只是有点警告(警告没事)

Linux实战教学笔记19:Linux相关网络知识梳理

有错误,让开发看看是不是错误导致

Linux实战教学笔记19:Linux相关网络知识梳理

我在做linux运维之前曾做过一段时间的产品开发,在工作中就遇到过因为代码逻辑问题所导致的无限循环直接累瘫痪掉了服务器的案例,此时可从Linux日志(windows日志)或者浏览器检查等手段进行查看。

4,其他问题:

个别客户自身,例如用户的网络线路和运营商网站带宽线路不符(联通VS电信)

5,集群架构问题

web服务问题:

数据库问题:

登录数据库看看是否有慢查询语句show proceslist,调整MYSQL配置,优化SQL语句

存储等问题:

是不是存储服务器,如NFS,MFS的负载及磁盘IO高

7.3 真实的运维面试考卷

Linux实战教学笔记19:Linux相关网络知识梳理

实战教学笔记到了这里基本上Linux运维相关的所有基础核心能力知识就已经结束了。笔记和辅助训练中出现的所有面试题或者企业案例均为真实可靠,非我自主乱编,以上卷为证。

八,合格的企业Linux运维必会网络知识总结

  1. tcp/ip协议三次握手和四次断开过程
  2. http协议的工作原理
  3. 机器无法上网
  4. 网站打开慢
  5. DNS解析原理
  6. osi七层网络模型
  7. route如何添加一个网络路由?
  8. 如何查看已知端口对应的服务名?
上一篇:IPv6地址表示方式


下一篇:Python面试题目之列表去重并维持原来顺序