Linux 网络基础知识

网络的基础知识包括:

TCP/IP , Network IP, Netmask IP , Broadcast IP,Gateway, DNS IP等等

OSI的网络七层协议 从应用程序开始,依次是:

应用层: 定义应用程序如何进入此层的沟通接口

表现层: 将来自本地端应用程序的数据格式转换成网络的标准格式,也就是网络服务和程序之间的数据格式的转换,包括数据的加密

会谈层: 定义两个地址之间的联机信道之连接与挂断,确定网络服务建立联机的确认

传送层: 定义发送端与接口端的联机技术(TCP,UDP)同时包括该技术的封包格式,数据封包的传送,流程控制,传输过程的侦测检查与复原重新传送,以确保各个封包可以

正确的到达目的端

网络层: 也就是IP的这层,同时定义出计算机之间的联机建立,终止,维持,数据封包的传输路径选择,这个层除了IP之外,=就是封包能否到达目的地的路由概念

数据连结层: 这层会分为两个子层在进行数据的转换动作,在偏硬件媒体部分,主要负责MAC的处理,偏软件的部分则是由逻辑链接层所控制

主要在多任务处理来自上层的封包数据并转成MAC的格式,负责的工作包括讯息转换,流量控制,失误问题的处理

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

最后链接实体媒体并传送/接收位串

由于OSI七层协议的架构太过严谨,所以目前用的是由APPANET发展而来的TCP/IP,他将它简化为四层,在结构上没有那么严谨,程序撰写会比较容易

些,TCP/IP的四层是:

应用层:其实就是ISO中的应用层,表现层,会谈层 HTTP FTP SMTP POP3 NFS SSH

传送层: ISO中的传送层 TCP UDP

网络层: ISO中的网络层 IP ICMP

资料链接层实体层:ISO中的数据连接层,物理层 LAN:Ethernet WAN:Modem,ISDN,ATM,Serial

TCP/IP 整个联机的状态:

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

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

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

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

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

远程主机上

当接收端接收到这个包裹后,再依据相反方向拆解开来,然后交给对应的层级进行分析,将取得正确的资料后,再次循环

上述的流程,一层一层的包装起来,最后传送到你的手上(如果被传输的数据太大时,我们的分层的包装中,就得要将数据先拆开放到不同的包裹中,再给包裹一个序号

好让目的端的主机能够籍由这些序号再重新将数据整合回来)

其实TCP/IP中的应用层被视为使用者层,而底下的三层才是我们主要谈及的网络基础

以太网的网卡之间的传输协议是依据CSMA/CD的标准

例如:各个主机都是联机到集线器,然后透过集线器的功能向所有主机发起联机的

集线器是一种网络共享媒体,简单的说,CSMA/CD搭配集线器传输流程如下:

1.监听集线器媒体的使用情况,在发送网络封包前,需要先对网络媒体进行监听,确定没人使用后,才能够发送出讯框

2.多点传输,一台主机送出的数据被集线器复制一份,然后传送给所有链接到此集线器的主机,也就是,A所送出的数据

B,C,D三部计算机都能够接受到,但由于目标是D主机,因此B与C会将此讯框数据丢弃,但D则会抓下来处理

3.该讯框数据附有检测能力,若其他主机B计算机也在同时发送讯框,那么A和B送出的数据碰撞在一起,这时这些讯框就是损毁

那么A与B就会各自随机等待一个时间,然后重新透过这一步再传送一次该讯框数据

这种机制产生的影响是:

1.只要有一部主机发送讯框,所有的计算机都会接收到,因此集线器会复制一份该数据给所有计算机,虽然只有一部计算机对外联机,但是在集线器上的所有计算机灯号就都会

闪个不停

2.我的计算机没有被入侵,为何我的数据会被隔壁的计算机窃取,这是因为只要在B计算机上面安装一套监听软件,这套软件将原本丢弃的讯框数据捉下来

分析,加以重组,就能知道原本A所送出的讯息,这也就是建议重要数据在因特网上面得要加密后再传输

3.由于标准的讯框数据在网络卡与其他以太网媒体一次只能传输1500bytes,因此我们100MB档案会被拆成多个小数据包,然后一个一个的传送,每个数据包传送前

都要经过CSMA/CD的机制,所以,这个集线器的使用权是被大家抢着用的,即使只有一部主机在使用网络媒体时,那么这部主机在发送每个封包间,

也都是需要等待一段时间的检测的

4. 讯框大小的改变可以影响到数据包的数量,但是以太网络标准讯框确实定义在1500bytes,但近来的超高速以太网络媒体有支持Jumbo frame(巨型讯框)的话

那么就能够将讯框大小改为9000bytes,但是不建议随便修改的

MAC的封装格式

通过CSMA/CD传送出去的讯框数据,其实就是MAC,MAC其实就是我们上面一直提到的讯框,这个讯框上面有两个重要的数据

就是目标与来源的网卡卡号,因此我们又简称网卡卡号为MAC而已.

MAC讯框的内容:

前导码,目的地址,来源地址,资料栏位通讯,主要资料,检查码

目的地址和来源地址就是网卡卡号,每张网卡都有独一无二的卡号,那个卡号的目的就在这个讯框的表头数据使用到的

硬件地址最小由 00:00:00:00:00:00 到 FF:FF:FF:FF:FF:FF ,这个6bytes中,前三个为厂商的代码,后3bytes则是该厂商自行设定的装置码

MAC的传送中,他仅在局域网络内生效,如果跨过不同的网域,那么来源与目的的硬件地址就会跟者改变了,这是

因为变成不同网域之间的交流,所以卡号当然就不同了

1.先由MAC-1传送到MAC-2,此时来源MAC-1 而目的地是MAC-2

2 A发送给B,但B发现目标其实是C,而为了与C计算机沟通,所以他会将讯框的来源MAC改为MAC-3,而目的改为MAC-4

如此就能直接传送到C计算机上了

也就是只要透过B(就是路由器)才将封包送到另一个网域去的时候,那么讯框内的硬件地址就会被改变,然后才能够在同一个网域里面直接进行讯框的流通

讯框的最大为1500bytes,而最小数据为46bytes,这是由于CSMA/CD机制所算出来的,在这个机制上面可算出若要侦测碰撞,

则讯框总数据最小64bytes,那再扣除目的地址,来源地址,检查码(前导码不算)后,就可得到数据最小得要有46bytes了,也就是说

如果你要传输的数据小于46bytes,那我们的系统会主动的填上一些填充码,以补齐至少46bytes的容量才行

以太网讯框所能传送的数据量最大可以到达1500bytes,这个数值就被我们称为MTU,而IP封包最大可以到65535bytes,比MTU还要大,既然礼物(IP)都比盒子(MAC)大,

那怎么可以放的进,所以,IP封包是可以进行拆解的,然后才能放到MAC当中的,等到数据到达目的地,再由目的地的主机将他

组装回来就是了,所以,如果MTU能够大一些的话,那么IP封包的拆解情况会降低,封包与封包之间的等待时间也会减少,就能够增加网络带宽的使用

为了这个目的,Gigbit的以太网络媒体才有支持Jumbo frame的,这个Jumbo frame一般都定义到9000bytes,我们的MTU能不能

定义为9000bytes,不行是因为你无法确认网络上的媒体都是支持那么大的MTU,所以9000bytes封包通过一个不支持Jumbo frame的网络媒体时

好一点的网络媒体(例如swtich/router)会主动的帮你重组而进行传送,差一点的可能直接将这个封包给丢弃了,所以需要确定所有要经过的网络媒体后,才能

再来决定你的MTU设定才行,就因为这样,所以才不建议修改标准以太网络的MTU

交换机的相关机制

集线器这个网络共享媒体可能会发生碰撞的问题,这个因为CSMA/CD的缘故,那就可以使用非共享媒体的交换机即可

交换机和集线器最大的差别,在于交换机内有一个特别的内存,这个内存可以记录每个switch port 与其链接的PC的MAC地址,所以

当来自switch两端的PC要互传数据时,每个讯框将直接透过交换机的内存数据而传送到目标主机上,所以switch不是共享媒体,且switch的每个端口都具有独立

的带宽,举例:10/100 的 Hub 上链接 5 部主机,那么整个 10/100Mbps 是分给这五部主机的,而五部主机总共只能使用10/100Mbps,而如果是switch的话

由于每个port都具有10/100Mbps 的带宽,所以就看你当时的传输行为是如何,在某种情况下,每个联机都是10/100Mbps

switch已经克服了封包碰撞的问题,因为他有个switch port对应MAC的相关功能,所以switch并非共享媒体,现在的switch规格很多,在选购的时候

千万要记得选购可以支持全双工/半双工,以及支持Jumbo frame的为佳

IP封包

IP封装的表头资料:占用的位数为32bits

Version(版本),目前惯用的是IPV4

IHL(IP表头的长度),告知这个IP封包的表头长度,使用的单位为字组(word),一个字组为4bytes大小

Type of Service(服务类型)主要分为:PPP表示此IP封包的优先度,D若为0表示一般延迟,T若为0表示一般传输量,R若为0表示一般可靠度,1表示高的意思i

UU保留尚未使用

Total Length(总长度) 指IP封包的总容量,包括表头与内容部分,最大可达65535bytes

identification(辨识码)指IP封包必须要放在MAC袋子当中,如果IP袋子太大的话,则要将IP重组成较小的袋子然后放进MAC当中

而当IP被重组时,每个来自同一个IP的小袋子就要有这个标识符以告知接收端这些小袋子其实是同一个IP封包才行,这个信息用来记录每个小IP分段是否来自同一个IP资料

Flags(特殊旗标) D若为0表示可以分段,1表示不可分段,M若为0表示此IP为最后分段,若未1表示非最后分段

Fragment Offset(分段偏移) 表示目前的这个IP分段在原始的IP封包中所占据的位置,这样才能够将小IP分段在接收端重新组合起来

Time To Live(TTL,存活时间) 表示这个IP封包的存活时间,范围为0-255,当这个IP封包通过一个路由器时,TTL就会减一,当TTL

为0,这个封包就会被直接丢弃了,不过要让IP封包通过255个路由器,还是挺难的

Protocol Number(协定代码) 来自传输层与网络层本身的其他数据都是放在IP封包当中的,我们可以在IP表头记载这个IP封包内的数据是啥

Header Checksum(表头检查码) 用来检查这个IP表头的错误检查之用

Source Address 来源的IP地址

Destination Address 目标的IP地址

Options (其他参数) 提供包括安全处理机制,路由记录,时间戳,严格与宽松之来源路由

Padding(补齐项目)若Options的内容数据不足32bits时,则由padding主动补齐

IP地址的组成与分级

IP其实是一种网络封包,而这个封包的表头最重要的就是那个32位的来源与目标地址,那个IP其实就类似所谓的门牌号码

IP最小可以由0.0.0.0 一直到 255.255.255.255,其实32位数字,还可以分为两个部分,主要分为Net_ID(网域号码)与Host_ID(主机号码)两部分

Net_ID与Host_ID的限制

同一个网段内,Net_ID是不变的,而Host_ID则是不可重复,此外,Host_ID在二进制的表示法当中,不可同时为0 也不可同时为1

全为0表示整个网段的地址(Network IP),而全为1表示为广播地址(Broadcast IP),可用的IP为192.168.0.1 到 192.168.0.254

在同区域内透过IP广播传递数据

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

网卡对网卡传递数据(透过MAC讯框),而不必经由Router(路由器)来进行封包的传递

设定在不同区网在同物理区段的情况

在同一个物理区段之内,如果两部主机设定成不同的IP网段,则由于广播地址的不同,导致无法透过广播的方式来进行联机,此时就要透过路由器

来进行沟通才能将两个网域链接在一起

网域的大小

Host_ID所占用的位越大,亦即Host_ID数量越多时,表示同一个网域内可用以设定主机的IP数量越多

总结,同网段表示可以直接使用网卡对网卡(透过MAC讯框),不同网段表示需要交给本网段中的路由器(邮递员)来帮你把信息给传出去

你只要知道巷子内的那件邮局在哪里即可

IP分级 InterNIC将整个IP网段分为五种等级,

其中只有 0.xx.xx.xx  ~  127.xx.xx.xx,128.xx.xx.xx ~ 191.xx.xx.xx,192.xx.xx.xx ~ 223.xx.xx.xx 这三个等级的IP较常使用

IP的种类与取得方式:

IPV4里面就只有两种IP的类型,分别是:

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

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

私有IP(Private IP)也分为A,B,C三个Class当中各保留一段作为私有IP网段,那就是:

Class A:10.0.0.0 - 10.255.255.255

Class B:172.16.0.0 - 172.31.255.255

Class C:192.168.0.0 - 192.168.255.255

这三个网段不能直接作为Internet上面的连接之用,还包括底下的几个限制:

私有IP的路由信息不能对外散播(只能存在内部网络)

使用私有IP作为来源与目的地址的封包,不能透过Internet来转送

私有IP的参考记录(如DNS),只能限于内部网络使用

如果想要让私有IP送上Internet,可以设定一个简单的防火墙加上NAT(Network Address Transfer) 服务,你就可以透过IP伪装来使你的私有IP的计算机也可已连上Internet

特殊的loopback IP网段

内部循环网络,如果在没有安装网络卡在你的机器上面,但是你又希望可以测试一下在你的机器上面设定的服务器环境到底可不可以顺利运作

那就要用到这个内部循环网络,这个网段在127.0.0.0/8 这个 Class A,而且默认的主机的IP是127.0.0.1(localhost),所以你启动了你的WWW

服务器,接着执行http://localhost 就可以直接看到你的主页面了,而且不需要安装网络卡,

IP的取得方式:

1. static 手动设定

2. 透过拨接取得,ADSL拨接后取得固定IP的方式

3.自动获取网络参数(DHCP)

Netmask , 子网与CIDR

不能将一个Class A仅划定为一个区网,例如我们只是要使用120.114.xxx.xxx 而已,并没有取得整个Class A,因此需要将Class A 的网段变小,换句话说,如何将网域切的更细

这样就可以分出更多的网域了

可以看到Class C的网域号码占了24位,其实我们还可以将这样的网域切的更细,就是让第一个Host_ID拿出来作为Net_ID,此时Net_ID就有25bits,至于Host_ID减少为7bits

这样的情况下,原来的一个Class C的网域就可以被切分为两个子域,而每个子域就有『 256/2 - 2 = 126 』个可用的 IP 了,

这样一来,就能够将原本的一个网域切为两个较细小的网域,方便分门别类的设计

Nwtmask或称为Subnet mask (子网掩码)

其实就是用Netmask(子网掩码)来达成子网的切分

例如 :以 192.168.0.0 ~ 192.168.0.255 这个网域为范例

Netmask的表示就成为:

第一个 IP: 11000000.10101000.00000000.00000000

最后一个 : 11000000.10101000.00000000.11111111

Netmask : 11111111.11111111.11111111.00000000   <== Netmask 二进制

:  255. 255. 255.0 <== Netmask 十进制

在数值上,位于Net_ID的为1 而Host_ID为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

子网切分

以192.168.0.0 ~192.168.0.255 这个情况为例,如何再细分为两个子域:Host_ID可以拿来作为Net_ID,就么Net_ID使用了25bits时,就会如下所示:

切成两个子网之后的 Net_ID 与 Host_ID

11000000.10101000.00000000.0 0000000 多了一个 Net_ID 了, 为 0 (第一个子网)

11000000.10101000.00000000.1 0000000 多了一个 Net_ID 了, 为 1 (第二个子网)

第一个子网

Network : 11000000.10101000.00000000.0 0000000   192.168.0.0

Broadcast:  11000000.10101000.00000000.0 1111111  192.168.0.127

Netmask:    11111111.11111111.11111111.1 0000000        255.255.255.128

第二个子网

Network:    11000000.10101000.00000000.1 0000000   192.168.0.128

Broadcast: 11000000.10101000.00000000.1 1111111    192.168.0.255

Netmask:   11111111.11111111.11111111.1 0000000         255.255.255.128

所以说,当再细分下去时,就会得到两个子域,这两个子域还可以再细分下去(例如 Net_ID用掉26bits)

再例如192.168.0.0 ~ 192.168.0.255 这个网段来说,要是给予Net_ID是26位时,可以分为几个网段,因为26-24=2,所以总共共享了两位

因此有2的2次方,得到4个网段,再将256个IP平均分配到四个网段去,那我们就可以知道四个网段分别是:

192.168.0.0~192.168.0.63

192.168.0.64~192.168.0.127

192.168.0.128~192.168.0.191

192.168.0.192~192.168.0.255

一般来说,知道了Network以及Netmask之后,就可以定义出该网域的所有IP了,因为由Netmask就可以推算出

Broadcast的IP,因此我们常常会以Network以及Netmask来表示一个网域

Network/Netmask

192.168.0.0/255.255.255.0 或者 192.168.0.0/24 表示Net_ID共有24bits

之前四个网段的写法是

192.168.0.0/26   192.168.0.64/26   192.168.0.128/26  192.168.0.192/26

有时也可以将多个网域写成一个,例如:192.168.0.0/24写成192.168.0.0/16 这样就被称为无等级网域间路由(CIDR)

路由概念:同一个网域里面,可以通过IP广播的方式来达到资料传递的目的,但是在不同网域的数据,这时就要透过那个所谓

的邮局(路由器)的帮忙,这时网络层非常重要的概念

路由器来进行数据传递,他的IP封包该如何传输?

可以通过Net_ID来发现两台主机是不是在同一个网段内,其中主机想要传送数据时,主要是参考【路由表(route table)】,每部主机都有自己的路由表

1.查询IP封包的目标IP地址

当有IP封包需要传送时,主机会查阅IP封包表头的目标IP地址

2.查询是否位于本机所在的网域之路由设定

分析本机的路由表,当发现目标IP与本机IP的Net_ID相同时(同一网域),直接透过区网功能,将数据直接传送到目标主机

3.查询预设路由

查询路由表,看到不在一个网段中的话,就直接将该IP封包送到预设路由器(default gateway)上头

4送出封包至gateway后,不理会封包流向:

当IP送到路由后,就不再理会接下来的工作,而路由收到这个封包后,会依据上述的流程,也分析自己的路由信息,然后向后

继续传输到正确的目的地主机上头,路由器具有IP Forwarding的功能,并具有管理路由的功能,所以可以将来自不同网域之间的封包进行

传递的功能,此外,你的主机与你主机设定的Gateway必定是在同一个网段内

观察主机路由: route [-n], -n 将主机名以IP的方式显示,

Destination :其实就是 Network 的意思;

Gateway:就是该接口的 Gateway 那个 IP 若为 0.0.0.0 表示不需要额外的 IP

Genmask:就是 Netmask 与 Destination 组合成为一部主机或网域;

Flags:共有多个旗标可以来表示该网域或主机代表的意义: U:代表该路由可用;  G:代表该网域需要经由 Gateway 来帮忙转递; H:代表该行路由为一部主机,而非一整个网域;

IP与MAC:链接层的ARP与RARP协定

在Internet上面最重要的就是那个IP,事实上传递数据的就是以太网络,以太网络主要是用网卡卡号(MAC)的,那么IP与MAC势必有一个关联性存在

那就是ARP网络地址解析以及RARP反向网络地址解析,当使用ARP协议取得目标IP与网卡卡号后,就会将该笔记录写入我们主机的

ARP table中(内存内的数据)记录20分钟

可以使用ARP表格内的IP/MAC对应数据,透过arp这个指令

arp -[nd] hostname

arp -s hostname(IP) Hardware_address

选项与参数:

-n :将主机名以 IP 的型态显示

-d :将 hostname 的 hardware_address 由 ARP table 当中删除掉

-s :设定某个 IP 或 hostname 的 MAC 到 ARP table 当中

范例一:列出目前主机上面记载的 IP/MAC 对应的 ARP 表格  arp -n

范例二:将 192.168.1.100 那部主机的网卡卡号直接写入 ARP 表格中  arp -s 192.168.1.100 01:00:2D:23:A1:0E

ICMP 协定 因特网讯息控制协议

ICMP是一个错误侦测与回报的机制,最大的功能就是可以确保我们网络的联机状态与联机的正确性,ICMP是网络层的重要封包之一,这个封包是纳入IP的封包中,

ICMP同样是通过IP封包来进行数据传送的,因为在Internet上面有传输能力的就是IP封包,ICMP有相当多的类别可以侦测与回报,常见的ICMP的类别:

0 Echo Reply (代表一个响应信息)

3 Destination Unreachable (表示目的地不可到达).......等等类别

ICMP是用来检查网络的状态的,最简单的指令是ping与traceroute了,这两个指令可以透过ICMP封包的辅助来确认与回报网络主机的状态,在设定防火墙的时候,我们最容易

忽略的就是这个ICMP封包,只会记住TCP/UDP而已,事实上,ICMP封包可以帮助联机的状态回报,除了考虑之后,基本上,ICMP封包也不应该全部都挡掉

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

网络层的IP封包只负责将数据送到正确的目标主机去,但这个封包到底会不会被接收,或者有没有被正确的接收,那就不是IP的任务,那是传送层的任务之一,传送层有两个

重点,一个是连接导向的TCP封包,一个是非连接导向的UDP封包,这两个封包很重要,资料能不能正确的被送达目的,与这两个封包有关

可靠联机的 TCP 协议

网络层的IP之上是传送层,而传送层最常见的就是TCP封包了,这个TCP封包必须要能够放到IP的数据袋当中才行,将MAC, IP 与 TCP的封包数据依次是MAC ---> IP -----> TCP

TCP也有表头数据来记录该封包的相关信息,各个项目以 Source Port, Destination Port 及 Code 算是比较重要的项目

1.Source Port & Destination Port (来源端口口 & 目标端口口),这个可以说是TCP封包上最重要的参数了

2.Sequence Number (封包序号) 由于TCP封包必须要放入IP封包中,如果TCP数据太大(大于IP封包的容许程度),就要进行分段,所以这个Sequence Number 就是记录每个封

包的序号,可以让接收端将TCP的数据组合起来

3.Acknowledge Number (回应序号) 为了确认主机端确实有收到我们client端所送出的封包数据,我们client端当然希望能够收到主机方面的响应,

那就是这个 Acknowledge Number 的用途了,当client端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了

4 Data Offset (资料补偿) 那个Options的字段的长度是非固定的,而为了要确认整个TCP的封包的大小,就需要这个标志来说明整个封包区段的起始位置,

5 Reserved (保留)

6 Code (Control Flag, 控制标志码) 这个字段共有6个bits,分别代表6个句柄,若为1则为启动,

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

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

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

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

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

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

其他包括 Window (滑动窗口)   Checksum(确认检查码)    Urgent Pointer(紧急资料)   Options(任意资料)   Padding(补足字段)

通讯端口口

TCP表头数据中,最重要的就是那16位的两个咚咚,亦即来源与目标的端口,由于是16位,因此目标与来源端口最大可达65535 号,网络是双向的,服务器与客户端要达成

联机的话,两边要有一对对应的端口来达成联机信道,好让数据可以透过这个信道来进行沟通,如果IP是网络世界的门牌,那么端口就是楼层,所以

IP 是门牌,TCP 是楼层,真正提供服务的, 是在该楼层的那个人 (程序)!

特权端口:各网络服务与 port number 的对应默认给他写在 /etc/services

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端的话,由于client端都是主动向server端要数据,所以client端的port number 就可以随机取用一个大于1024以上没有在用

的端口号

TCP 的三向交握

TCP被称为可靠的联机封包,主要是透过许多机制来达成的,最重要的就是三向交握的功能,藉由TCP的表头来确认这个封包有实际被对方接收,并近一步与对方主机达成

联机,在建立联机之前都必须要通过三个确认的动作,这种联机被称为三向交握:

A:封包发起 取用大于1024的一个端口,然后TCP的表头中,必须要带有SYN的主动联机(SYN=1),并且记下联机封包给服务器端的序号(Sequence number = 10001)

B:封包接收与确认封包传送 服务器接到这个封包后,就会开始制作一个同时带有SYN=1, ACK=1 的封包,ACK=1是给客户端确认用的,所以数字比A中多一号,那么服务器

也要确认客户端是否接受我们的封包才行,所以也发出个Sequence (seq=20001) 给客户端,并且开始等待客户端给我们服务器端的回应

C:回送确认封包  当客户端收到来自服务器端的 ACK 数字后 (10002) 就能够确认被接收了,接下来如果客户端同意与服务器端建立联机,就会再次发送一个确认封包

(ACK=1) 给服务器,亦即是 acknowledge = 20001+1 = 20002

D:取得最后确认   在服务器端收到带有 ACK=1 且 ack=20002 序号的封包后,就能够建立起这次的联机了

网络是双向的,不论服务器端还是客户端,都必须透过一次SYN与ACK来建立联机,总共会进行三次的交谈,在设定防火墙或者追踪网络联机的问题时,这个双向的概念

会容易被忽略,导致无法联机成功的问题

非连接导向的 UDP 协议  UDP 与 TCP 不一样, UDP 不提供可靠的传输模式,因为他不是面向连接的一个机制,他不会在接收封包之后给发送端回复响应封包

并没有像TCP封包有较为严密的检查机制 ,UDP 传输协议并不考虑联机要求、联机终止与流量控制等特性,所以使用的时机是当数据的正确性不是很重要的情况

另外,很多的软件其实是同时提供 TCP 与 UDP 的传输协议的,例如,查询主机的DNS服务就同时提供了UDP/TCP协议,由于UDP快速,我们cleint端先使用UDP来与

服务器联机,当使用UDP联机还是无法取得正确的数据,便转换为可靠的TCP的传输协议来进行数据的传输,

网络防火墙与 OSI 七层协议

我们可以利用一些防火墙机制与软件来进行封包表头的分析,并且设定分析的规则,当发现某些特定IP,特定端口,特定的封包信息(SYN/ACK等等),那么就将该封包给丢弃

那就是最基本的防火墙的原理,我们知道telnet这个服务器很危险,当发现该封包的目的地是主机的post 23 就该将该包丢弃,那就是最基本的防火墙案例,

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

第二层:可以针对来源与目标的 MAC 进行抵挡;

第三层:主要针对来源与目标的 IP ,以及 ICMP 的类别 (type) 进行抵挡;

第四层:针对 TCP/UDP 的埠口进行抵挡,也可以针对 TCP 的状态 (code) 来处理

DNS系统

想要使用IP与主机名对应,那么就要用到DNS服务器了,当在浏览器上输入http:www.baidu.com的时候,我的计算机会首先藉由向DNS主机查询tw.yahoo.com 的 IP 后,

再将查询到的IP结果回应给我的浏览器,那么我的浏览器就可以藉由该IP来连上主机了

那么那部 DNS 主机的 IP 就必须要在我的计算机里面设定好才行,并且必须是要输入IP,不然我的计算机没法连到DNS服务器去要求数据的

在 Linux 里面,DNS 主机 IP 的设定就是在 /etc/resolv.conf 这个档案里面啦

脸上Internet的必要网络参数:

IP, Network, Broadcast, Netmask,还需要考虑到路由里面的 Default Gateway 才能够正确的将非同网域的封包给他传送出去,考虑到主机名与IP的对应,你还必须要给予

一个DNS服务器的IP才行 ,IP,Netmask,Network,Broadcast,Gateway,DNS,由于Network 与 Broadcast 可以经由 IP/Netmask 的计算而得到,主要就是

IP, Netmask, Default Gateway, DNS 这四个就是了

局域网络架设

1.LInux直接联网与PC同地位

在不需要连上Internet时,那么每个设备都给予一个同网域的私有IP就可以联机工作了,而当需要连上internet时,每部计算机都可以自己直接通过拨接连上internet

每部机器上面『额外增加一个实体的 ppp0 接口』,你的系统内就会有两个可以使用的IP了(一个是 public 一个是 private IP),你的 Linux 主机挂点时, 其他的PC不受影响

不过这也无法掌握每个员工实际上网的情况,再是没有防火墙的环境,因此对于企业来说,不建议这种环境

2.LInux直接联网与一般PC分开网域

如果你有两个public Ip ,你的linux服务器主要提供internet的www或mail服务,而不是作为内部服务器之用,那么将Linux服务器与内部的网域分开也是可行的方法

而且 Linux 拥有 public IP,在设定与维护上面也不困难,其他内部的计算机都通过一个ip分享器来连上internet,在ip分享器上可以设定简单的防火墙设定,

3.LInux直接联网-让Linux直接管理LAN

如果你不想要购买 IP 分享器的话,可以直接使用Linux作为IP分享器,当你只有一个public ip时,非得使用这种方式,让 Linux 作为 IP 分享器很简单,同时Linux必须具备两张

网卡,分别对内和对外,同时 Linux 服务器可以做为内部网域对外的防火墙之用,Linux 服务器也要比高阶的硬件防火墙便宜多了,由于内部的 LAN 是需要通过 Linux 才能联机

出去,所以 Linux 挂点时,整个对外联机就挂了,此外,Linux服务器的设定和维护可能比较复杂点

4.Linux放在防火墙后-让LInux使用Private IP

我们可以将 Linux 服务器放在 LAN 后面喔,主要是在 LAN 的环境下, 再透过防火墙的封包重新导向的功能,将来自internet的封包经过防火墙处理后再进入到服务器

如此一来可以砍掉一堆莫名其妙的侦测和攻击,比较安全,另外还可以将IP分享器换成Linux主机来架设防火墙,也是不错的选择,

不过这里得再次的强调, Linux 服务器主机若放在 LAN 里面 (使用 private IP),则当你要对 Internet 提供网络服务时, 防火墙的规则将变的相当复杂,因为需要进行封包转递的

任务,在某些比较麻烦的协议当中, 可能会造成设定方面的困扰

前面提到3的方式是比较容易学习的,Linux主机必须要要有router的能力,所以当然必须就要有两个接口,一个接口与 Internet 沟通,另一个接口则与内部的 LAN 沟通

为什么说是两个网络接口而不是两张网卡,因为一张网卡可以设定多个IP,由于一个IP为一个网络接口,所以就可以进行IP分享器的功能了,建议使用两张网卡

一张为对外联机的使用 bridge 模式,一张与其他三部主机联机选择intnet模式

在 Linux 系统当中,只要将网络参数设定妥当,那么 TCP/IP 就已经被启用了,所以你不需要额外的再安装其他的通讯协议,不过如果还需要将Linux系统中的硬盘空间分享

给同域的PC时,那么就需要额外的加装 SAMBA 这个服务器软件才行。Linux 本身就支持了 TCP/IP

Linux服务器内三台PC的设定,需要相应的启动某些通讯协议才行,一般来说,windows client系统里面最常见的两个通讯协议是TCP/IP 以及 NetBEUI,

如果你只想让 Windows 与 Linux 能够藉由网络上的芳邻互通有无,那么启动 TCP/IP 也就够了( 因为 SAMBA 是藉由NetBIOS over TCP/IP 来达成数据传输的 ),

不过,也可以同时启动 NetBEUI 这个通讯协议就是了。

Windows 系统上所需要的网络参数除了 IP, netmask, DNS 之外,还需要『工作组, workgroup』与 『计算机名称, Netbios name』等等的设定

未来需要搭配 DHCP 主机、NAT 主机等等服务器的设定时,SAMBA 主机的设定中,会再次在windows里面设定信息的

lInux连上Internet前的注意事项

其实在配置网络参数之前,需要先驱动网络卡,否则主机连网络卡都捉不到,没办法去设定IP参数的,如何确定网络卡已经被捉到?

网络卡的代号是eth0,eth1依次类推的,如果因为核心不支持某个网络卡时,就需要通过重新编译较新的核心或者是编译网络卡的核心模块,而有的时候默认网络卡模块

可能无法完全百分百的发挥网络卡的功能,这个时候就必须要自行编译网络卡的模块了,那个网络卡的模块要去网络开发商的官方网站下载的,不过,如果你的网络卡是自行

编译安装的,那么每次重新安装其他版本的核心时,你都必须要自行重新手动编译过该核心,因为模块与核心是有相关性的。

观察核心所捉到的网卡信息

不论是内建的还是自行安插到PCI或PCI-x或PCI-E的接口上,那么如何确定该网络卡有否被核心捉到,那就利用dmesg来查阅

dmesg | grep -in eth 这条信息可以看到你的网卡数量与网卡使用的模块(一般为e1000),而使用的芯片应该就是Intel的网络卡,此外网络卡的速度是1000Mbps的全双工模式

dmesg 来查询核心侦测硬件产生的信息外,我们也可以透过 lspci 来查询相关的设备芯片数据

lspci | grep -i ethernet 也可以观察到网卡的信息

上面的输出中我们可以看到网卡使用的模块式e1000,接着查看核心有没有加载这个模块,可以使用lsmod去查查看,这个模块的相关信息可以使用modinfo来查看

lsmod | grep 1000

e1000 119381 0 <==确实有载入到核心中!

modinfo e1000 也可以查看到这个模块的信息

编译网卡驱动程序 其实这样会造成每次更新核心都得要重新编译一次网络卡驱动程序

如果真的有必要编译网卡驱动程序时,可以去该网卡的官网去下载提供给Linux的驱动程序原始码,编译程序需要安装gcc和make和kernel-header 等软件才行,可以使用

『yum groupinstall 'Development Tools'』来安装

下载:http://downloadcenter.intel.com/SearchResult.aspx?lang=eng&keyword='e1000-'

进行解压缩和编译

tar -zxvf e1000-8.0.30.tar.gz -C /usr/local/src

cd /usr/local/src/e1000-8.0.30/ 可以看到一个README的档案

接着 cd src

最后 make install

最后这个模块被编译完成且安装放置于/lib/modules/$(uname -r)/kernel/drivers/net/e1000/e1000.ko 接着重新载入这个新的模块才行

模块之测试与处理 新的模块被加载,所以我们得要先移除旧的模块后,才能重新载入这个新模块,

1. 先移除已经加载在内存中的旧模块   rmmod e1000

2. 加载新模块,并且查阅一下有没有捉到正确的版本!  modprobe e1000              modinfo e1000查看信息和模块的版本

设定开机自动启动网络卡模块 (Option)

如果你的核心还是捉不到网卡,就得要自己处理一下模块的对应才行,在/etc/modprobe.d/ 目录下建立一个名为 ether.conf 的档案,将模块与网卡代号链接在一块即可

网卡设定完成后,试着手动给他设定IP看看 ifconfig eth0 192.168.1.100 ,利用ping去连一下同网域内的其他计算机是不是可以响应就知道网络卡是否OK

Linux 网络相关配置文件案

/etc/sysconfig/network-scripts/ifcfg-eth0 设定是否启用dhcp,ip地址,子网掩码,是否默认启动,网关,

/etc/sysconfig/network 设定需不需网络,主机名,是否支持IPV6

/etc/resolv.conf  nameServer DNS的IP设定

/etc/hosts     私有IP主机名和别名

/etc/services  设定某个服务所定义的端口,想要自定义一个服务和端口时,就要修改这个档案了

/etc/protocols 定义出IP封包协议相关数据,包括ICMP/TCP/UDP这方面的封包协议

一些指令 /etc/init.d/network restart 重启整个网络,

ifconfig和route -n用来观察 /etc/sysconfig/network-scripts/ifcfg-eth0     /etc/init.d/network restart配置是否正确

dig www.google.com 查看/etc/resolv.conf配置是否正确

hostname (主机名)   ping $(hostname)   reboot 查看/etc/sysconfig/network和/etc/hosts配置是否正确

注意 ifcfg-eth0 与档案内的 DEVICE 名称设定需相同,每个变量(左边的英文)都应该要大写

如果在配置好后启用ifconfig eth0查看信息,可以查看inet addr 与 Mask 项目,检查一下路由器的设定是否正确route -n

测试看看与路由器之间是否能够联机成功  ping -c 3 192.168.1.254 这里错误的话,去看看路由器是否关闭,路由器的防火墙是否正确,接着就可以上网了,

DNS 服务器的 IP 设定与观察  /etc/resolv.conf设定如下:

nameserver 168.95.1.1  直接输入网关的IP或是电信的DNS主机

nameserver 139.175.10.20

看看 DNS 是否顺利运作了呢  执行dig www.google.com

上面输出的两个重点,一个是问题查询 www.google.com 的 A (Address),并且回答(Answer) 里面得到我们所需的 IP 参数

最后面一段的Server 项目非常重要!你得要看是否与你的设定相同的那部 DNS 服务器 IP 才行

修改主机名会用到/etc/sysconfig/network 以及 /etc/hosts 这两个档案

vim /etc/sysconfig/network                         NETWORKING=yes                       HOSTNAME=www.centos.vbird

vim /etc/hosts                                               192.168.1.100 www.centos.vbird  这个档案原本内容不要删除,只要新增额外的数据即可

自动取得 IP 参数 (DHCP 方法)

DHCP可以自动调整主机的网络参数 ,利用IP分享器或NAT有架设DHCP服务器时,当你的主机位于 IP 分享器的后端,或者是你的 LAN 当中有 NAT 主机且 NAT 主机有架

设 DHCP 服务时, 那取得 IP 的方法也是这样,只要设定DEVICE  HWADDR   ONBOOT  BOOTPROTO即可

局域网络内的 IP 分享器或 DHCP 主机,就会立刻帮你的 Linux 主机做好网络参数的规划, 包括 IP 参数与 GATEWAY 等,就通通设定妥当啦

拨接上网需要有rp-pppoe 这套软件来帮忙   rpm -ivh rp-pppoe* ppp*,利用主机的以太网卡连接到ADSL 调制解调器上,拨接成功后会产生一个网络接口『 ppp0 』

检查是否连上internet的方法有  ifconfig  route -n  ping IP  dig www.google.com   hostname

无线网络的设置:无线网络所需要的硬件: AP , 无线网卡

在无线网络中需要一个接收讯号的装置那就是无线基地台(其实就是IP分享器),还有就是安装在计算机上面的无线网卡,无线基地台有两个接口,一个可以与外部的 IP 做沟通

,另外一个则是作为 LAN 内部其他主机的 GATEWAY ,那其他主机上面只要安装无线网卡,并且顺利连上无线基地台,就可以连上Internet

使用的设备如下:

AP : TP-Link (TL-WR941ND)    USB 的无线网卡: D-Link (DWA-140),使用 RT3070sta 驱动程序

由于无线网络的传输不是通过实体的网络卡,而是透过无线讯号,实体网络很好控制,无线讯号如何侦测,因此务必要在你的无线基地台上进行联机的限定

1 使用网卡卡号(MAC)来作为是否可以存取无线基地台的限制,麻烦的是当有机器要连接这个无线基地台时,就要手动的登陆无线基地台去进行MAC的设定

2 进行密码的设定

也可以上面两种方法一起使用

关于 ESSID/SSID

每部无线基地台都会有个名字,那就是SSID或ESSID,这个SSID就是提供给client端连接用的,这个名字可以自己设定,并给与一个密码

利用无线网卡开始联机

无线网卡有很多模式,这里使用的是USB无线网卡,可以使用lsusb来查看是否有载入,如果核心不支持时,就需要编译驱动程序

lsusb

查看模块与对应的网卡代号:(modinfo 与 iwconfig)

核心不支持,则执行rpm -ivh kmod-rt3070sta* rt2870-firmware*  再执行iwconfig

利用 iwlist 侦测 AP

启动无线网卡后,就需要搜索区域内的无线基地台,直接使用iwlist 来使用这个无线网卡搜寻,执行iwlist ra0 scan 找到这张网卡搜索到的AP无线基地台

无线网络参数的设定可以参考 /etc/sysconfig/network-scripts/ifup-wireless

这里的配置是  vim ifcfg-ra0   DEVICE=ra0    ESSID=vbird_tsai      ONBOOT=no <== 若需要每次都自动启动,改成 yes 即可!  BOOTPROTO=dhcp   RATE=54M指定传输速率

启动与观察无线网卡    启动用ifup ra0,

观察用 iwconfig 及 ifconfig

/etc/hosts文件作用,当需要主机名与IP的对应时,系统会先去/etc/hosts 找寻对应的设定值,如果找不到,才会使用 /etc/resolv.conf 的设定去因特网找,设定了/etc/hosts文件

就能加快主机名的查询了

预设路由的问题,主机为使用 ADSL 拨接,当拨接成功后会产生一个 ppp0 的接口,这个ppp0 接口也有自己的 default gateway,当你封包去送到YaHoo这个非本网域的主机

时,这个封包就不知道是去eth0 还是 ppp0,因为两个都有 default gateway,你的 default gateway 应该只能有一个

Linux 常用网络指令

ifconfig :查询、设定网络卡与 IP 网域等相关参数,包括启动与观察接口,设定子网掩码,广播地址,MTU

ifup, ifdown:这两个档案是 script,透过更简单的方式来启动网络接口

route :查询、设定路由表 (route table)

ip :复合式的指令, 可以直接修改上述提到的功能;

ifup与ifdown仅能对ifcfg-ethX进行启动或关闭的动作,不能直接修改参数,至于ifconfig则可以手动给予某个IP或调整其网络参数

ifconfig可以手动的启动,观察与修改网络接口的相关参数,修改的内容包括IP参数以及MTU等等都可以修改,语法如下:

ifconfig {interface} {up|down} <== 观察与启动接口

ifconfig interface {options} <== 设定与修改接口

interface:网络卡接口代号,包括 eth0, eth1, ppp0 等等

options :可以接的参数,包括如下:

up,down ; 启动或关闭该网络接口

mtu : 可以设定不同的MTU数值,例如mtu 1500 (单位为byte)

netmask :子网掩码

broadcast : 广播地址

当直接输入ifconfig时,会列出目前已经被启动的卡,不论这个卡是否被给予IP,都会进行显示,如果想要指定查看某张网卡,可以输入 ifconfig eth0, 而不管该接口是否有启动

那么ifconfig 网络接口代号 这个命令的输出数据内容包括:

eth0 : 就是网络卡的代号,也有lo这个loopback;  HWaddr:就是网络卡的硬件地址,俗称MAC地址, inet addr:IPv4 的 IP 地址,inet6 addr:是 IPv6 的版本的 IP

MTU , RX 那行表示网络启动到目前为止的封包接收情况,packets 代表封包数,errors代表封包发生错误的数量,dropped代表封包由于有问题而

被丢弃的数量,TX与RX相反,代表到目前为止的传送情况 collisions代表封包碰撞的次数,越大代表网络状况越不好,txqueuelen代表用来

传输数据的缓冲区的储存长度 RX bytes TX bytes 代表总接收,发送字节数量

从数据结果看出RX,TX内的errors数量,以及collision的数量决定网络情况的好坏

ifconfig eth0 192.168.100.100   暂时修改网络接口,不加任何其他参数,则系统会依照IP所在的class范围,自动算出netmask,network,broadcast等IP参数

ifconfig eth0 192.168.100.100    netmask 255.255.255.128 mtu 8000  修改不同参数的网络接口以及MTU的设定

ifconfig eth0:0 192.168.50.50   表示在原来的实体网卡上面,再仿真出一个网络接口,亦即一张网络卡上面设定多个IP的意思

这张仿真的网卡与真实网卡的有关信息是一样的

使用 ifconfig 可以暂时手动来设定与修改某个适配卡的相关功能,并且可以透过eth0:0这钟虚拟的网络接口来设定好一张网络卡上面的多个IP

而当执行/etc/init.d/network restart 来重新启动整个网络接口时,那么之前手动的设定数据都会全部失效,还有就是要启动某个网络接口,但

又不让他具有IP参数时,直接给他ifconfig eth0 up即可,这个动作经常在无线网卡当中会进行,因为我们必须要启动无线网卡让他去侦测AP存在与否

AP就是IP分享器

ifup 与 ifdown 会以/etc/sysconfig/network-scripts 目录下搜寻对应的配置文件,找出对应的档案内容来启动网卡

路由修改: route,两部主机之间一定要有路由才能互通TCP/IP的协议,否则无法联机,一般只要有网卡,该网卡就将产生一个路由,

route [-nee]

route add [-net|-host] [网域或主机] netmask [mask]  [gw|dev]

route del [-net|-host] [网域或主机] netmask [mask]  [gw|dev]

参数的设定:

-n 不要使用通讯协议或主机名,直接使用IP或port number

-ee :使用更详细的信息来显示, 增加 (add) 与删除 (del) 路由的相关参数:

-net :表示后面接的路由为一个网域;

-host :表示后面接的为连接到单部主机的路由;

netmask :与网域有关,可以设定 netmask 决定网域的大小;

gw :gateway 的简写,后续接的是IP的数值,与 dev 不同

dev :如果只是要指定由那一块网络卡联机出去,则使用这个设定后面接 eth0 等

route 与 route -n 的输出结果,你可以发现有加 -n 参数的主要是显示出 IP ,至于使用 route 而已的话,显示的则是『主机名』,通常使用route -n

而输出的信息包括下面的内容:

Destination, Genmask  分别是 network 与 netmask

Gateway:该网域是通过哪个 gateway 连接出去的,如果显示0.0.0.0 表示该路由是直接由本机传送,亦即使用局域网络的MAC直接通讯,如果有显示IP的话

表示该路由需要经过路由器的帮忙才能够传送出去

Flags:总共有多个旗标,代表的意义如下:

U (route is up):该路由是启动的;   H (target is a host):目标是一部主机 (IP) 而非网域;

G (use gateway):需要透过外部的主机 (gateway) 来转递封包;   R (reinstate route for dynamic routing):使用动态路由时,恢复路由信息的旗标;

D (dynamically installed by daemon or redirect):已经由服务或转 port 功能设定为动态路由   M (modified from routing daemon or redirect):路由已经被修改了;

! (reject route):这个路由将不会被接受(用来抵挡不安全的网域!)

Iface:这个路由传递封包的接口 ,

路由排列的顺序,依次是小网域(192.168.1.0/24 是Class C),逐渐到大网域 (169.254.0.0/16 Class B),最后则是预设路由(0.0.0.0/0.0.0.0)

我们要判断某个网络封包应该如何传送的时候,该封包会经由这个路由的过程来判断,先是小网域,再是大网域,最后是网域的路由,所以可看出路由是有顺序的

因此当重复设定多个同样的路由时,例如在主机上的两张网络卡设定为相同的网域的IP时,由于路由是依照顺序来排列与传送的,所以无论是

eth0还是eth1都是由上述的eth0传送出去的,除非类似虚拟机(Xen,VMware 等软件) 所架设的多主机时

路由的增加与删除

route del -net 169.254.0.0 netmask 255.255.0.0 dev eth0   在删除的时候,需要将路由表上面出现的信息都写入 包括 netmask , dev 等等参数

route add -net 192.168.100.0  netmask 255.255.255.0 dev eth0 增加一个路由时,要注意这个路由的设定必须要能够与你的网络互通

错误实例:

route add -net 192.168.200.0 netmask 255.255.255.0 gw 192.168.200.254  因为我的主机内只有192.168.1.11 这个 IP,所以不能直接与192.168.200.254这个网域使用MAC

互通的。当出现『SIOCADDRT: Network is unreachable』 这个错误时肯定是由于 gw 后面接的 IP 无法直接与你的网域沟通 (Gateway 并不在你的网域内)

route add default gw 192.168.1.250  增加预设路由的方法!请注意,只要有一个预设路由就够了,也要与你的IP在同一网域中,接着要重新启动你的网络/etc/init.d/network restart

网络参数综合指令: ip

ip这个指令整合了ifconfig与route这两个指令,当查看vi /sbin/ifup就知道整个ifup就是利用ip这个指令来达成的,ip的指令还有更多的功能

ip [option] [动作] [指令]  选项与参数:

option :设定的参数,主要有:

-s 显示出该装置的统计数据,例如总接收封包数,亦即是可以针对哪些网络参数进行动作,包括有:link 关于装置(device) 的相关设定,

包括 MTU, MAC 地址等等,addr/address :关于额外的 IP 协议 例如多 IP 的达成等等,route :与路由有关的相关设定

ip命令可以分为三个部分(link, addr, route)

1.关于装置接口 (device) 的相关设定: ip link

ip [-s] link show <== 单纯的查阅该装置相关的信息

ip link set [device] [动作与参数]

选项与参数:

show:仅显示出这个装置的相关内容,如果加上 -s 会显示更多统计数据;

set :开始设定, device 指的是 eth0, eth1 等等界面代号, 动作与参数 up/down 启动或关闭某个接口,address改变装置的MAC,name 给予装置特殊的名字 mtu 最大传输单元

显示出所有的接口信息 ip link show

显示eth0这个装置的具体信息 ip -s link show eth0

启动、关闭与设定装置的相关信息  ip link set eth0 up  ip link set eth0 down启动与关闭命令

ip link set eth0 mtu 1000 更改MTU的值

修改网络卡代号、MAC 等参数,修改之前先关闭该网络卡,否则不会成功

ip link set eth0 down<==关闭界面    ip link set eth0 name vbird <==重新设定   ip link show <==观察一下

2.关于额外的 IP 相关设定 : ip address

ip link 是与第二层资料连接层有关,那么ip address 则是与第三层网络层有关的参数,主要设定IP有关的各项参数,包括netmask,broadcast等等

ip address show <==就是查阅 IP 参数

add|del :进行相关参数的增加 (add) 或删除 (del) 设定,主要有: IP参数网域的设定,例如192.168.100.100/24 之类的设定,dev:这个IP参数所要设定的接口,例如eth0,eth1

相关参数:broadcast: 设定广播地址,如果设定值是 + 表示『让系统自动计算』

label:亦即是这个装置的别名,例如 eth0:0 就是了

scope : 这个界面的领域,通常是这几个大类:  global :允许来自所有来源的联机;

site  :仅支持 IPv6 ,仅允许本主机的联机

link :仅允许本装置自我联机;

host :仅允许本主机内部的联机;

所以当然是使用 global 啰!预设也是 global 啦!

新增一个接口 名称假设为 eth0:vbird

ip address add 192.168.50.50/24 broadcast +  dev eth0 label eth0:vbird

ip address show eth0 进行查看 多出了一行新的接口,且名称是 eth0:vbird  broadcast +  也可以写成 broadcast 192.168.50.255

ifconfig 就可以查看到刚刚设定的东西

将刚刚的设定删除 ip address del 192.168.50.50/24 dev eth0

3.关于路由的相关设定: ip route

ip route show <==单纯的显示出路由的设定而已

ip route [add|del] [IP 或网域] [via gateway] [dev 装置] 选项与参数:

show :单纯的显示出路由表,也可以使用 list ;

add|del :增加 (add) 或删除 (del) 路由的意思

IP 或网域:可使用 192.168.50.0/24 之类的网域或者是单纯的 IP ;

via : 从哪个gateway出去,不一定需要;

dev : 由哪个装置连出去,这就需要了

mtu : 可以设定MTU的数值

显示出目前的路由资料  ip route show

proto:此路由的路由协议,主要有 redirect, kernel, boot, static, ra等, 其中 kernel 指的是直接由核心判断自动设定。

scope:路由的范围,主要是 link ,亦即是与本装置有关的直接联机。

增加路由,主要是本机直接可沟通的网域ip route add 192.168.5.0/24 dev eth0   # 针对本机直接沟通的网域设定好路由,不需要透过外部的路由器

增加可以通往外部的路由,需透过 router  ip route add 192.168.10.0/24 via 192.168.5.100 dev eth0

ip route show 查看设置的结果

增加预设路由  ip route add default via 192.168.1.254 dev eth0  那个 192.168.1.254 就是我的预设路由器 (gateway)

删除路由 ip route del 192.168.10.0/24   ip route del 192.168.5.0/24

无线网络的设定 以下这两个指令必须要有无线网卡才能够进行,这两个指令的用途是:

iwlist:利用无线网卡进行无线 AP 的侦测与取得相关的数据;  iwconfig:设定无线网卡的相关参数    使用 man iwlist 与 man iwconfig 了解一下语法

手动使用 DHCP 自动取得 IP 参数: dhclient  利用dhclient这个指令发送dhcp要求工作的程序,不用去修改ifcfg-eth0了,执行 dhclient eth0就可以以dhcp协议去获取IP参数了

网络侦错与观察指令

两部主机两点沟通: ping,ping主要透过ICMP封包来进行整个网络的状况报告,ping还是需要透过IP封包来传送ICMP封包的,而IP封包里面有个

相当重要的TTL属性,这个很重要的一个路由特性

ping [选项与参数] IP -c数值:ping的次数  -n 输出数据时不进行IP与主机名的反查,直接使用IP输出较快 -s 数值 发送出去的ICMP封包大小,预设为56bytes

-t 数值 TTL的数值,预设是255 每经过一个节点就会少一 -W 数值 等待响应对方主机的秒数 -M [do|dont] :主要在侦测网络的 MTU 数值大小,两个常见的项目是:

do :代表传送一个 DF (Don't Fragment) 旗标,让封包不能重新拆包与 打包;

dont:代表不要传送 DF 旗标,表示封包可以在其他主机上拆包与打包

输出结果:64 bytes from 168.95.1.1: icmp_seq=1 ttl=245 time=15.4 ms

64bytes 表示这次传送的ICMP封包大小为64bytes这么大,

icmp_seq=1:ICMP 所侦测进行的次数,第一次编号为 1

ttl=243:TTL 与 IP 封包内的 TTL 是相同的,每经过一个带有 MAC 的节点 (node) 时,例如 router, bridge 时, TTL 就会减少一,预设的 TTL 为

255 , 你可以透过 -t 150 之类的方法来重新设定预设 TTL 数值

time=15.4 ms:响应时间,单位有 ms(0.001 秒)及 us(0.000001 秒), 一般来说,越小的响应时间,表示两部主机之间的网络联机越良好!

特别注意:你的主机与侦测主机不在同一个网域内,那么TTL预设使用255,如果在同一个网域内,那么TTL预设则使用64

用 ping 追踪路径中的最大 MTU 数值:加大讯框frame,对于网络效能是有帮助的,因为封包打包的次数会减少,加入如果整个传输的媒体都能够接受这个frame而不需要

重新进行封包的拆解与重组的话,那么效能当然会更好,那个修改frame大小的参数就是MTU,MTU 修改可以透过 ifconfig 或者是 ip 等指令来达成,如何追踪网络传输的

最大MTU时,可以使用ping传送一个大封包,并且不许中继的路由器与switch将该封包重组,那就能够处理

ping -c 2 -s 1000 -M do 192.168.1.254 发送一个ICMP封包大小为1000的值,并且不允许在其他主机上进行拆包和封包,如果有响应,那就是可以接受这个封包,如果无

响应,则表示这个MTU太大了

ping -c 2 -s 8000 -M do 192.168.1.254 信息错误提示本地端的MTU才到1500,而你要侦测8000的MTU,根本无法达成,可以修改IP link 来进行MTU设定

不过,由于IP封包表头(不含 options)就已经占用了20bytes,再加上ICMP的表头有8 bytes,所以在使用-s size的时候,先要扣除(20+8)的大小,因此如果要使用MTU为

1500时,就要下达『 ping -s 1472 -M do xx.yy.zz.ip 』才行,由于本地端的网络卡MTU也会影响到侦测,所以如果想要侦测整个传输媒体的MTU数值,那么每个可以调整的

主机就要使用ifconfig或ip先将MTU调大,然后进行侦测,否则可能出现错误,不过这个 MTU 不要随便调整,通常调整MTU的时间是在以下时候:

因为全部的主机群都是在内部的区网,例如丛集架构 (cluster) 的环境下,由于内部的网络节点都是我们可以控制的,因此可以透过修改 MTU 来增进网络效能

因为操作系统默认的 MTU 与你的网域不符,导致某些网站可以顺利联机,某些网站则无法联机,以 Windows 操作系统作为联机分享的主机时,在 Client 端挺容易发生问题

如果是要连上 Internet 的主机,注意不要随便调整 MTU,因为无法获知internet上面的每部机器能够支持的MTU到多大,不是我们可以管得到的,另外其实每种联机方式都有

不同的MTU值,

Ethernet 1500, PPPoE 1492, Dial-up(Modem) 576

两主机间各节点分析: traceroute :ping是指两部主机之间的回声判断,traceroute可以追踪两部主机之间通过的各个节点(node)通讯状况的好坏,例如我们联机到yahoo的

速度比平常慢,可能是1.自己的网络环境有问题,2外部的internet有问题,如果是1需要自己检查网络环境,如果是2就是internet的问题,判断1还是2就要使用traceroute指令

traceroute [选项与参数] IP

-n :可以不必进行主机的名称解析,单纯用 IP ,速度较快!

-U :使用 UDP 的 port 33434 来进行侦测,这是预设的侦测协议;

-I :使用 ICMP 的方式来进行侦测;

-T :使用 TCP 来进行侦测,一般使用 port 80 测试

-w :若对方主机在几秒钟内没有回声就宣告不治...预设是 5 秒

-p 埠号:若不想使用 UDP 与 TCP 的预设埠号来侦测,可在此改变埠号。

-i 装置:用在比较复杂的环境,如果你的网络接口很多很复杂时,才会用到这个参数;举例来说,你有两条 ADSL 可以连接到外部,那你的主机会有两个 ppp,你可以使用 -i

来选择是 ppp0 还是 ppp1 啦!

-g 路由:与 -i 的参数相仿,只是 -g 后面接的是 gateway 的 IP 就是了

侦测本机到 yahoo 去的各节点联机状态    traceroute -n tw.yahoo.com

这个traceroute指令会针对欲连接的目的地之所有node进行UDP的逾时等待,例如连到YAHOO需要经过12个节点以上,traceroute会对这12个节点做UDP的回声等待,并

侦测回复的时间,每节点侦测三次,最终回传显示的结果,可以发现每个节点其实回复的时间大约在50ms以内,算是不错的internet环境了

比较特殊的是回传星号,代表该node可能设置有某些保护措施,把我们发送的封包信息给丢弃所致,因为我们是通过路由器传递封包的,并没有进入路由器去取得路由器的

使用资源,所以某些路由器仅支持封包传递,并不会接收来自客户端的各项侦测,此时就会出现星号,因为traceroute预设使用的是UDP封包,如果想要尝试其他封包,可以

使用-I 与-T

由于目前 UDP/ICMP 的攻击层出不穷,因此很多路由器可能就此取消这两个封包响应功能,我们可以使用TCP来侦测,例如使用同样的方法,透过等待时间1秒,以及TCP

80端口的情况下,可以traceroute -w 1 -n -T tw.yahoo.com

察看本机的网络联机与后门: netstat用来查看某个网络接口所监听的端口是否有真的启动

netstat -[rn] <==与路由有关的参数

-r :列出路由表(route table),功能如同 route 这个指令;

-n :不使用主机名与服务名称,使用 IP 与 port number ,如同 route -n

netstat -[antulpc] <==与网络接口有关的参数

-a :列出所有的联机状态,包括 tcp/udp/unix socket 等;

-t :仅列出 TCP 封包的联机;   -u :仅列出 UDP 封包的联机;

-l :仅列出有在 Listen (监听) 的服务之网络状态; -p :列出 PID 与 Program 的檔名;

-c :可以设定几秒钟后自动更新一次,例如 -c 5 每五秒更新一次网络状态的显示;

netstat -rn  列出目前的路由表状态,且以 IP 及 port number 显示   跟 route -n 一模一样

netstat -an 列出目前的所有网络联机状态,使用 IP 与 port number

netstat 的输出主要分为两大部分,分别是 TCP/IP 的网络接口部分,以及传统的 Unix socket 部分用来作为程序数据交流的接口了,也就是表格内看到的 Active Unix domain

sockets 的内容

网络联机状态的输出部分主要分为底下几大项:

Proto:该联机的封包协议,主要为 TCP/UDP 等封包;

Recv-Q:非由用户程序连接所复制而来的总 bytes 数;

Send-Q:由远程主机所传送而来,但不具有 ACK 标志的总 bytes 数,意指主动联机 SYN 或其他标志的封包所占的 bytes数

Local Address:本地端的地址,可以是 IP (-n 参数存在时),

Foreign Address:远程的主机 IP 与 port number

stat:状态栏,主要的状态含有: ESTABLISED:已建立联机的状态; SYN_SENT:发出主动联机 (SYN 标志) 的联机封包; SYN_RECV:接收一个要求联机的主动联机封包

FIN_WAIT1:该插槽服务(socket)已中断,该联机正在断线当中;

FIN_WAIT2:该联机已挂断,但正在等待对方主机响应断线确认的封包;

TIME_WAIT:该联机已挂断,但 socket 还在网络上等待结束;

LISTEN:通常用在服务的监听 port !可使用『 -l 』参数查阅。

秀出目前已经启动的网络服务 netstat -tulnp,可以发现很多网络服务仅是针对本机的lo开放而已,internet是连接不到该端口的,关闭某个服务可以使用kill pid 或killall rpcbind

这个程序,如此就能知道哪个程序启动哪些端口了

观察本机上头所有的网络联机状态   netstat -atunp 可以查询出由远程主机的某个大于1024的端口向本地主机的某个服务的端口进行的一条联机,client是取用大于1024的端口

而server端是使用root启动一个小于1024以下的port,如果要断开此链接可以使用kill 4716的命令

至于传统的 Unix socket 的数据,记得使用man netstat查阅,这个Unix socket通常是用在一些仅在本机上运作的程序所开启的插槽接口文件,例如X window都是在本机上运行

的,不必开启网络的port,当然可以使用Unix socket,例如Postfix这一类的网络服务器,由于很多动作都是在本机上头来完成的,所以会占用很多的Unix socket

/etc/services记录了服务名称与 port number 的对应

侦测主机名与 IP 对应: host, nslookup

host 这个指令查询出某个主机名的IP,我们想要知道www.onezero.com,.cn的IP 时,可以使用host [-a] hostname [server]

-a :列出该主机详细的各项主机名设定数据

[server] :可以使用非为 /etc/resolv.conf 的 DNS 服务器 IP 来查询

列出 www.onezero.com.cn 的 IP 执行 host  www.onezero.com.cn

那么这个 IP其实就是写在/etc/resolv.conf那个档案内的DNS服务器的IP,如果不使用该档案内的主机来查询,可以执行host tw.yahoo.com 168.95.1.1

nslookup 用途与 host 基本上是一样的,用来作为 IP 与主机名对应的检查,同样是使用 /etc/resolv.conf 这个档案来作为 DNS 服务器的来源选择

-query=type:查询的类型,除了传统的 IP 与主机名对应外,DNS 还有很多信息,包括 mx, cname 等等  例如: -query=mx 的查询方法!

找出 www.google.com 的 IP 执行nslookup www.google.com

找出 168.95.1.1 的主机名 执行 nslookup 168.95.1.1

目前比较多的是使用dig这个命令

远程联机指令与实时通讯软件,其实就是在不同的计算机之间进行登入的情况,可以透过telnet,ssh或者ftp等协议来进行远程主机的登入,

终端机与 BBS 联机: telnet是早期在个人计算机上面要链接到服务器工作时,最重要的一个软件,不但可以链接服务器还可以连结BBS,不多telnet在数据的传送中使用明码

(原始数据,没有加密),所以数据在inernet上面跑的时候会比较危险一点

telnet [host|IP [port]]   yum install telnet <==默认没有安装这软件,除了连结port服务上头,还可以用telnet连结到port 110端口上,看看这个port是不是正确的启动

侦测本机端的 110 这个 port 是否正确启动?  telnet localhost 110

telnet: connect to address 127.0.0.1: Connection refused   如果出现这样的讯息,代表这个 port 没有启动或者是这个联机有问题

telnet localhost 25 从输出的结果看出,每个port所监听的服务都有其特殊的指令,例如port 25 所提供的电子邮件服务,可以使用这个『 ehlo 』的命令,而其他不同的port有

不同的程序,当然支持的命令也就不同

FTP 联机软件: ftp, lftp: email 还是有单封信件容量限制,传送几百MB的档案还是需要透过FTP这个通讯协议才行,文字接口的FTP软件主要有ftp与lftp两个,图形接口有gftp

ftp [host|IP] [port]   yum install ftp    ftp ftp.ksu.edu.tw查实登入ftp服务器,接着使用匿名登录 anonymous

ftp> help <==提供需要的指令说明,可以常参考

ftp> dir <==显示远程服务器的目录内容 (文件名列表)

ftp> cd /pub <==变换目录到 /pub 当中

ftp> get filename <==下载单一档案,档名为 filename

ftp> mget filename* <==下载多个档案,可使用通配符 *

ftp> put filename <==上传 filename 这个档案到服务器上

ftp> delete file <==删除主机上的 file 这个档案

ftp> mkdir dir <==建立 dir 这个目录

ftp> lcd /home <==切换『本地端主机』的工作目录

ftp> passive <==启动或关闭 passive 模式

ftp> binary <==数据传输模式设定为 binary 格式

ftp> bye <==结束 ftp 软件的使用

FTP算是比较麻烦的协议,使用两个port分别进行命令与数据的交流,匿名登录者的账号就是『 anonymous 』如果是私人的 FTP 时,才需要提供一组完整的账号与密码

让你的 FTP 主机的 port 开在非正规的埠口时,那你就可以利用底下的方式来连接到该部主机  ftp hostname 318 、

lftp (自动化脚本) 可以使用网址列的方式来登陆FTP服务器,lftp预设使用匿名登录 FTP 服务器,可以使用类似网址列的方式取得数据,使用上比单纯的 ftp 要好用些。由于可在

指令列输入账号/密码,可以辅助进行程序脚本的设计

lftp [-p port] [-u user[,pass]] [host|IP]

lftp -f filename

lftp -c "commands"

-p :后面可以直接接上远程 FTP 主机提供的 port

-u :后面则是接上账号与密码,就能够连接上远程主机了,如果没有加账号密码, lftp 默认会使用 anonymous 尝试匿名登录

-f :可以将指令写入脚本中,这样可以帮助进行 shell script 的自动处理

-c :后面直接加上所需要的指令

利用 lftp 登入昆山科大的 FTP 服务器  yum install lftp  lftp ftp.ksu.edu.tw 登陆后一样可以使用help,与ftp类似

CentOS 本身就有提供 gftp 了

你想要定时的去捉下昆山科大 FTP 网站下的 /pub/CentOS/RPM-GPG* 的档案,那么脚本可以这样写:

vim lftp.ksu.sh

open ftp.ksu.edu.tw

cd /pub/CentOS/

mget -c -d RPM-GPG*

bye

最后执行 lftp -f lftp.ksu.sh

还可以直接将要处理的动作加入 lftp 指令中

vim lftp.ksu.sh

lftp -c "open ftp.ksu.edu.tw

cd /pub/CentOS/

mget -c -d RPM-GPG*

bye"

最后执行 sh lftp.ksu.sh

若为非匿名登录时,则可以使用『 open -u username,password hostname 』修改 lftp.ksu.sh 的第一行,如果再将这个脚本写入 crontab 当中,你就可以定时的以 FTP 进行

上传/下载的功能,这就是文字指令的好处

图形接口的实时通讯软件: pidgin (gaim 的延伸),X Window底下使用pidgin,必须要安装pidgin了,可以yum install pidgin 处理,pidgin 支持的通讯有够多的,包括MSN

文字接口网页浏览 links 及 wget

文字浏览器:links

早期使用的是lync这个文字浏览器,CentOS从5.0以后默认使用的就是links,这个指令可以让我们浏览网页,但其实最大的功能是查阅Linux本机上面以HTML语法写成的文件

数据,Linux底下的/user/share/doc这个目录中的文件数据就是网页档案,使用vi查看会出现一堆HTML语法的内容,这个时候就要使用links这个好方法了

links [options] [URL]  选项与参数:

-anonymous [0|1]:是否使用匿名登录的意思;

-dump [0|1] :是否将网页的数据直接输出到 standard out 而非 links 软件功能

-dump_charset :后面接想要透过 dump 输出到屏幕的语系编码,big5 使用 cp950 喔

links http://www.kernel.org 获取页面后,一些常见功能按键:

h:history ,曾经浏览过的 URL 就显示到画面中

g:Goto URL,按 g 后输入网页地址(URL) 如 :http://www.abc.edu/等

d:download,将该链接数据下载到本机成为档案; q:Quit,离开 links 这个软件;

o:Option,进入功能参数的设定值修改中,最终可写入~/.elinks/elinks.conf 中

Ctrl+C :强行切断 links 的执行。

上 :移动光标至本页中 "上一个可连结点" .  下 :移动光标至本页中 "下一个可连结点" .  左 :back. 跳回上一页.  右 :进入反白光标所链接之网页.  ENTER 同鼠标 "右" 键.

links /usr/share/doc/HTML/index.html 由于环境时Linux本机的tty1~tty6,所以无法显示中文,需要设定『LANG=en_US』之类的语系,另外,如果某些时候你必须上网点选

某个网站以自动取得更新时,早期的自动在线更新主机名系统,仅支持网页更新,就要使用到links -dump 了

透过 links 将 tw.yahoo.com 的网页内容整个抓下来储存  links -dump http://tw.yahoo.com > yahoo.html

某个网站透过 GET 功能可以上传账号为 user 密码为 pw ,用文字接口处理为: links -dump http://some.site.name/web.php?name=user&password=pw > testfile

文字接口下载器: wget  links 是在进行网页的『浏览』,那么 wget 就是在进行『网页数据的取得』。浏览器下载使用的就是wget

wget [option] [网址]

若想要联机的网站有提供账号与密码的保护时,可以利用这两个参数来输入喔

--http-user=usrname  --http-password=password   --quiet :不要显示 wget 在抓取数据时候的显示讯息

wget   http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.39.tar.bz2 还可以透过proxy的帮助来下载,透过修改/etc/wgetrc来设定你的代理服务器

例如:

vim /etc/wgetrc

#http_proxy = http://proxy.yoyodyne.com:18023/ <==找到底下这几行  大约在 78 行

#ftp_proxy = http://proxy.yoyodyne.com:18023/

#use_proxy = on

将他改成类似底下的模样,记得,你必须要有可接受的 proxy 主机才行

http_proxy = http://proxy.ksu.edu.tw:3128/

use_proxy = on

封包撷取功能:

有些时候由于网络联机出现问题,使用类似ping的软件功能无法找出问题,最常见的就是路由与IP传递所产生的一些困扰,这个时候就需要分析封包的流向,也就会清楚

的了解可能发生的问题,就是利用tcpdump的图形接口的封包分析软件

文字接口封包撷取器: tcpdump 这个软件不但可以分析封包的流向,连封包的内容也可以进行监听,如果使用的传输数据是明码的话,在router或hub上面就可能被人家

监听了,tcpdump必须使用root的身份执行

tcpdump [-AennqX] [-i 接口] [-w 储存档名] [-c 次数] [-r 档案] [所欲撷取的封包数据格式]

选项与参数:

-A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。

-e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示;

-nn:直接以 IP 及 port number 显示,而非主机名与服务名称

-q :仅列出较为简短的封包信息,每一行的内容比较精简

-X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用

-i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面;

-w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接档名

-r :从后面接的档案将封包数据读出来。那个『档案』是已经存在的档案, 并且这个『档案』是由 -w 所制作出来的。

-c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听, 直到使用者输入 [ctrl]-c 为止。

所欲撷取的封包数据格式:我们可以专门针对某些通讯协议或者是 IP 来源进行封包撷取

那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有:

'host foo', 'host 127.0.0.1' 针对单部主机进行封包撷取  'net 192.168' 针对某个网域进行封包的撷取;'src host 127.0.0.1' 'dst net 192.168'同时加上来源(src)或目标(dst)限制

'tcp port 21':还可以针对通讯协议侦测,如 tcp, udp, arp, ether 等 还可以利用 and 与 or 来进行封包数据的整合显示呢

以 IP 与 port number 捉下 eth0 这个网络卡上的封包,持续 3 秒  tcpdump -i eth0 -nn

结果 6680 packets captured <==捉下来的封包数量   14250 packets received by filter <==由过滤所得的总封包数量   7512 packets dropped by kernel <==被核心丢弃的封包

tcpdump几乎都是分析封包的表头数据,至少需要了解TCP封包的表头资料理解理解才好,

输出范例中, 17:01:47.360523 IP 192.168.1.101.1937 > 192.168.1.100.22: Flags [.], ack 196, win 65219,

我们可以约略区分为数个字段

17:01:47.362139:这个是此封包被撷取的时间

IP:透过的通讯协议是 IP

192.168.1.100.22 > :传送端是 192.168.1.100 这个 IP,而传送的 port number 为 22,你必须要了解的是,那个大于 (>) 的符号指的是封包的传输方向

192.168.1.101.1937:接收端的 IP 是 192.168.1.101, 且该主机开启 port 1937 来接收;

[P.], seq 196:472:这个封包带有 PUSH 的数据传输标志, 且传输的数据为整体数据的 196~472 byte;

ack 1:ACK 的相关资料。

简单的说就是该封包是由 192.168.1.100 传到 192.168.1.101,透过的 port 是由 22 到 1937,使用的是 PUSH 的旗标,而不是 SYN 之类的主动联机标志,务必要了解TCP

表头的资料

tcpdump -i eth0 -nn port 21 tcpdump能够将所需要的数据独立取出来,上面的案例中,我们仅针对eth0做监听,所以整个eth0接口上面的数据都会被显示到屏幕上,不好分析

我们可以只取出21号端口上的联机封包

仔细看的话,你会发现封包的传递都是双向的, client 端发出『要求』而 server 端则予以『响应』,当然是有去有回啊!我们也就可以经过这个封包的流向来了解到封包运

作的过程。举例来说:

我们先在一个终端机窗口输入『 tcpdump -i lo -nn 』 的监听,

再另开一个终端机窗口来对本机 (127.0.0.1) 登入『ssh localhost』

tcpdump -i lo -nn输出的结果是:

显示的头两行是 tcpdump 的基本说明

第 3 行显示的是『来自 client 端,带有 SYN 主动联机的封包』,

第 4 行显示的是『来自 server 端,除了响应 client 端之外(ACK),还带有 SYN 主动联机的标志;

第 5 行则显示 client 端响应 server 确定联机建立 (ACK)

第 6 行以后则开始进入数据传输的步骤。

3到5就是三向交握的基础流程,上面的功能只介绍了作为我们主机的封包联机与传输的流程分析,这将有助于我们了解封包的动作,同时了解到主机的防火墙设定的规则是否

有需要修订的地方

我们还可以使用tcpdump在router上面监听【明码】的传输数据,例如FTP传输协议,例如我们先在数据端下达『 tcpdump -i lo port 21 -nn -X 』然后再以 ftp 登入本机,输入

账号和密码,结果就会有如下的信息了:

tcpdump -i lo -nn -X 'port 21'

0x0000: 4500 0048 2a28 4000 4006 1286 7f00 0001 E..H*(@.@.......等等

你可以从中发现FTP软件使用的是vsftpd,并且使用者输入dmtsai这个账号名称,密码是mypasswordisyou,使用明码的方式来传输你的网络数据是相当不安全的

另外你得了解,为了让网络接口可以让 tcpdump 监听,所以执行 tcpdump 时网络接口会启动在 『错乱模式 (promiscuous)』,所以你会在 /var/log/messages 里面看

到很多的警告讯息,通知你说你的网络卡被设定成为错乱模式!别担心,那是正常的

tcpdump -i eth0 -nn 'port 22 and src host 192.168.1.101' 使用tcpdump监听来自eth0适配卡且通讯协议为port 22 封包来源为192.168.1.101 的封包资料

图形接口封包撷取器: wireshark

tcpdump 是文字接口的封包撷取器,wireshark则是图形化接口的,目前同时提供文字接口的 tethereal 以及图形接口的 wireshark ,初始化时没有安装这套软件,你必须

使用yum去网络安装,也可以光盘安装,有两套需要安装,分别是文字接口的 wireshark 以及图形接口的 wireshark-gnome 软件 yum install wireshark wireshark-gnome

透过『应用程序』-->『因特网』-->『wireshark network analyzer』就可以启动

先要选择想要监听的接口,使用lo接口来做范例,之后使用ssh localhost尝试登陆自己,这样就能获取封包了,等到你撷取了足够的封包想要进行分析之后

画面总共分为三大区块:第一区块显示的是封包的标头资料,内容有点类似tcpdump的显示结果,第二区块则是详细的表头资料,包括讯框的内容,通讯协议的内容以及

socket pair等等信息,第三区块则是16进制与ASCII码的显示结果

任意启动 TCP/UDP 封包的埠口联机: nc, netcat

nc 指令可以用来作为某些服务的检测,因为他可以连接到某个port来进行沟通,还可以自己启动一个port来倾听其他用户的联机,

如果在编译 nc 软件的时候给予『GAPING_SECURITY_HOLE』参数的话,这个软件还可以用来取得客户端的bash,CentOS没有给予这个参数,所以不能够用来作为

黑客软件,但是nc用来取代telnet也是很棒的功能,有的系统将执行文件 nc 改名为 netcat 啦

nc [-u] [IP|host] [port]    nc -l [IP|host] [port]

-l :作为监听之用,亦即开启一个 port 来监听用户的联机;

-u :不使用 TCP 而是使用 UDP 作为联机的封包状态

与 telnet 类似,连接本地端的 port 25 查阅相关讯息  yum install nc   接着nc localhost 25这个功能和telnet几乎一样,可以去检查某个服务,我们也可以建立两个联机来传讯

我们先在服务器端启动一个 port 来进行倾听:

激活一个 port 20000 来监听使用者的联机要求 nc -l localhost 20000 &  查看服务端口netstat -tlunp | grep nc

接下来你再开另外一个终端机来看看,也利用 nc 来联机服务器,并且输入一些指令看看

nc localhost 20000 可以输入字符串了,在客户端打一些字,在服务端同时出现你输入的文字,同时给予一些额外的参数,例如标准输入与输出(stdout, stdin) 的话

就可以透过这个联机来作很多事情,自行到你主机内的 /usr/share/doc/nc-1.84/scripts/ 目录下看看这些 script,不过,如果你需要额外的编译出含有

GAPING_SECURITY_HOLE 功能,以使两机器可以进行额外指令的执行时,就得要自行下载原始码来编译

网络侦错

网络连接不通可以分为硬件问题和软件设定问题,硬件比较麻烦需要一些专门的装置来分析硬件,至于软件,大多数都是设定错误或者观念错误而已,

硬件问题:网络线材、网络设备、网络布线等

连接到internet上面去的话,需要透过网络线,交换器,NAT主机(Linux服务器或Ip分享器),ADSL调制解调器,附挂电话线路,ISP自己的机房交换机,以及internet上面的

所有设备包括路由器,网桥,其他网络线,可能出现问题的地方有:

网络线材的问题:  网络卡、Hub 及 Router 等网络设备的问题:设备配置的规则:

软件问题:IP 参数设定、路由设定、服务与防火墙设定等

绝大部分都是IP参数设定错误,路由不对,还有DNS的ip设定错误,利用一些侦测软件查一查,就知道问题出哪里了:

网络卡的 IP/netmask 设定错误: IP 冲突、子网掩码设定错误,网络卡的驱动程序使用错误、网络卡的 IRQ、 I/O Address 的设定冲突

路由的问题 (route table): 最常见的就是预设路由 (default gateway) 设定错误了,或者是路由接口不符所导致的问题

通讯协议不相符:不同的操作系统之间的通讯协议,例如早期的Windows 98与Windows 2000之间的网芳要达成沟通,Windows 98需要安装NetBEUI,又例如两台LInux主机

要通过NFS通讯传输数据时,两边都要支持rpcbind这个启动RPC协议的程序才行,

网络负荷的问题 (loading):大量的数据封包涌进 Server 或者是 Hub 或者是同一个网域中,就有可能造成网络的停顿甚至挂点,区网内有人使用 BT (P2P 软件) 或

者是有人中毒导致蠕虫充满整个区网,也会造成网络的停顿问题

其他问题::一些 port 被防火墙挡住了,应用程序中用户的网络设定错误

处理时把握两个原则:从自身的环境侦测,由自身PC上的网络卡查起,到网络线,到HUB,再到调制解调器等等的硬件先检查完,最好用的软件就是ping,硬件没问题接着

考虑软件,例如更改了核心导致核心不能驱动新的网卡了,确认IP,看看自己的网卡有无驱动,能否取得正确的IP参数来联机,确认区网联机,:利用 ping 来沟通两部主机

(路由器或 IP 分享器),确定网络线与中继的 hub/switch 工作正常,确认对外联机,确认DNS查询,利用nslookup或host或dig检查,确认internet节点

可以利用 traceroute 检查各节点是否没问题,确认对方服务器正常服务,确认我方服务器:如果是别人连不上我这部主机,检查主机某些服务正确启动否

可利用 netstat 检查,或是否某些安全机制的软件没有设定好SELinux 这项机制,防火墙或权限的问题:是否由于权限设定错误所致,是否由于你的机器有防火墙忘记启用可

联机的埠口所致,可以透过tcpdump来处理

步骤一:网络卡工作确认,利用lspci 以及dmesg查询相关的设备与模块的对应,捉不到网卡驱动程序,除了自己编译之外,或者购买一张便宜的网卡来应付

确定可以手动直接建立 IP 参数:在顺利的加载网络卡的模块,并且『取得网络卡的代号』之后,接着尝试使用ifconfig或ip来直接给予一个网络地址试试

看能否给予 IP 设定,ifconfig eth0 192.168.1.100,如果可以建立起该 IP ,就以 ping 来检测看看,如果有响应表示网卡的设定没有问题,开始检测局域网中的各个

连接硬件

步骤二:局域网络内各项连接设备检测:关于网域的概念,知道所谓的 192.168.1.0/24 这种网域的表达方式所代表的意义,子网掩码 (Netmask)的意义

关于 Gateway 与 DNS 的设定,这两个值并非填写你的Linux主机的IP,应该是IP分享器的IP,与DNS服务器的IP地址

关于 Windows 端的工作组与计算机名称,假如需要资源共享,那么就必须在windows系统中开放档案分享,并且建议所有的计算机将工作组设定相同,主机名

不能相同,这个只于网芳及SAMBA服务器有关,主机 IP 都设定正确了,你就可以使用 ping 来测试两部区网内主机的联机,失败的话使用ifconfig查看IP是否在同一个

网段中,联机的线材问题:可以透过连接到 Switch 上的灯号来判断,跟朋友借一条 OK 的网络线来测试看看,或者网卡或 Hub/Switch 本身出问题

最后就是要『取得可以对外联机的 IP 参数』

步骤三:取得正确的 IP 参数:必须要可以跟 public IP 进行沟通才行,最常发现无法顺利取得 IP 的错误就是『BOOTPROTO』这个设定值设定错了!因为 static 与 dhcp

协议所产生的 IP 要求是不一样的,使用 ADSL 拨接的, 但是老是无法拨接成功,将ADSL 的调制解调器整个关机,将 Switch/Hub 也关掉电源;

静待十分钟,等这些设备比较『凉快』一点后,再重新插上电源;将 Linux 连接到 ADSL 的那块网卡 (假设为 eth0) 在 ifcfg-eth0 内,『ONBOOT』设定为 no,

重新启动网络 (/etc/init.d/network restart),然后再执行 adsl-start,如果还是无法拨接成功,并且你已经确认内部网域没有问题

步骤四:确认路由表的规则:ping -c 3 168.95.1.1如果有相应,表示你的网络可以连接到internet,如果明明取得正确的IP却无法连接到外部的主机,我们网域内的资料

传输可以直接利用MAC传送,不在网域内的数据需要通过路由器,就是那个default route,来帮忙传递封包,如果是public IP无法连接到外部,可能就是路由与防火墙

的问题了,关闭防火墙又可以缩小范围了,接着就用 route -n 来检查啊

步骤五:主机名与 IP 查询的 DNS 错误:可以链接IP,不能访问域名,那就是/etc/resolv.conf的问题了,初学者都以为 TCP/IP 内的 DNS 主机是填上自己的 Linux 主机,

这是不对的 (除非你自己的 Linux 上面有 DNS 服务),另外每部主机都会有主机名,预设的是localhost,这个主机名会有一个 127.0.0.1 的 IP 对应在 /etc/hosts中

步骤六:Linux 的 NAT 服务器或 IP 分享器出问题: NAT 服务器最简单的功能就是 IP 分享器啦!NAT 主机一定是部路由器,所以必须在Linux上面观察正确的路由信息,NAT

上面的防火墙设定是否合理,IP分享器上面是否有抵挡的机制,

步骤七:Internet 的问题,internet上面某个节点出了状况,想要确认是否来自Internet的话,使用traceroute查看

步骤八:服务器的问题: 服务器并没有开放该项服务,设定权限错误,那么 SELinux 反而可能会抵挡该服务的提供!而其他例如 /etc/hosts.deny, PAM 模块等等,

造成联机无法成功,防火墙的问题,防火墙设定错误也是一个很常见的问题,可以使用 tcpdump 来追踪封包的流向, 以顺利的了解防火墙是否设定错误

总之牵涉到的命令与文件包括:lspci,demsg(网卡问题), ifconfig(IP参数是否正确),ping(查看线路的状况),route -n(查看DNS状态dig,host) ,/etc/resolv.conf,

SELinux设定,防火墙设定,查看服务netstat -tunlp 查看节点 traceroute 查看主机名 hostname 服务设定值与各项登陆档   
.

Linux 网络基础学习相关推荐

  1. 第四课 k8s网络基础学习-DNS和DHCP学习

    第四课 k8s网络基础学习-DNS和DHCP学习 tags: k8s网络 DNS DHCP 文章目录 第四课 k8s网络基础学习-DNS和DHCP学习 第一节 DNS介绍 第二节 DNS的linux使 ...

  2. k8s网络基础学习-Calico网络插件

    第十课 k8s网络基础学习-Calico网络插件 tags: k8s网络 calico proxy arp bgp full mesh bgp RR 文章目录 第十课 k8s网络基础学习-Calico ...

  3. 第八课 k8s网络基础学习-VxLAN基础

    第八课 k8s网络基础学习-VxLAN基础 tags: k8s网络 eNSP wireshark VxLAN 文章目录 第八课 k8s网络基础学习-VxLAN基础 第一节 VxLAN 1.1 VxLA ...

  4. linux 网络编程学习

    linux 网络编程学习  Linux网络编程学习路线 - CTHON - 博客园 (cnblogs.com)

  5. [Linux网络编程学习笔记]索引

    一.Linux基本知识 [学习笔记]Linux平台的文件I/O操作 [学习笔记]Linux平台的文件,目录及操作 [Linux学习笔记]标准输入输出 [Linux学习笔记]进程概念及控制 [Linux ...

  6. Linux 网络基础 C语言常用API 快速翻阅笔记 (字节序篇)

    Linux 网络基础(字节序篇) 一.字节序大小端 1.大小端简介 2.C语言判断大小端 二.大小端 C语言函数 1.将十进制数字转成网络字节序 2.将网络字节序转成十进制数字 三.IP字符串与网络字 ...

  7. 编程开发:Linux网络编程学习笔记

    非常全面.通俗易懂.值得借鉴的Linux网络编程学习笔记.关键字:linux linux编程 网络编程 linux网络编程 下载地址:点我下载 特别说明:本资源收集于网络,版权归原作者及版权商所有,仅 ...

  8. 网络基础学习:ip地址的知识

    网络基础学习:ip地址的知识 IP地址是什么? 如何查询计算机ip ip分为几类 IPv4和IPv6 IPv4和IPv6的通信 IP地址是什么? IP地址是指用于标识在网络上的设备或节点的一组数字,它 ...

  9. 6 linux 制作raw命令_云计算网络知识学习-linux网络基础

    1 linux虚拟网络基础 1.1 Device 在linux里面devic(设备)与传统网络概念里的物理设备(如交换机.路由器)不同,Linux所说的设备,其背后指的是一个类似于数据结构.内核模块或 ...

最新文章

  1. C#内置函数 RunSql的使用
  2. java发送苹果消息慢_Spring-boot JMS 发送消息慢的解决方法
  3. snowflake算法 php,PHP实现Snowflake生成分布式唯一ID的方法示例
  4. python处理excel教程实例-python如何处理excel数据
  5. linux 下载mysql5.7.22
  6. php pdo sql注入,「原创」PHP实战-PDO优化及 SQL注入
  7. Docker Windows 安装
  8. 《火星人敏捷开发手册》 2011-08-18版本发布
  9. LeetCode112. 路径总和(DFS)(递归)
  10. Atitit TPL(事务处理语言 目录 1.1. 事务隔离级别 1 1.2. Savepoint技术 1 2. Tpl 1 2.1.  打开事务 START TRANSACTION; 1 2.2.
  11. M2Det 论文笔记
  12. 双硬盘分别装windows和linux,双硬盘分别安装windows和Ubuntu20双系统
  13. 大连计算机学校放假了,大连高校寒假排行榜出炉!没想到今年假期最短的竟然是这所学校!...
  14. 针对全局的接口出入参加解密-AES/ECB/PKCS5Padding
  15. 棋盘格相机标定图片拍摄方法
  16. (4)量子态矢与算子(算符)
  17. 精品分享:解决ES集群状态为yellow,原因(cannot allocate because allocation is not permitted to any of the nodes)
  18. 《口算大作战 概念版》功能规格说明
  19. \t\t无锡联通宽带最新覆盖小区名单?
  20. joblib.externals.loky.process_executor.BrokenProcessPool: A task has failed to un-serialize. Please

热门文章

  1. 重温java知识(三十九、JUC并发编程之五:线程锁之StampedLock【无障碍锁】)
  2. 氙灯老化测试研究|汽车氙灯测试方法:相关性研究
  3. 用不到 50 行的 Python 代码构建最小的区块链
  4. 市场分析-全球与中国自动常压灌装机市场现状及未来发展趋势
  5. mysql 给库赋权,MySQL 8.0.18给数据库添加用户和赋权问题
  6. 万丈高楼平地起之线程篇
  7. CUDA版本的Locality-aware NMS
  8. Applied Cryptography:chapter 8 key management
  9. mfc 计算dgi+ 字符宽度_Python综合应用:教你用字符打印一张怀旧风格的照片
  10. 【大数据】大数据相关概念