2016.9.21 鸟哥私房菜服务器篇-第二章网络基础-总结
第二章-网络的基本概念
2.1网络
操作系统很多,比如windows/linux/os X等,这么多的操作系统(不同国家的人)如何进行网络沟通(语言交流)呢?
制定共同的标准。然后在你的系统里提供可以加入该标准的程序代码。
网络是跨平台的。
2.1.1 什么是网络
网络就是几部计算机主机或者网络打印机之类的接口设备,通过网线或者无线网络技术,将这些主机与设备连接起来,使得数据可以通过网络介质(网线或者网卡等硬件)来传输的一种方式。
以太网已经是一项公认的标准接口了,大家可以依据这个标准来开发自己的硬件,然后就可以加入以太网的世界了。所以购买以太网络的时候,只需要查看以太网卡支持哪些标准,就能知道这个硬件的功能是什么,而不需要在意是哪个公司生产的。
2.1.2 计算机网络的组成组件
节点:具有网络地址(ip)的设备。
服务器主机:提供数据以响应用户主机。
工作站或者客户端:任何在计算机网络输入的设备都可以是工作站。主动请求去连接来获取数据的,就是客户端。
网卡(Network Interface Card):内置或者外接在主机上的设备,用于提供网络连接。
网络接口:利用软件设计出来,提供网络地址(IP)。一张网卡至少可以搭配一个以上的网络接口。
网关(gateway):具有两个以上的网络接口,可以连接两个以上不同网段的设备。比如IP路由器。
2.13 计算机网络的范围
局域网LAN,广域网WAN。
2.1.4 计算机网络协议:OSI七层协议
各个节点是如何沟通信息的呢?通过标准的通信协议。
但是由于整个网络的连接很复杂,比如包括硬件、软件数据封装、应用程序的互相链接等等。所以采用分层。提高可变性、降低耦合度。
OSI:open system interconnection。应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。(每层更详细的解释看书《服务器篇》p37 表2-1)//TODO
每层都只认识对方同一层次的数据。整个的传送过程:发送端把数据从第七层一直往下传递至第一层,然后传递到接收端,接收端把数据从第一层一直往上传递至第七层。
每一层都会对数据进行包裹或者拆封。相当于礼物的盒子,表面写了一些信息比如传给谁、来自谁等等。每传递一层都加一个外部盒子,或者拆封一个外部盒子。
第二层(数据链路层)比较特殊。因为它位于软件包(packet)和硬件数据帧(frame)中间,需要将软件包装的包裹放入到硬件能够处理的包裹中,所以这个盒子比较特殊,尾部还多了处理码,且分为两个子层进行处理。
2.1.5 计算机网络协议:TCP/IP
TCP/IP也是OSI七层协议的概念,只是将其简化成四层。
将OSI的应用层、表示层、会话层合并成了一个应用层。数据链路层和物理层合并成了一个网络接口层。(对比查看书《服务器篇》p38 图2-4)//TODO
举个例子,TCP/IP如何工作:
应用程序阶段:打开浏览器,输入网址,按下enter。浏览器将网址信息和数据打包成一个数据包,传递给TCP/IP的应用层。
应用层:此层有HTTP通信协议,按照此协议将接收到的数据包封装,添加一个应用层报头进行标记,传给传输层。
传输层:HTTP为可靠连接,所以被丢入TCP封装内,添加一个TCP封装报头进行标记,传给网络层。
网络层:将TCP数据封装到IP数据包中,添加一个IP报头标记,传给网络接口层。
网络接口层:假设使用的是以太网,此时IP会根据CSMA/CD标准,封装到MAC数据帧中,添加MAC帧头进行标记。再转成比特流后,利用传输介质发送到远程主机上。
总结一下,每层的动作都是:接收、封装、标记、传递。
等到雅虎收到数据包之后,再一层层解开来。最后传递给雅虎的www服务器软件获得用户想要的数据,再按照刚刚一样的步骤,层层封装传递给用户。
2.2 TCP/IP的网络接口层的相关协议
网络接口层是最底层。与硬件的关系比较密切。所以主要介绍硬件、硬件相关的协议、MAC数据帧等。
2.2.1 广域网使用的设备
2.2.2 局域网使用的设备---以太网
局域环境中,最常用的就是以太网。但是注意!整个网络世界并非只有以太网这个硬件接口。
1.以太网的速度
Mbps:M bits/seconds
2.以太网的网线接头(交叉/直连线)
2.2.3 以太网络的传输协议:CSMA/CD
整个以太网的重心就是以太网卡。以太网的传输就是网卡对网卡之间的数据传递。
每张以太网卡都有独一无二的卡号,即MAC(media access control)。
CSMA/CD:Carrier Sense Multiple Access with Collision Detection。
参看书《服务器篇》p43图2-6。//TODO
集线器:一种网络共享介质设备。网络共享介质设备,在单一时间点内,只能被一台主机所使用。打个比方,上述环境就是十字路口,集线器就是那个路口。这个路口一次只能通过一辆车,否则会发生车祸。
那么网卡之间是如何传输数据的?
假设A主机要发送数据给D主机,在CSMA/CD协议且图2-6情况下,步骤如下。
1.监听介质使用情况(carrier sense):确认没有人在使用,A才发送数据帧。
2.多点传输(multiple access):A主机发送的数据被集线器复制一份,然后发送给所有连接到此集线器的主机B、C、D。但是D才是真正目标,所以B、C将数据丢弃,D将数据抓取。
3.冲突检测(collision detection):假设A、B在同时间发送数据帧,那么A、B送出的数据冲突,则这些数据被损毁。A、B各自随机等待时机再次发送。
既然共享介质设备同一时间只能有一个主机使用,那为何大家可以同时上网?
假设传输100MB的文件,以10Mbps传输时,集线器就得被某一个主机使用80s,在此期间别人都不能上网了?
不是的。标准数据帧在网卡或其他以太网设备中,一次只能传输1500bytes,因此100MB需要被拆分,一个个的传送。且每一个都要经过CSMA/CD机制。哪怕只有一台主机在使用,每次发送数据包时也要等待一段时间。
2.2.4 MAC的封装格式
上面提到的CSMA/CD发送出去的数据帧(frame),就是MAC。
这个数据帧上有两个很重要的信息:来源和目标的网卡卡号。所以又将网卡卡号成为MAC地址。
数据帧的组成,查看书《服务器篇》p44的图2-7 //TODO
网卡卡号就是硬件地址,可以用ipconfig(windows)查看。
范围是00:00:00:00:00:00 ~ FF:FF:FF:FF:FF:FF。
2.2.5 MTU(最大传输单位)
2.2.6 集线器、交换器的相关机制:
1.区别一:
前面提到,集线器是网络共享设备,因为CSMA/CD的缘故,在网络繁忙的时候会有冲突的情况发生。
交换器(switch)是非共享的设备。交换器等级很多,这里讨论支持OSI第二层的交换器。交换器内有一个内存,记录每个switch port与其连接的PC的MAC地址。所以当两端的PC要传递数据时,每个数据帧通过交换器的内存数据,直接传递到目标主机上。客服了数据包的冲突。
2.区别二:
集线器共享带宽,交换器每个端口都有独立带宽。比如一个10/100Mbps的集线器连接5台主机,那么这5台主机共享10/100Mbps。
但是交换器每个端口都有10/100Mbps。如果A和B都像C发数据,那么由于C有10/100Mbps,则A、B来抢占这10/100Mbps。
2.3 TCP/IP的网络层相关数据包与数据
要有网络,就要有网络相关的硬件。目前最常见的网络硬件接口为以太网,包括网线、网卡、Hub/Switch等。
而以太网上传输,使用(网卡卡号为标准的)MAC数据帧,配合CSMA/CD的标准传送。
软件部分,Internet就是TCP/IP这个通信协议的通称。Internet最重要的就是IP,所以下面讲网络层的IP和路由。
2.3.1 IP数据包的封装
IP有两种:IPv4和IPv6。
IPv4仅32位,预计2020年左右就会分配完毕。因此有了IPv6,IPv6可达128位。但目前还是IPv4比较多使用。所以下文中的IP都是针对IPv4。
在比MAC大的情况下,操作系统会将IP数据包进行拆分。IP数据包的报头数据封装,看书《服务器篇》p50的图2-11。//TODO
其中比较重要的参数:
只需要知道IP报头里含有:TTL、Protocol、来源地址与目标地址。
TTL(time to live):生存时间,范围0~255。当这个IP数据包通过一个路由器时,TTL就会减1,当TTL=0时,这个数据包将被丢弃。所以让数据包通过255个路由器挺难的。
Protocol Number(协议代码):用于记录每个IP数据包的内容。然后通过这个代码知道该用什么协议来解析。比如6表示通信协议是TCP。
source address:32位的IP地址。
destination address:32位的IP地址。
2.3.2 IP地址的组成与分级
IP的表达式:
00000000.00000000.00000000.00000000 =》 0.0.0.0
11111111.11111111.11111111.11111111 =》255.255.255.255
前半部分是网络号码(Net_ID),后半部分是主机号码(Host_ID)。在同一个物理网段内,主机的IP具有相同的网络号码,唯一的主机号码,那么这些IP群就属于同一个网络内的IP网段。
比如192.168.0.0~192.168.0.255就是同一网络的IP群。
注意:Host_ID全为0或1时已经有特殊含义,主机不能使用。
IP在同一网段有什么意义?
可以通过广播进行网络的连接,或者直接网卡对网卡传递数据。如果不在同一网段,那么由于广播地址不同(Host_ID全为1时为这个网段的广播地址),无法通过广播方式连接。需要通过路由器(Router)来将网络连在一起。
打个比方:在同一个网段可以看做住在同一街道,主机号码是门牌号。如果大家都住在这条街道,可以用街道广播的方式来沟通。如果有人不住在这条街道,就要去邮局发信息。邮局就是路由器,所以只要知道邮局在哪里,还是可以沟通的。
IP的分级:分为5级,只需要记住A、B、C级即可,因为能够用来设定在一般系统上面的,也就这三个级别。网络号码占据的位数会影响到主机的数量。分级方式查看书《服务器篇》p55 //TODO
2.3.3 IP的种类与取得方式
1.种类
public IP :公共IP,有这种IP才可以连上Internet。
private IP:私有IP,不能直接连上Internet,主要局域网络内的主机连接规划。
2.取得方式
直接手动配置、通过拨号获取、自动获取参数(DHCP)。
2.3.4 Netmask、子网与CIDR(Classless Interdomain Routing)
考虑class等级的IP,网络号码占据24位,主机号码占据8位。在这个网段内,主机数量256-2。那么253台主机都会对你进行广播,很没有效率。更别说Class A的主机量有256*256*256-2台。
所以可以对网段C再进行划分。比如第一位Host_ID拿出来作为标记,分为两个子网,那么每个子网就只有254/2台主机了。
192.168.0.0 0000000(第一个子网)
192.168.0.1 0000000 (第二个子网)
1.Netmask与子网划分
又称subnet netmask,子网掩码。
以网段192.168.0.0~192.168.0.255这个网段举例。
11000000.10101000.00000000.00000000
11000000.10101000.00000000.11111111
对这个网段,前24位是net_id,后8位是host_id。net_id是不变的,所以前24位是不能使用的,只有后8位才能使用。
用掩码的方式表示,1表示占用,0表示可使用。
11111111.11111111.11111111.00000000 =》255.255.255.0
针对上面提到的两个Class C的两个子网,他们的掩码是:255.255.255.1 0000000。
192.168.0.0 0000000 (第一个子网)
192.168.0.1 0000000 (第二个子网)
因为倒数第八位已经用作net_id来区分两个子网,所以这一位不管是0还是1,都是子网内所有主机不能修改的,即被占用。在掩码里,被占用就用1表示。
两个例题。
(1)计算出172.16.0.0,当net_id占用23个位时,这个网络的netmask,network,brodcast等参数。
172.16.0.0是class b,正常情况下net_id占据16位,可见从host_id处借来7位用作划分子网。
掩码:255.255.1111111 0.00000000 =》255.255.254.0
network(第一个):172.16.0000000 0.00000000 =》172.16.0.0
broadcast(最后一个):172.16.0000000 1.11111111 =》172.16.1.255
(2)对192.168.0.0~192.168.0.255这个网段来说,当net_id为26位时,一共分了多少段?
192.168.0.0~192.168.0.255正常情况下,net_id=24位,所以借了2位host_id来划分子网。所以一共分为2^2=4个子网。
256/4 = 64,所以子网分别是0~63,64~127,128~191,192~255。
因为知道network和netmask之后,就可以计算出该网络的所有IP,所以可以用这两个参数来表示一个网络。
network/netmask:192.168.0.0/255.255.255.0 或者192.168.0.0/24
2. CIDR(classless interdomain routing)
无类别域间路由。
有时候网络划分得太细,担心路由信息庞大导致网络效能不佳。和子网划分相反,有时候反将net_id作为host_id来将多个网络写成一个。这种打破原本IP等级的方式就是CIDR。
2.5.3 路由概念
前面提到过,不住在一条街道的,就需要通过邮局来传递信息了。即非局域网内的数据,需要通过路由器来连接。
当主机想要发送数据的时候,它参考“路由表”。每个主机都有自己的“路由表”。
(1)查询IP数据包的目标IP地址。
(2)查询该地址是否位于“路由表”里。
(3)不在同一个网段,路由表会找不到符合值。就会将IP数据包发送到默认网关(default gateway)里去,比如书《服务器篇》p62的图2-12中的server A。//TODO
(4)server A查询自己的路由表,将IP数据包传递至目标IP地址。
Gateway/Router(网关/路由器)就是负责在不同网络之间的数据传递。ps:你的主机一定要和主机配置的gateway在同一个网段(你要知道邮局才能寄信)。
Internet上的路由并不是静态的,它会随着环境的变化而修订数据包的传递方向。
2.3.6 观察主机路由:Route
[root@www ~] # route [-n]
-n:将主机名以IP的方式显示。
2.3.7 IP与MAC:网络接口层的ARP与RARP协议
ARP:Address Resolution Protocol,网络地址解析协议。
RARP:Revers ARP,反向网络地址解析协议。
三个问题:
1.前面提过,用于传递数据的是以太网,而以太网主要是用网卡卡号(MAC地址),那么IP和MAC之间的关系是什么?
我们的主机想要知道某个IP配置于哪个以太网卡上时,就会对整个局域网发出ARP数据包,对方接收到ARP数据包之后,返回它自己的MAC给我们的主机。接下来就是发送数据了。
但是每次传送数据都要获取一次IP地址很麻烦,所以当获取到MAC之后,就将目标IP和网卡卡号存于主机的ARP table中。保留20分钟。
2.如何获取本机的(网卡卡号)MAC?
linux:ifconfig eth0
windows:ipconfig/all
显示出来的物理地址即是。
3.如何获取ARP table中的IP/MAC对照数据呢?
arp -[nd] hostname
arp -[s] hostname(IP) Hardware_address
具体使用参看书《服务器篇》p66。
2.3.8 ICMP协议
ICMP:Internet Control Message Protocol,internet信息控制协议。
它是一个错误检测与报告的机制。用来确保网络的连接状态与连接的正确性。
指令:ping与traceroute。
ICMP还是网络层的重要数据包之一。
2.4 TCP/IP的传输层相关数据包与数据
网络层的IP数据包负责将数据送到正确的目标主机上去。但是这个数据包会不会被接收,有没有被正确接收,就是传输层的任务之一了。(传输层在网络层上,传输成的数据包打包好之后,放入IP数据包)
传输层有两个重点:面向连接的TCP数据包,无连接的UDP数据包。
MAC、IP、 TCP数据包的关系如图:
TCP数据包报头比较重要的几个参数:
source / destination port:IP数据包是利用IP地址连接两端,但是具体连接到哪里,是通过port决定的。我的主机必须启动一个可以让client端连接的端口,即port。同样,客户端想要连接我的主机,也要开一个端口。
code:进行连接的时候,需要说明这个连接的状态。比如ACK=1表示为响应数据包,SYN=1表示希望建立同步处理。
端口信息详解。
1.通信端口
TCP数据包中,报头数据最重要的参数就是16位的source port和destination port。前面提到过服务器与客户端要达成连接的话,两边必须要有一个对应的端口来达成连接信道,让数据通过这个信道来沟通。可以理解成使用飞路粉时的壁炉。知道地址不够,还要知道是那个壁炉出来。
通过程序的执行,可以打开端口。比如启动一个www服务器软件,这个软件会自动唤起port80来等待客户端连接。
2.特权端口(privileged port)
Internet上有很多固定端口,这些port number通常小于1024,比如80。他们提供给很多知名的网络服务软件使用。而小于1024的端口必须以root身份才能启动,所以叫做特权端口。
3.socket pair
要达成连接必须要同时提供IP和端口。这个成对的数据就是socket pair。
IP:port
2.4.2 TCP的三次握手
TCP称为可靠数据传输协议,传送数据的机制很复杂,最重要的就是三次握手。
四个阶段:
A 数据包发起(我要和你聊天啦,你在吗?)
B 数据包接收,确认数据包传送(我在,你在吗?)
C 回送确认数据包(我也在。)
D 取得最后确认(知道你在了,那开始聊天吧。)
2.4.3 无连接的UDP协议
UDP:user datagram protocol,用户数据报协议。它不提供可靠的传输模式,接收端在收到数据包(我要和你聊天啦)之后不会回复确认数据包。
参考场景:老师讲课,不可能一直问,你在听吗我要开始讲了哦,你如果开始听了告诉我,我就开始讲。这样速度太慢。它不管你听不听,就一直讲(传输数据)。
适用于数据正确性不是很重要,而速度更为重要的场景。
很多软件同时提供TCP、UDP传输协议。
2.4.4 防火墙与OSI七层协议
从前面可以知道,数据的传送其实就是数据包的发送与接收动作。并且不同的数据包上面都有不一样的header。此外,数据包上还有IP:port信息,如果是可靠性连接的TCP数据包,还含有SYN/ACK等信息。
所以,可以通过过滤某些特定的IP、port或者header信息,将某些数据包丢弃掉。这就是防火墙的基本原理。
以OSI七层协议为例:
第二层:针对source或destination的MAC进行阻挡
第三层:针对source或destination的IP,或者ICMP的类别进行阻挡
第三层:针对source或destination的port,或者TCP连接的code进行阻挡
2.5 连上Internet前的准备事项
为什么我不知道yahoo的主机IP,但是我的主机却可以连接到yahoo的主机?
2.5.1 IP地址、主机名与DNS系统
主机名称host name对应IP的系统,就是Domain Name System(DNS)。DNS最大的功能就是进行主机名称与该主机IP的解析。
在浏览器输入http://tw.yahoo.com时,计算机向DNS主机请求查询对应这个网址的IP是多少,DNS将查询到的IP回应给浏览器。浏览器根据此IP进行连接。
所以主机必须要知道DNS主机的IP,否则无法进行查询。
linux里,DNS主机IP的设定在/etc/resolv.conf这个文件里。
2.5.2 连上Internet的必要网络参数
IP、Netmask、Network、Broadcast、Gateway、DNS。而Network和Broadcast可以通过IP和Netmask得到,所以实际是四个:IP、Netmask、Gateway、DNS。
2.6重点回顾
更为详细的回顾查看书《服务器篇》p77。
1.目前网络媒体大部分以以太网为标准,但是以太网只是其中一个选择而已。
2.以太网上最重要的传输数据技术为CSMA/CD。而传输过程中,最重要的MAC数据帧内,硬件地址hardware address最重要。硬件地址有时也说出MAC地址。
3.OSI七层协议与TCP/IP四层协议。现今网络基础架构在TCP/IP上。
4.ARP table可以记录MAC与IP的对应关系。
5.Hub为共享带宽设备,Switch不是,它克服了数据包冲突。
6.IPv4为32位。
7.IP由Net_ID与Host_ID组成,加上Netmask参数,可以设置网段。
8.IP的等级分为A、B、C常见等级。
9.网段可以继续分为更小的Subnetwork,通过将Host_ID借位给Net_ID技术。
10.IP分为私有IP和公有IP,私有IP不能连上Internet。
11.每个主机都有自己的路由表,这个路由表规定了数据包的传送路径。最重要的参数是默认网关Gateway/Router。
12.TCP数据包的报头数据中,Code所带有的ACK、SYN、FIN等是最常用的标记,可以控制数据包的连接成功与否。
13.TCP是可靠连接协议,需要通过三次握手。UDP不需要连接确认。
14.ICMP数据包最重要的功能是汇报网络的检测状况,所以不要使用防火墙完全阻挡。
15.一台主机的重要网络参数:IP、Netmask、Gateway、DNS。
16.在主机的port中,只有root能使用小于1024的port。
17.DNS最主要用户host name与IP的解析。