【鸟哥的linux私房菜-学习笔记】计算机网络相关知识简要回顾

来源:互联网 发布:淘宝招牌怎么做好看 编辑:程序博客网 时间:2024/06/05 12:46

一、网络服务器成功联机的流程


这里写图片描述
网络联机至服务器所需经过的各项环节

根据上面的流程我们大概可以将整个联机分为几个部分,包括:网络、服务器本身、内部防火墙软件设定、各项服务配置文件、细部权限的 SELinux 以及最终最重要的档案权限。

1.网络:了解网络基础知识与所需服务之通讯协议
基本的网络基础知识:包括以太网络硬件与协议、TCP/IP、网络联机所需参数等;
各网络服务所对应的通讯协议原理,以及各通讯协议所需对应的软件。

2.服务器本身:了解架网络服务器之目的以配合主机的安装规划

3.服务器本身:了解操作系统的基本操作

4.内部防火墙设定:管理系统的可分享资源

5.服务器软件设定:学习设定技巧与开机是否自动执行

6.细部权限设定:包括 SELinux 与档案权限

二、计算机网络组成组件

节点 (node):节点主要是具有网络地址 (IP) 的设备之称, 因此上面图示中的一般PC、Linux服务器、ADSL调制解调器与网络打印机等,个别都可以称为一个 node ! 那集线器 (hub) 是不是节点呢?因为他不具有 IP ,因此 hub 不是节点。

服务器主机 (server):就网络联机的方向来说,提供数据以『响应』给用户的主机, 都可以被称为是一部服务器。举例来说,Yahoo 是个 WWW 服务器。

工作站 (workstation) 或客户端 (client):任何可以在计算机网络输入的设备都可以是工作站, 若以联机发起的方向来说,主动发起联机去『要求』数据的,就可以称为是客户端 (client)。举例来说,一般 PC 打开浏览器对 Yahoo 要求新闻数据,那一般 PC 就是客户端。

网络卡 (Network Interface Card, NIC):内建或者是外插在主机上面的一个设备, 主要提供网络联机的卡片,目前大都使用具有 RJ-45 接头的以太网络卡。一般 node 上都具有一个以上的网络卡, 以达成网络联机的功能。

网络接口:利用软件设计出来的网络接口,主要在提供网络地址 (IP) 的任务。 一张网卡至少可以搭配一个以上的网络接口;而每部主机内部其实也都拥有一个内部的网络接口,那就是 loopback (lo) 这个循环测试接口!

网络形态或拓朴 (topology):各个节点在网络上面的链接方式,一般讲的是物理连接方式。

网关 (route) 或通讯闸 (gateway):具有两个以上的网络接口, 可以连接两个以上不同的网段的设备,例如 IP 分享器就是一个常见的网关设备。

三、计算机网络区域范围

局域网络 (Local Area Network, LAN):
节点之间的传输距离较近,例如一栋大楼内,或一个学校的校区内。可以使用较为昂贵的联机材料, 例如光纤或是高质量网络线 (CAT 6) 等。网络速度较快,联机质量较佳且可靠,因此可应用于科学运算的丛集式系统、 分布式系统、云端负荷分担系统等。

广域网 (Wide Area Network, WAN):
传输距离较远,例如城市与城市之间的距离,因此使用的联机媒体需要较为便宜的设备,例如经常使用的电话线就是一例。 由于线材质量较差,因此网络速度较慢且可靠性较低一些,网络应用方面大多为类似 email, FTP, WWW 浏览等功能。

四、计算机网络协议: TCP/IP

OSI七层协议:

  • Layer 1 物理层 Physical Layer:
    由于网络媒体只能传送 0 与 1 这种位串,因此物理层必须定义所使用的媒体设备之电压与讯号等, 同时还必须了解数据讯框转成位串的编码方式,最后连接实体媒体并传送/接收位串。

  • Layer 2 数据链结层 Data-Link Layer:
    这一层是比较特殊的一个阶层,因为底下是实体的定义,而上层则是软件封装的定义。因此第二层又分两个子层在进行数据的转换动作。 在偏硬件媒体部分,主要负责的是 MAC (Media Access Control) ,我们称这个数据报裹为 MAC 讯框 (frame), MAC 是网络媒体所能处理的主要数据报裹,这也是最终被物理层编码成位串的数据。MAC 必须要经由通讯协议来取得媒体的使用权, 目前最常使用的则是 IEEE 802.3 的以太网络协议。
    至于偏向软件的部分则是由逻辑链接层 (logical link control, LLC) 所控制,主要在多任务处理来自上层的封包数据 (packet) 并转成 MAC 的格式, 负责的工作包括讯息交换、流量控制、失误问题的处理等等。

  • Layer 3 网络层 Network Layer:
    这一层是我们最感兴趣的啰,因为我们提及的 IP (Internet Protocol) 就是在这一层定义的。 同时也定义出计算机之间的联机建立、终止与维持等,数据封包的传输路径选择等等,因此这个层级当中最重要的除了 IP 之外,就是封包能否到达目的地的路由 (route) 概念了!

  • Layer 4 传送层 Transport Layer:
    这一个分层定义了发送端与接收端的联机技术(如 TCP, UDP 技术), 同时包括该技术的封包格式,数据封包的传送、流程的控制、传输过程的侦测检查与复原重新传送等等, 以确保各个数据封包可以正确无误的到达目的端。

  • Layer 5 会谈层 Session Layer:
    在这个层级当中主要定义了两个地址之间的联机信道之连接与挂断,此外,亦可建立应用程序之对谈、 提供其他加强型服务如网络管理、签到签退、对谈之控制等等。如果说传送层是在判断资料封包是否可以正确的到达目标, 那么会谈层则是在确定网络服务建立联机的确认。

  • Layer 6 表现层 Presentation Layer:

  • 我们在应用程序上面所制作出来的数据格式不一定符合网络传输的标准编码格式的! 所以,在这个层级当中,主要的动作就是:将来自本地端应用程序的数据格式转换(或者是重新编码)成为网络的标准格式, 然后再交给底下传送层等的协议来进行处理。所以,在这个层级上面主要定义的是网络服务(或程序)之间的数据格式的转换, 包括数据的加解密也是在这个分层上面处理。

  • Layer 7 应用层 Application Layer:
    应用层本身并不属于应用程序所有,而是在定义应用程序如何进入此层的沟通接口,以将数据接收或传送给应用程序,最终展示给用户。

TCP/IP协议

TCP/IP 是由 OSI 七层协议简化而来,它们的相关性可以图示如下, 同时这里也列出目前在这架构底下常见的通讯协议、封包格式与相关标准:


这里写图片描述

TCP/IP 运作例子:

应用程序阶段:打开浏览器,在浏览器上面输入Yahoo的网址,按下 [Enter]。此时网址列与相关数据会被浏览器包成一个数据, 并向下传给 TCP/IP 的应用层;

应用层:由应用层提供的 HTTP 通讯协议,将来自浏览器的数据报起来,并给予一个应用层表头,再向传送层丢去;

传送层:由于 HTTP 为可靠联机,因此将该数据丢入 TCP 封包内,并给予一个 TCP 封包的表头,向网络层丢去;

网络层:将 TCP 包裹包进 IP 封包内,再给予一个 IP 表头 (主要就是来源与目标的 IP ),向链结层丢去;

链结层:如果使用以太网络时,此时 IP 会依据 CSMA/CD 的标准,包裹到 MAC 讯框中,并给予 MAC 表头,再转成位串后, 利用传输媒体传送到远程主机上。

等到 Yahoo 收到你的包裹后,在依据相反方向拆解开来,然后交给对应的层级进行分析,最后就让 Yahoo 的 WWW 服务器软件得到你所想要的数据,该服务器软件再根据你的要求,取得正确的资料后,又依循上述的流程,一层一层的包装起来, 最后传送到你的手上。

五、链结层相关

1.广域网使用的设备

传统电话拨接:透过 ppp 协议

整合服务数字网络 (Integrated Services Digital Network, ISDN)

非对称数位用路回路 (Asymmetric Digital Subscriber Line, ADSL):透过 pppoe 协定

电缆调制解调器 (Cable modem)

2.局域网络使用的设备-以太网络

以太网络的传输协议:CSMA/CD

以太网络的传输主要就是网络卡对网络卡之间的数据传递。 每张以太网络卡出厂时,就会赋予一个独一无二的卡号,那就是所谓的 MAC (Media Access Control) 。 理论上,网卡卡号是不能修改的,不过某些笔记本电脑的网卡卡号是能够修改的!

以太网络的网卡之间数据是如何传输的呢?

假设有几部主机通过集线器连接起来(集线器是一种网络共享媒体,在单一时间点内, 仅能被一部主机所使用。),A 要发信息给 D 网卡,简单的说, CSMA/CD 搭配上述的环境,它的传输情况需要有以下的流程:

监听媒体使用情况 (Carrier Sense):A 主机要发送网络封包前,需要先对网络媒体进行监听,确认没有人在使用后, 才能够发送出讯框;

多点传输 (Multiple Access):A 主机所送出的数据会被集线器复制一份,然后传送给所有连接到此集线器的主机! 也就是说, A 所送出的数据, B, C, D 三部计算机都能够接收的到!但由于目标是 D 主机,因此 B 与 C 会将此讯框数据丢弃,而 D 则会抓下来处理;

碰撞侦测 (Collision Detection):该讯框数据附有检测能力,若其他主机例如 B 计算机也刚好在同时间发送讯框数据时, 那么 A 与 B 送出的数据碰撞在一块 (出车祸) ,此时这些讯框就是损毁,那么 A 与 B 就会各自随机等待一个时间, 然后重新透过第一步再传送一次该讯框数据。

3.MAC 地址

硬件地址(MAC地址)由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF (16 进位), 这 6 bytes 当中,前 3bytes 为厂商的代码,后 3bytes 则是该厂商自行设定的装置码了。

在 Linux 当中,你可以使用 ifconfig 这个指令来查阅你的网络卡卡号。特别注意,在这个 MAC 的传送中,他仅在局域网络内生效,如果跨过不同的网域 ,那么来源与目的的硬件地址就会跟着改变了。 这是因为变成不同网络卡之间的交流了。

链路层的包最小要 46bytes, 最大为 1500 bytes,没有达到最小则填充0。

4.MTU 最大传输单位

标准以太网络讯框所能传送的数据量最大可以到达 1500 bytes , 这个数值就被我们称为 MTU (Maximum Transmission Unit, 最大传输单位)

5.交换器

交换器 (switch) 等级非常多,我们这里仅探讨支持 OSI 第二层的交换器。交换器与集线器最大的差异,在于交换器内有一个特别的内存, 这个内存可以记录每个 switch port 与其连接的 PC 的 MAC 地址,所以,当来自 switch 两端的 PC 要互传数据时,每个讯框将直接透过交换器的内存数据而传送到目标主机上! 所以 switch 不是共享媒体,且 switch 的每个埠口 (port) 都具有独立的带宽!

六、网络层相关

目前因特网社会的 IP 有两种版本,一种是目前使用最广泛的 IPv4 (Internet Protocol version 4, 因特网协定第四版), 一种则是预期未来会热门的 IPv6 。IPv4 记录的地址由于仅有 32 位,预计在 2020 年前后就会分发完毕,如此一来, 新兴国家或者是新的网络公司,将没有网络可以使用。为了避免这个问题发生,因此就有 IPv6 的产生。 IPv6 的地址可以达到 128 位,可以多出 2 的 96 次方倍的网址数量。虽然 IPv6 具有前瞻性,但目前主流媒体大多还是使用 IPv4 。

1.IP 地址的组成与分级

IP 的表示式:

00000000.00000000.00000000.00000000   ==> 0.0.0.011111111.11111111.11111111.11111111   ==> 255.255.255.255

IP地址主要分为Net_ID(网域号码)与Host_ID(主机号码) 两部份。我们以 192.168.0.0 ~ 192.168.0.255 这个 Class C 的网域当作例子来说明:

11000000.10101000.00000000.0000000011000000.10101000.00000000.11111111|----------Net_ID---------|-host--|

同一个网域的定义是『在同一个物理网段内,主机的 IP 具有相同的 Net_ID ,并且具有独特的 Host_ID』,那么这些 IP 群就是同一个网域内的 IP 网段。

物理网段:所有的主机都是使用同一个网络媒体串在一起, 这个时候这些主机在实体装置上面其实是联机在一起的。

IP 在同一网域的意义:

  • Net_ID 与 Host_ID 的限制:
    在同一个网段内,Net_ID 是不变的,而 Host_ID 则是不可重复,此外,Host_ID 在二进制的表示法当中,不可同时为 0 也不可同时为 1 ,因为全为 0 表示整个网段的地址 (Network IP),而全为 1 则表示为广播的地址 (Broadcast IP)。例如上面的例子当中,192.168.0.0 (Host_ID 全部为 0)以及 192.168.0.255 (Host_ID 全部为 1) 不可用来作为网段内主机的 IP 设定,也就是说,这个网段内可用来设定主机的 IP 是由 192.168.0.1 到 192.168.0.254;

  • 在区网内透过 IP 广播传递数据
    在同物理网段的主机如果设定相同的网域 IP 范围 (不可重复),则这些主机都可以透过 CSMA/CD 的功能直接在区网内用广播进行网络的联机,亦即可以直接网卡对网卡传递数据 (透过 MAC 讯框);

  • 设定不同区网在同物理网段的情况
    在同一个物理网段之内,如果两部主机设定成不同的 IP 网段,则由于广播地址的不同,导致无法透过广播的方式来进行联机。 此时得要透过路由器 (router) 来进行沟通才能将两个网域连结在一起。

IP 的分级:

为了 IP 管理与发放注册的方便性,InterNIC 将整个 IP 网段分为五种等级, 每种等级的范围主要与 IP 那 32 bits 数值的前面几个位有关,基本定义如下:

以二进制说明 Network 第一个数字的定义:Class A : 0xxxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 0      |--net--|---------host------------|Class B : 10xxxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 10      |------net-------|------host------|Class C : 110xxxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 110      |-----------net-----------|-host--|Class D : 1110xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 1110Class E : 1111xxxx.xxxxxxxx.xxxxxxxx.xxxxxxxx  ==> NetI_D 的开头是 1111五种分级在十进制的表示:Class A :   0.xx.xx.xx ~ 127.xx.xx.xxClass B : 128.xx.xx.xx ~ 191.xx.xx.xxClass C : 192.xx.xx.xx ~ 223.xx.xx.xxClass D : 224.xx.xx.xx ~ 239.xx.xx.xxClass E : 240.xx.xx.xx ~ 255.xx.xx.xx

Class D 是用来作为群播 (multicast) 的特殊功能之用 (最常用在大批计算机的网络还原),至于 Class E 则是保留没有使用的网段。因此,能够用来设定在一般系统上面的,就只有 Class A, B, C 三种等级的 IP。

2.IP 的种类与取得方式

在 IPv4 里面有两种 IP 的类别,分别是:

Public IP : 公共 IP ,经由 INTERNIC 所统一规划的 IP,有这种 IP 才可以连上 Internet ;

Private IP : 私有 IP 或保留 IP,不能直接连上 Internet 的 IP , 主要用于局域网络内的主机联机规划。

早在 IPv4 规划的时候就担心 IP 会有不足的情况,而且为了应付某些企业内部的网络设定,于是就有了私有 IP (Private IP) 的产生了。私有 IP 也分别在 A, B, C 三个 Class 当中各保留一段作为私有 IP 网段,那就是:

Class A:10.0.0.0    - 10.255.255.255Class B:172.16.0.0  - 172.31.255.255Class C:192.168.0.0 - 192.168.255.255

这三个 IP 网段就只做为内部私有网域的 IP 沟通之用,所以并不能直接作为 Internet 上面的连接之用。比如我们在校园网中的ip其实就是私有ip~(连接外网可通过NAT (Network Address Transfer) 服务)。

特殊的 loopback IP 网段:

lo 网域:当初被用来作为测试操作系统内部循环所用的一个网域,同时也能够提供给系统内部原本就需要使用网络接口的服务 (daemon) 所使用。这个网段在 127.0.0.0/8 这个 Class A,而且默认的主机 (localhost) 的 IP 是 127.0.0.1 ,所以我们在测试我们自己写的网站的时候,常常使用localhost或者127.0.0.1来进行访问,而不需要联网。

3.IP 的取得方式

  • 直接手动设定(static)

  • 透过拨接取得

  • 自动取得网络参数 (DHCP)

4.Netmask, 或称为 Subnet mask (子网掩码)

Netmask 是用来定义出网域的最重要的一个参数,可用来划分子网。

以 192.168.0.0 ~ 192.168.0.255 这个网域为例,如下所示,这个 IP 网段可以分为 Net_ID 与 Host_ID,既然 Net_ID 是不可变的,那就假设他所占据的 bits 已经被用光了 (全部为 1),而 Host_ID 是可变的,就将他想成是保留着 (全部为 0),所以, Netmask 的表示就成为:

192.168.0.0~192.168.0.255 这个 C Class 的 Netmask 说明第一个 IP: 11000000.10101000.00000000.00000000最后一个 : 11000000.10101000.00000000.11111111        |----------Net_ID---------|-host--|Netmask  : 11111111.11111111.11111111.00000000  <== Netmask 二进制     :   255   .  255   .  255   .   0      <== Netmask 十进制特别注意,netmask 也是 32 位,在数值上,位于 Net_ID 的为 1 而 Host_ID 为 0将他转成十进制的话,就成为『255.255.255.0』。照这样的记忆方法,那么 A, B, C Class 的 Netmask 表示就成为这样:

所以说, 192.168.0.0 ~ 192.168.0.255 这个 Class C 的网域中,他的 Netmask 就是 255.255.255.0 !在 192.168.0.0 ~ 192.168.0.255 这个 IP 网段里面的相关网络参数就有:

Netmask: 255.255.255.0 <==网域定义中,最重要的参数
Network: 192.168.0.0 <==第一个 IP
Broadcast: 192.168.0.255 <==最后一个 IP
可用以设定成为主机的 IP 数:
192.168.0.1 ~ 192.168.0.254

子网切分:

原本的 C Class 的 Net_ID 与 Host_ID 的分别11000000.10101000.00000000.00000000      Network:   192.168.0.011000000.10101000.00000000.11111111      Broadcast: 192.168.0.255|----------Net_ID---------|-host--|切成两个子网之后的 Net_ID 与 Host_ID 为何?11000000.10101000.00000000.0 0000000  多了一个 Net_ID 了, 为 0 (第一个子网)11000000.10101000.00000000.1 0000000  多了一个 Net_ID 了, 为 1 (第二个子网)|----------Net_ID-----------|-host--|第一个子网Network:   11000000.10101000.00000000.0 0000000   192.168.0.0Broadcast: 11000000.10101000.00000000.0 1111111   192.168.0.127       |----------Net_ID-----------|-host-|Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128第二个子网Network:   11000000.10101000.00000000.1 0000000   192.168.0.128Broadcast: 11000000.10101000.00000000.1 1111111   192.168.0.255       |----------Net_ID-----------|-host-|Netmask:   11111111.11111111.11111111.1 0000000   255.255.255.128

我们常常会以 Network 以及 Netmask 来表示一个网域,例如这样的写法:

Network/Netmask192.168.0.0/255.255.255.0192.168.0.0/24    <==因为 Net_ID 共有 24 个 bits

5.路由

在同一个区网里面,可以透过 IP 广播的方式来达到资料传递的目的。但如果是非区网内的数据呢? 这时就得要透过那个所谓的邮局 (路由器) 的帮忙了。

每一部主机都有自己的路由表,观察路由表的指令为route:

[root@www ~]# route [-n]选项与参数:-n : 将主机名以 IP 的方式显示[root@www ~]# routeKernel IP routing tableDestination     Gateway        Genmask         Flags Metric Ref  Use Iface192.168.0.0     *               255.255.255.0   U     0      0      0 eth0127.0.0.0       *               255.0.0.0       U     0      0      0 lodefault         192.168.0.254   0.0.0.0         UG    0      0      0 eth0[root@www ~]# route -nKernel IP routing tableDestination     Gateway         Genmask         Flags Metric Ref  Use Iface192.168.0.0     0.0.0.0         255.255.255.0   U     0      0      0 eth0127.0.0.0       0.0.0.0         255.0.0.0       U     0      0      0 lo0.0.0.0         192.168.0.254   0.0.0.0         UG    0      0      0 eth0# 上面输出的数据共有八个字段,你需要注意的有几个地方:# Destination :其实就是 Network 的意思;# Gateway     :就是该接口的 Gateway 那个 IP !若为 0.0.0.0 表示不需要额外的 IP;# Genmask     :就是 Netmask !与 Destination 组合成为一部主机或网域;# Flags       :共有多个旗标可以来表示该网域或主机代表的意义:#               U:代表该路由可用;#               G:代表该网域需要经由 Gateway 来帮忙转递;#               H:代表该行路由为一部主机,而非一整个网域;# Iface       :就是 Interface (接口) 的意思。

万一我们要传送的封包目的地 IP 不在路由规则里面,那么就会将封包传送到『default』所在的那个路由规则去,也就是 192.168.0.254 那个 Gateway !几乎每一部主机都会有一个 default gateway 来帮他们负责所有非网域内的封包转递。

6.IP 与 MAC:链结层的 ARP 与 RARP 协议

我们网络层寻找主机是用IP地址的,但事实上用在传递数据的是以太网络!以太网络主要是用网卡卡号 (MAC) 的,所以这两者需要关联起来。
于是有以下两个协议:
ARP (Address Resolution Protocol, 网络地址解析) 协议;
RARP (Revers ARP, 反向网络地址解析)。

当我们想要了解某个 IP 是设定于哪张以太网络卡上时,我们的主机会对整个区网发送出 ARP 封包, 对方收到 ARP 封包后就会回传他的 MAC 给我们,我们的主机就会知道对方所在的网卡,那接下来就能够开始传递数据啰。 如果每次要传送都得要重新来一遍这个 ARP 协定那不是很烦?因此,当使用 ARP 协议取得目标 IP 与他网卡卡号后, 就会将该笔记录写入我们主机的 ARP table 中 (内存内的数据) 记录 20 分钟。

取得自己本机的网卡卡号 (MAC) :

[root@www ~]# ifconfig eth0eth0      Link encap:Ethernet  HWaddr 00:01:03:43:E5:34      inet addr:192.168.1.100   Bcast:192.168.1.255   Mask:255.255.255.0      inet6 addr: fe80::201:3ff:fe43:e534/64 Scope:Link      UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1.....

取得本机的 ARP 表格内的 IP/MAC 对应数据:

[root@www ~]# arp -[nd] hostname[root@www ~]# arp -s hostname(IP) Hardware_address选项与参数:-n :将主机名以 IP 的型态显示-d :将 hostname 的 hardware_address 由 ARP table 当中删除掉-s :设定某个 IP 或 hostname 的 MAC 到 ARP table 当中 范例一:列出目前主机上面记载的 IP/MAC 对应的 ARP 表格[root@www ~]# arp -nAddress            HWtype  HWaddress           Flags Mask    Iface192.168.1.100      ether   00:01:03:01:02:03      C          eth0192.168.1.240      ether   00:01:03:01:DE:0A      C          eth0192.168.1.254      ether   00:01:03:55:74:AB      C          eth0范例二:将 192.168.1.100 那部主机的网卡卡号直接写入 ARP 表格中[root@www ~]# arp -s 192.168.1.100  01:00:2D:23:A1:0E# 这个指令的目的在建立静态 ARP 

ARP table 是动态的信息 (一般保留 20 分钟),他会随时随着你的网域里面计算机的 IP 更动而变化,所以,即使你常常更动你的计算机 IP,不要担心,因为 ARP table 会自动的重新对应 IP 与 MAC 的表格内容!

7.ICMP 协定

ICMP 的全名是『 Internet Control Message Protocol, 因特网讯息控制协议 』。 基本上,ICMP 是一个错误侦测与回报的机制。

ICMP 也是网络层的重要封包之一,不过,这个封包并非独立存在,而是纳入到 IP 的封包中!也就是说, ICMP 同样是透过 IP 封包来进行数据传送的。

ICMP 有相当多的类别可以侦测与回报,底下是比较常见的几个 ICMP 的类别 (Type):

类别代号 类别名称与意义 0 Echo Reply (代表一个响应信息) 3 Destination Unreachable (表示目的地不可到达) 4 Source Quench (当 router 的负载过高时,此类别码可用来让发送端停止发送讯息) 5 Redirect (用来重新导向路由路径的信息) 8 Echo Request (请求响应消息) 11 Time Exceeded for a Datagram (当数据封包在某些路由传送的现象中造成逾时状态,此类别码可告知来源该封包已被忽略的讯息) 12 Parameter Problem on a Datagram (当一个 ICMP 封包重复之前的错误时,会回复来源主机关于参数错误的讯息) 13 Timestamp Request (要求对方送出时间讯息,用以计算路由时间的差异,以满足同步性协议的要求) 14 Timestamp Reply (此讯息纯粹是响应 Timestamp Request 用的) 15 Information Request (在 RARP 协议应用之前,此讯息是用来在开机时取得网络信息) 16 Information Reply (用以响应 Infromation Request 讯息) 17 Address Mask Request (这讯息是用来查询子网 mask 设定信息) 18 Address Mask Reply (响应子网 mask 查询讯息的)

那么我们是如何利用 ICMP 来检验网络的状态呢?最简单的指令就是 ping 与 traceroute 了, 这两个指令可以透过 ICMP 封包的辅助来确认与回报网络主机的状态。

七.传输层相关

1.TCP/IP 的传输层相关封包与数据

网络层的 IP 封包只负责将数据送到正确的目标主机去,但这个封包到底会不会被接受,或者是有没有被正确的接收, 那就不是 IP 的任务了!而是传送层的任务之一。传送层有两个重点, 一个是面向连接的 TCP 封包,一个是非连接的 UDP 封包。

TCP封包是可靠的,它有一系列的机制来保证一个包的正确传输。

UDP封包是不可靠的,它帮忙传送,但可能会把包给弄丢了。

2.可靠联机的 TCP 协议:

TCP封包表头内容:

  • Source Port & Destination Port (来源端口 & 目标端口)
    什么是端口(port)?我们知道 IP 封包的传送主要是藉由 IP 地址连接两端, 但是这个连接仅仅是主机之间的,送到主机之后,要给哪个应用程序?这就要由端口来处理了。打个比方,IP就是家庭地址,然后你家每个人都有一个专属信箱,那么信箱就是类似于端口了!

  • Sequence Number (封包序号)
    由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来。

  • Acknowledge Number (回应序号)
    为了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。

  • Data Offset (偏移量)
    用来说明整个封包区段的起始位置。

  • Code (Control Flag, 控制标志码)
    当我们在进行网络联机的时候,必须要说明这个联机的状态,好让接收端了解这个封包的主要动作。这个字段共有 6 个 bits ,分别代表 6 个句柄,若为 1 则为启动。分别说明如下:

URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理。

ACK(Acknowledge):若为 1 代表这个封包为响应封包, 则与上面提到的 Acknowledge Number 有关。

PSH(Push function):若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。

RST(Reset):如果 RST 为 1 的时候,表示联机会被马上结束,而无需等待终止确认手续。这也就是说, 这是个强制结束的联机,且发送端已断线。

SYN(Synchronous):若为 1,表示发送端希望双方建立同步处理, 也就是要求建立联机。通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。

FIN(Finish):若为 1 ,表示传送结束,所以通知对方数据传毕, 是否同意断线,只是发送者还在等待对方的响应而已。

  • Window (滑动窗口)
    主要是用来控制封包的流量的,可以告知对方目前本身有的缓冲器容量(Receive Buffer) 还可以接收封包。当 Window=0 时,代表缓冲器已经额满,所以应该要暂停传输数据。 Window 的单位是 byte。

  • Checksum(检验和)
    当数据要由发送端送出前,会进行一个检验的动作,并将该动作的检验值标注在这个字段上; 而接收者收到这个封包之后,会再次的对封包进行验证,并且比对原发送的 Checksum 值是否相符,如果相符就接受,若不符就会假设该封包已经损毁,进而要求对方重新发送此封包!

  • Urgent Pointer(紧急资料)
    这个字段是在 Code 字段内的 URG = 1 时才会产生作用。可以告知紧急数据所在的位置。

  • Options(任意资料)
    目前此字段仅应用于表示接收端可以接收的最大数据区段容量,若此字段不使用, 表示可以使用任意资料区段的大小。这个字段较少使用。

  • Padding(补足字段)
    如同 IP 封包需要有固定的 32bits 表头一样, Options 由于字段为非固定, 所以也需要 Padding 字段来加以补齐才行。同样也是 32 bits 的整数。

特权端口 (Privileged Ports)

常见的 port number 与网络服务的对应:

端口 服务名称与内容 20 FTP-data,文件传输协议所使用的主动数据传输端口 21 FTP,文件传输协议的命令通道 22 SSH,较为安全的远程联机服务器 23 Telnet,早期的远程联机服务器软件 25 SMTP,简单邮件传递协议,用在作为 mail server 的埠口 53 DNS,用在作为名称解析的领域名服务器 80 WWW,这个重要吧!就是全球信息网服务器 110 POP3,邮件收信协议,办公室用的收信软件都是透过他 443 https,有安全加密机制的WWW服务器

小于 1024 以下的埠口要启动时, 启动者的身份必须要是 root 才行,所以才叫做特权端口。
另外,由于 client 端都是主动向 server 端要数据, 所以 client 端的 port number 就随机取一个大于 1024 以上且没有在用的 port number。

Socket Pair:

来源 IP + 来源端口 (Source Address + Source Port)目的 IP + 目的端口 (Destination Address + Destination Port)

TCP 的三次握手,四次挥手

三次握手(Three-way Handshake),是指建立一个TCP连接时,需要客户端和服务器总共发送3个包。

第一次握手:
客户端发送一个TCP的SYN标志位置1的包指明客户打算连接的服务器的端口,以及初始序号X,保存在包头的序列号(Sequence Number)字段里。

第二次握手:
服务器发回确认包(ACK)应答。即SYN标志位和ACK标志位均为1同时,将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即X+1。

第三次握手:
客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1。

这里写图片描述

TCP的连接的拆除需要发送四个包,因此称为四次挥手(four-way handshake)。客户端或服务器均可主动发起挥手动作,在socket编程中,任何一方执行close()操作即可产生挥手操作。

(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送,此时A不再发送数据,但是B仍能接收数据。

(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。和SYN一样,一个FIN将占用一个序号。

(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A。 此时B不再接收数据。

(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1。

这里写图片描述

3.非连接导向的 UDP 协议

UDP 的全名是:『User Datagram Protocol, 用户数据流协议』,UDP 与 TCP 不一样, UDP 不提供可靠的传输模式,因为他不是面向连接的一个机制,这是因为在 UDP 的传送过程中,接受端在接受到封包之后,不会回复响应封包 (ACK) 给发送端,所以封包并没有像 TCP 封包有较为严密的检查机制。

4.基本的防火墙:

以 OSI 七层协议来说,每一层可以抵挡的数据有:

第二层:可以针对来源与目标的 MAC 进行抵挡;第三层:主要针对来源与目标的 IP ,以及 ICMP 的类别 (type) 进行抵挡;第四层:针对 TCP/UDP 的端口进行抵挡,也可以针对 TCP 的状态 (code) 来处理。

八.DNS域名解析

我们访问百度搜索的服务器时,为什么只需要输入www.baidu.com,而不用知道它的ip呢?因为主机名和ip是对应的!这个主机名 (Hostname) 对应 IP 的系统,就是鼎鼎有名的 Domain Name System (DNS) 。

那么我们怎么知道这个对应关系?我们需要向DNS服务器进行查询,在 Linux 里面,DNS 主机 IP 的设定就是在 /etc/resolv.conf 这个档案里面,我们用主机名访问一个网站时,先向DNS来查询它对应的ip~

九.一组可以连上 Internet 的必要网络参数

我们知道一部主机要能够使用网络,必须要有 IP ,而 IP 的设定当中,就必须要有 IP, Network, Broadcast, Netmask 等参数,此外,还需要考虑到路由里面的 Default Gateway 才能够正确的将非同网域的封包给他传送出去。 另外,考虑到主机名与 IP 的对应,所以你还必须要给予系统一个 DNS 服务器的 IP 才行~ 所以说,一组合理的网络设定需要:

IPNetmaskNetworkBroadcastGatewayDNS

其中,由于 Network 与 Broadcast 可以经由 IP/Netmask 的计算而得到,因此需要设定你 PC 端的网络参数, 主要就是 IP, Netmask, Default Gateway, DNS 这四个!

十.重点回顾:

虽然目前的网络媒体多以以太网络为标准,但网络媒体不只有以太网络而已;

Internet 主要是由 Internet Network Information Center (INTERNIC) 所维护;

以太网络的 RJ-45 网络线,由于 568A/568B 接头的不同而又分为并行线与跳线;

以太网络上最重要的传输数据为 Carrier Sense Multiple Access with Collision Detect (CSMA/CD) 技术, 至于传输过程当中,最重要的 MAC 讯框内以硬件地址 (hardware address) 数据最为重要;

透过八蕊的网络线 (Cat 5 以上等级),现在的以太网络可以支持全双工模式;

OSI 七层协议为一个网络模型 (model) ,并非硬性规定。这七层协议可以协助软硬件开发有一个基本的准则, 且每一分层各自独立,方便使用者开发;

现今的网络基础是架构在 TCP/IP 这个通讯协议上面;

数据链结层里重要的信息为 MAC (Media Access Control),亦可称为硬件地址,而 ARP Table 可以用来对应 MAC 与软件地址 ( IP ) ;

在网络媒体方面, Hub 为共享媒体,因此可能会有封包碰撞的问题,至于 Switch 由于加入了 switch port 与 MAC 的对应,因此已经克服了封包碰撞的问题,也就是说,Switch 并不是共享媒体;

IP 为 32 bits 所组成的,为了适应人类的记忆,因此转成四组十进制的数据;

IP 主要分为 Net ID 与 Host ID 两部份,加上 Netmask 这个参数后,可以设定『网域』的概念;

根据 IP 网域的大小,可将 IP 的等级分为 A, B, C 三种常见的等级;

Loopback 这个网段在 127.0.0.0/8 ,用在每个操作系统内部的循环测试中。

网域可继续分成更小的网域 (subnetwork),主要是透过将 Host_ID 借位成为 Net_ID 的技术;

IP 只有两种,就是 Public IP 与 Private IP ,中文应该翻译为 公共 IP 与 私有(或保留) IP,私有 IP 与私有路由不可以直接连接到 Internet 上;

每一部主机都有自己的路由表,这个路由表规定了封包的传送途径,在路由表当中,最重要者为默认的通讯闸 ( Gateway/Router );

TCP 协议的表头数据当中,那个 Code (control flags) 所带有的 ACK, SYN, FIN 等为常见的旗标, 可以控制封包的联机成功与否;

TCP 与 IP 的 IP address/Port 可以组成一对 socket pair;

网络联机都是双向的,在 TCP 的联机当中,需要进行客户端与服务器端两次的 SYN/ACK 封包发送与确认, 所以一次 TCP 联机确认时,需要进行三向交握的流程;

UDP 通讯协议由于不需要联机确认,因此适用于快速实时传输且不需要数据可靠的软件中,例如实时通讯;

ICMP 封包最主要的功能在回报网络的侦测状况,故不要使用防火墙将他完全挡掉;

一般来说,一部主机里面的网络参数应该具备有:IP, Netmask, Network, Broadcast, Gateway, DNS 等;

在主机的 port 当中,只有 root 可以启用小于 1024 以下的 port ;

DNS 主要的目的在于进行 Hostname 对应 IP 的功能。

0 0
原创粉丝点击