计算机网络基础

计算机网络基础

分层的网络模型

网络发展到今天,规模很庞大,内容很复杂,不利于网络的管理和教学。网络分层可以:降低网络结构的复杂性、把各层的接口标准化、简化模块设计、确保技术的互操作性、加快发展速度以及简化教学过程。

OSI模型——国际标准:根据国际标准化组织( ISO,International Standards Orgnization)提案,计算机网络模型分为七层。也就是通常所说的七层协议(即OSI参考模型),即:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。由于七层协议实现起来较复杂,虽是标准但还是被五层协议替代,就是通常所说的 TCP/IP 参考模型。

计算机网络基础

每层的结构如下:

计算机网络基础


两个主机通信过程

计算机网络基础

IP报文传输过程包括:
  1. Host sends packet to default gateway(主机将数据包发送到默认网关)

  2. Packet placed in frame(数据包被封装入帧)

  3. Router receives frame(路由器接到帧)

  4. Router finds destination network in route table(路由器在路由表中发现目标网络)

  5. Router chooses next hop toward destination(路由器选择一个更接近目标的下一跳)

  6. MAC address of next hop determined(下一跳的MAC地址被确定)

  7. Packet placed in frame(数据包被封装入帧)

  8. Repeats steps 2 through 7 as necessary(如果需要的话,重复步骤2~7)

  9. Router receives frame(路由器接到帧)

  10. Router finds network directly connected(路由器发现直连网络)

  11. MAC address of end host determined(最终主机的MAC地址被确定)

  12. Packet placed in frame to final destination(帧中的数据包被发送到最终主机)

主机A与主机B通信,A Ping B,图:A-交换机-B,AB同一子网

(1)ping数据包用的是ICMP协议,IP协议的一个子协议,位于三层,包含A的IP,B的IP,三层进行IP封装成包,进入二层

(2)A,B处于相同子网,查看缓存中对与目的对应得B第2层mac地址,如果存在,直接进行第2层封装成帧,经物理层信号编码,以0101010010这样的bits流传输在网络介质上。

(3)如果不存在B的MAC,则发送ARP广播请求B的MAC,ARP数据包经物理层进入交换机端口,需要进行源端口号学习,目的端口查找,B响应ARP请求,交换机又可以学习一目的MAC地址与哪个端口对应,在下次传送数据时就不再需要对所有端口进行广播了。B通过ARP单播把B的MAC响应给A,此时再返回(2)的处理过程。

(4)当再进行A与B之间数据包转发,将直接用B的MAC地址封装,数据转发得以高速交换

主机A与主机C通信,A Ping C,图:A-交换机-路由器M-路由器N-交换机-C,AC不同子网

(1)两个机器不在同一子网内,A要与目的C通信,A要向“缺省网关”发出ARP包,而“缺省网关”的IP地址已经在A系统软件中设置。这个IP地址实际上对应路由器M的E0的IP地址。所以A对“缺省网关”的IP地址广播出一个ARP请求时,路由器M的E0口的MAC回复给A,此时A数据包的目的MAC替换为M的E0口MAC。

(2)MAC替换后,经物理层,传输到交换机物理层,再传到交换机数据链路层,再经数据数据链路层到物理层。

(3)经bit流传到路由器M的物理层,然后传到数据链路层,二层解封装,目的IP与路由器M三层IP路由表比较,若匹配正确,交给上层处理,否则会缓存数据包内容,然后根据目标地址查找路由表找到相关表项,得到NEXT HOP及出接口的MAC地址,用这两个地址作为新的目的及源MAC地址封装事先缓存的数据包,然后转发,这个过程称为帧的重写(REWRITE)。

(4)重复进行MAC替换后, 在路由器N中,找到与目的IP匹配表项,若N中存在C对应的MAC表项,则数据传输到C网络层,否则N发送ARP广播请求C的MAC。

(5)当C收到A的数据包后,再从A到C进行一次反向MAC替换过程。反向过程中,每一步省略掉ARP请求NEXT HOP的MAC,因为MAC表已经建立起来。

网络层

计算机网络基础

网络通信靠的三个地址

真正完成一次通信需要三个地址。MAC地址用来实现本地通信。跨网络通信要靠IP地址,但是IP地址仅仅只是界定两个通信的主机,就是界定哪个主机是通信的源,哪个主机是通信的目标。真正实现通信的还是MAC地址。即为

互联网通信=多段接力的本地通信

但是问题来了,我用在主机上用qq给目标主机发送一个信息,目标主机运行着各种进程,是哪一个进程去接我的这个信息呢,这就涉及到第三个地址,port地址,也称为端口地址。互联网通信的实质是两个进程之间的通信

进程地址=IP+端口地址,叫socket,由内核提供。(端口是指用来标识本地主机上每一个进程的唯一的数字标识)

当进程要发起某个通信时要向内核注册一个进程地址,这个地址只是临时的。

Linux主机是如何接入网络中的

IP地址是最基础的了,用来标识源和目标,有了IP才有掩码,没有掩码没法判定谁是本地,谁是远端的,即为无法判断是本地通信还是跨网通信。

有了IP与掩码最多可以判定谁是本地,可以通信,远端的就通信不了了,想要远端通信还要加上网关,有了网关才能实现跨网通信。但是互联网也不会通过IP 地址来通信,像我们访问www.baidu.com,这叫主机名,通常讲是域名,拿一个域名是不能够通信的,要把名字转换为IP才可以,要依赖应用层来实现转换。

例如AB两个主机通信,A不知道B是谁,A要通过互联网层层路由找到另外一个网络主机,这个主机是DNS服务器(名称服务器,能够完成名称解析功能,就是转换,主机名<–>IP),DNS服务器有一个数据库,A要与B通信,第一步是A要向DNS服务器发送地址解析请求,但是如果直接访问IP 就不需要解析了,要知到www.baidu.com的IP 地址是什么,查找数据库,将查找结果响应到A主机,A就知道了,这个时候将报文封装起来,有传输层守护、IP守护,再将报文发个B主机。

如果要把一个主机接到网络中去,要配置 IP/NETMASK:能够实现本地通信 路由(网关)条目:跨网络通信 DNS服务器地址:基于主机名的通信

路由器

路由器是依靠路由表来判断某一主机通信的目标主机是在哪一个网络上,从而发往哪一个接口(下一跳),简单说就是数据进来后,路由器查看这个包的目的地址,然后根据自己的路由表转发到下个端口,这个端口就是下一跳的地址。路由表都知道自己在网络中处在什么位置,都要知道到达目标主机有哪些路可以走,这些记录的数据就是路由表条目。

所以Linux设置路由器就要设置到达目的以及经过哪个下一跳地址。

路由表生成: 静态指定 动态学习:rlp2、ospf协议


Linux网络配置命令

配置方式:

静态指定:

ifcfg家族:
    ifconfig:配置IP,NETMASK
    route:路由
    netstat:状态及统计数据查看
iproute2家族:(主要学习这个家族,功能强大)
    ip OBJECT:
    addr:地址和掩码;
    link:接口
    route:路由
    ss:状态及统计数据查看
CentOS 7:nm(Network Manager)家族
    nmcli:命令行工具
    nmtui:text window 工具

注意:
    (1) DNS服务器指定    
        配置文件:/etc/resolv.conf
    (2) 本地主机名配置
        hostname
        配置文件:/etc/sysconfig/network
        CentOS 7:hostnamectl                    
    配置文件:
        RedHat及相关发行版
        /etc/sysconfig/network-scripts/ifcfg-NETCARD_NAME

动态分配:依赖于本地网络中有DHCP服务
    DHCP:Dynamic Host Configure Procotol

ifcfg-IFACE配置文件参数含义

配置文件: IP/NETMASK/GW/DNS等属性的配置件:/etc/sysconfig/network-scripts/ifcfg-IFACE IFACE:接口名称; 路由的相关配置文件:/etc/sysconfig/networkj-scripts/route-IFACE

配置文件/etc/sysconfig/network-scripts/ifcfg-IFACE通过大量参数来定义接口的属性;其可通过vim等文本编辑器直接修改,也可以使用专用的命令的进行修改(CentOS 6:system-config-network (setup),CentOS 7: nmtui)

DEVICE:此配置文件对应的设备的名称; ONBOOT:在系统引导过程中,是否激活此接口; UUID:此设备的惟一标识; IPV6INIT:是否初始化IPv6; BOOTPROTO:激活此接口时使用什么协议来配置接口属性,常用的有dhcp、bootp、static、none; TYPE:接口类型,常见的有Ethernet, Bridge; DNS1:第一DNS服务器指向; DNS2:备用DNS服务器指向; DOMAIN:DNS搜索域; IPADDR: IP地址; NETMASK:子网掩码;CentOS 7支持使用PREFIX以长度方式指明子网掩码; GATEWAY:默认网关; USERCTL:是否允许普通用户控制此设备; PEERDNS:如果BOOTPROTO的值为“dhcp”,是否允许dhcp server分配的dns服务器指向覆盖本地手动指定的DNS服务器指向;默认为允许; HWADDR:设备的MAC地址;

iproute家族:

ip命令:

show / manipulate routing, devices, policy routing and tunnels

ip [ OPTIONS ] OBJECT { COMMAND | help }
    OBJECT := { link | addr | route | netns  }

注意: OBJECT可简写,各OBJECT的子命令也可简写;

ip  OBJECT:

    ip link: network device configuration

        ip  link  set - change device attributes
            dev NAME (default):指明要管理的设备,dev关键字可省略;
            up和down:
            multicast on或multicast off:启用或禁用多播功能;
            name NAME:重命名接口
            mtu NUMBER:设置MTU的大小,默认为1500;
            netns PID:ns为namespace,用于将接口移动到指定的网络名称空间;

        ip  link  show  - display device attributes

        ip  link  help -  显示简要使用帮助;

    ip netns:  - manage network namespaces.

        ip  netns  list:列出所有的netns
        ip  netns  add  NAME:创建指定的netns
        ip  netns  del  NAME:删除指定的netns
        ip  netns   exec  NAME  COMMAND:在指定的netns中运行命令

    ip address - protocol address management.

        ip address add - add new protocol address
            ip  addr  add  IFADDR  dev  IFACE
                [label NAME]:为额外添加的地址指明接口别名;
                [broadcast ADDRESS]:广播地址;会根据IP和NETMASK自动计算得到;
                [scope SCOPE_VALUE]:
                    global:全局可用;
                    link:接口可用;
                    host:仅本机可用;                                             

        ip address delete - delete protocol address
            ip addr  delete  IFADDR  dev  IFACE 

        ip address show - look at protocol addresses
            ip  addr   list  [IFACE]:显示接口的地址;

        ip address flush - flush protocol addresses
            ip  addr  flush  dev  IFACE

    ip route - routing table management

        ip route add - add new route
        ip route change - change route
        ip route replace - change or add new one
            ip  route   add  TYPE PREFIX  via GW  [dev  IFACE]  [src SOURCE_IP]

    示例:
        # ip route add 192.168.0.0/24  via 10.0.0.1  dev eth1 src  10.0.20.100
        # ip  route  add default  via  GW                       

        ip route delete - delete route
            ip  route  del  TYPE PRIFIX 

    示例:
        # ip  route delete  192.168.1.0/24

        ip route show - list routes
            TYPE PRIFIX  
        ip route flush - flush routing tables
            TYPE  PRIFIX

        ip route get - get a single route
            ip  route  get  TYPE PRIFIX

    示例:ip route  get  192.168.0.0/24

ss命令:

ss  [options]  [ FILTER ]
    选项:
        -t:TCP协议的相关连接
        -u:UDP相关的连接
        -w:raw socket相关的连接
        -l:监听状态的连接
        -a:所有状态的连接
        -n:数字格式
        -p:相关的程序及其PID
        -e:扩展格式信息
        -m:内存用量
        -o:计时器信息

常用组合:   -tan,  -uan,  -tnl,  -unl,  -tunlp

    FILTER := [ state TCP-STATE ]  [ EXPRESSION ]

        TCP的常见状态:
            TCP FSM:
                LISTEN:监听
                ESTABLISEHD:建立的连接
                FIN_WAIT_1:
                FIN_WAIT_2:
                SYN_SENT:
                SYN_RECV:
                CLOSED:

        EXPRESSION:
            dport = 
            sport = 
        示例:'( dport = :22 or sport = :22)'
        ~]# ss   -tan    '(  dport = :22 or sport = :22  )'
        ~]# ss  -tan  state  ESTABLISHED

实例:ip,增删查

1.查看网卡协议地址

计算机网络基础

2.显示网卡eno16777736

计算机网络基础

3.在网卡eno16777736上增加一个IP 地址192.168.0.3/24,标准广播地址,指定别名为eno16777736:0.

ip addr add IP dev IFACE(接口)

计算机网络基础

4.删除网卡eno16777736上的ip地址192.168.0.3/24.

计算机网络基础

5.添加静态主机路由。

计算机网络基础

6.启用网卡eno16777736

ip link set dev eno16777736 up

7.更改网卡名称

计算机网络基础因为我只有一个网卡,要修改名称必须先停掉,我的网卡停掉后,就连不上忘了。

8.显示路由表

计算机网络基础

9.添加静态网络路由

#ip route add 192.168.1/24 via 192.168.0.1

10.添加静态主机 路由

#ip route add 192.168.1.2 via 192.168.0.1

11.删除路由

#ip route delete

12.ss命令

-tnl   -tan     
#ss -tan state ESTABLISHED

原创文章,作者:N24_yezi,如若转载,请注明出处:http://www.178linux.com/60340

(0)
N24_yeziN24_yezi
上一篇 2016-11-22 12:31
下一篇 2016-11-22

相关推荐

  • 文件处理工具

    Linux的哲学思想之一是一切皆文件,所有系统中有许多文本文件。因此Linux有许多关于文本处理的命令。 cat命令 连接文件并打印到标准输出设备上,cat经常用来显示文件内容。 语法 cat [OPTION]… [FILE]… 常用选项 -A, –show-all #显示所有控制符 -b, –num…

    Linux干货 2016-08-08
  • Linux基础命令 -管道密切配合使用 tee

    基础命令和管道密切配合使用  tee     基础命令:tee   tee命令 功能: 把命令1的STDOUT保存在文件名中,然后管道输入给命令2; 补充说明:tee指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。 使用场景: 1.保存不同阶段的输出 2.复杂管道的故障排除 3.同时查看和记录…

    Linux干货 2016-08-03
  • 第十五周作业

    1、总结sed和awk的详细用法; sed:     模式空间:sed是一种在线编辑器、行编辑器,一次处理一行内容,在处理时,把当前处理的行存储在临时缓冲区当中,并在该缓冲区中完成后续的处理,该缓冲区被称为”模式空间”。     保持空间:在模式空间中处理完一行内容后会继续处理下一行,但是对于处…

    Linux干货 2017-04-18
  • Linux第一周学习博客作业

    对第一周学习的内容进行总结

    Linux干货 2017-12-02
  • 配置基于mysql的虚拟用户认证vsftp服务器

    1.安装vsftp、mysql、epel_release(epel源,后面要安装的pam_mysql认证模块需要这个源)、pam_mysql 2.刚装的mysql运行一下/usr/bin/mysql_secure_installation 3.建立数据库vsftpd,建表user,     create database vsftpd; …

    Linux干货 2016-06-22
  • Ansible的常用模块

    command模块: 目的:在指定节点上运行hostname命令 命令:ansible 192.168.1.16 -m command  ‘hostname’copy模块:目的:把主控端/root目录下的a.sh文件拷贝到到指定节点上 命令:ansible 192.168.1.16 -m copy -a ‘src=/roo…

    Linux干货 2017-10-31

评论列表(1条)

  • luoweiro
    luoweiro 2016-11-30 23:49

    网络知识总结看的很全面,值得大家学习,加油。