zoukankan      html  css  js  c++  java
  • linux网络基础

    Linux相关网络知识梳理

    原文地址:https://www.cnblogs.com/chensiqiqi/p/6503278.html


    一,前言

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

    二,网络基础学习体系

    思科课程体系的大致浏览(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七层模型

    屏幕快照 2017-03-04 上午8.03.50.png-561.7kB

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

    特点说明:
    1,OSI模型每层都有自己的功能集
    2,层与层之间相互独立又互相依靠
    3,上层依赖于下层,下层为上层提供服务。

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

    1e7dabc397095fcfe46ffa71296e4dc6.png.jpeg-54.7kB

    报文类型含义状态
    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解析流程原理

    屏幕快照 2017-03-04 下午11.15.17.png-142.9kB

    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 同网段和跨网段数据传输原理

    屏幕快照 2017-03-04 下午3.52.01.png-298.5kB

    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)
    QQ20170304-204610@2x.png-92.5kB
    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等

  • 相关阅读:
    Maven 集成Tomcat插件
    dubbo 序列化 问题 属性值 丢失 ArrayList 解决
    docker 中安装 FastDFS 总结
    docker 从容器中拷文件到宿主机器中
    db2 相关命令
    Webphere WAS 启动
    CKEDITOR 4.6.X 版本 插件 弹出对话框 Dialog中 表格 Table 自定义样式Style 问题
    SpringMVC JSONP JSON支持
    CKEDITOR 3.4.2中 按钮事件中 动态改变图标和title 获取按钮
    git回退到远程某个版本
  • 原文地址:https://www.cnblogs.com/wzy23/p/11393150.html
Copyright © 2011-2022 走看看