码迷,mamicode.com
首页 > 其他好文 > 详细

2016.9.21 鸟哥私房菜服务器篇-第二章网络基础-总结

时间:2016-09-21 11:37:44      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:

第二章-网络的基本概念

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 portIP数据包是利用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的解析。

 

2016.9.21 鸟哥私房菜服务器篇-第二章网络基础-总结

标签:

原文地址:http://www.cnblogs.com/lyh421/p/5891948.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!