Open jinhucheung opened 8 years ago
网络是将主机用网线或无线技术连接起来,使主机资源透过网络设备来传输的一种技术,其跨平台,一个标准用于不同操作系统间,这个标准为IEEE标准,其分为硬件标准(以太网络设备)与通信协议(TCP/IP)
组成网络的元件有以下:
通常以距离来划分网络分为区域网络(Local Area Network,LAN)与广域网络(Wide Area Network,WAN),区域网络通过用较好的设备来连接,而广域网络则用较便宜的设备
因为网络通信涉及到相当多的环节,如硬件/软件封包等,故将网络通信的实现划分成多个层级,每个层级独立,只负责处理本层的任务
OSI七层模型如下图:
七层模型中越接近硬件的层为底层,越接近应用程序的为高层,每层只认识对方同一层的数据,且每层都有自己独特的表头资料(header)
每层负责的任务如下表:
OSI 模型 | ||||
---|---|---|---|---|
数据单元 | 层 | 功能 | ||
主机层 | Dat(数据) | 7. 应用层 | 网络进程到应用程序。提供为应用软件而设的界面,以设置与另一应用软件之间的通信。例如: HTTP,HTTPS,FTP,TELNET,SSH,SMTP,POP3等 | |
6. 表示层 | 把数据转换为能与接收者的系统格式兼容并适合传输的格式 | |||
5. 会话层 | 负责在数据传输中设置和维护电脑网络中两台电脑之间的通信连接 | |||
Segments(数据段) | 4. 传输层 | 把传输表头(TH)加至数据以形成数据包。传输表头包含了所使用的协议等发送信息。例如:传输控制协议(TCP/UDP) 等 | ||
媒介层 | 网络分组/数据报文 | 3. 网络层 | 决定数据的路径选择和转寄,将网络表头(NH)加至数据包,以形成分组。网络表头包含了网络数据。例如:互联网协议(IP) 等 | |
Frame(数据帧) | 2.数据链路层 | 负责网络寻址、错误侦测和改错。当表头和表尾被加至数据包时,会形成了帧。数据链表头(DLH)是包含了物理地址和错误侦测及改错的方法。数据链表尾(DLT)是一串指示数据包末端的字符串。例如以太网、无线局域网(Wi-Fi)和通用分组无线服务(GPRS)等 | ||
Bit(比特) | 1.物理层 | 在局部局域网上传送帧,它负责管理电脑通信设备和网络媒体之间的互通。包括了针脚、电压、线缆规范、集线器、中继器、网卡、主机适配器等 |
由于OSI过于严谨,所以实际使用时会将其简化,那就是TCP/IP协议,其为4层。
TCP/IP与OSI对应关系以及使用协议如下图:
TCP/IP如何运行,我们以打开一个网址为例:
TCP/IP最底层的链接层主要与硬件有关,下面会说明WAN/LAN的硬件与以太网络的传输协议:CSMA/CD,以及MAC帧等概念
LAN使用的设备较为便宜,但使用的设备非常多,一般用户通常接触到的主要是ADSL或光纤等
早期网络只能通过数据机加上电话线以及电脑九针端口,通过点对点协议(Point-to-Point Protocol,PPP,它通常用在两节点间创建直接的连接),来访问网络,速度非常慢,通过打电话后就不能使用网络了
利用现有的电话线路来达成网络连线的目的,只是连线两端都需要有ISDN数据机来提供连线功能,其有多种通道可以使用
采用频分多路复用技术把普通的电话线分成了电话、上行和下行三个相对独立的信道,从而避免了相互之间的干扰,注意ADSL中速度单位是bits/s,比如下行速度2Mbps,实际是256KB(types)ps
是利用有线电视双向同轴电缆提供互联网相关应用服务的技术
在局域网中使用的设备是以太网
以太网的传输主要就是网卡对网卡间的资料传递,每张网卡出厂时,都有独一无二的卡号,我们称为MAC(物理地址),其中传输遵循CSMA/CD协议
CSMA/CD传输的单位就是帧(整个网络硬件上面传输资料的最小单位),一条网路一次只能通过一个帧,其内容如下
其中目的地址与来源地址就是MAC(物理地址),其范围是00:00:00:00:00:00
到FF:FF:FF:FF:FF:FF
(6bytes,前3bytes是厂商编号,后3bytes是厂商定义编号) ifconfig
可以查到MAC
帧实际数据大小范围:46bytes-MTU(1500bytes)
以太网标准能传输的实际数据最大量称为MTU,通常是1500bytes,当IP包过大时,就会将IP包拆包装进帧中.
虽然MTU可以扩大,其需要硬件支持,不仅是自身的设备,还要求接收端的设备支持,所有通常不扩张
集线器与交换机都是以太网常用的设备
集线器:接收到帧,并向所有端口广播出去 交换机: 交换机内部的CPU会在每个端口成功连接时,通过将其MAC地址和端口对应,形成一张MAC表。在今后的通讯中,发往该MAC地址的数据包将仅送往其对应的端口,而不是所有的端口。
网络层提供路由和寻址的功能,使两终端系统能够互连且决定最佳路径,并具有一定的拥塞控制和流量控制的能力。TCP/IP协议体系中的网络层功能由IP协议规定和实现,故又称IP层
前面谈到链接层传输的数据单位是帧,而网络层传输的是IP包,由于IP有不同版本,目前广泛使用的是IPv4,其使用32位表示IP地址(IPv6用128位表示IP地址)
以下是一个IPv4的数据包
Version
IP包的版本,IPv4或IPv6IHL(Internet Header Length)
IP表头长度Type of Service
IP包的服务类型,如高传输T,高可靠RTotal Length
IP包总大小=表头+实际数据,最大达65535bytesIdentification
识别码,用于表示IP包被拆包,分段后,这些小包是否属于同一个IP包Flags
特殊标志,D为0表可分段,1表不可分段等Fragment Offset
IP分段在原始IP包中的偏移量Time To Live(TTL)
IP包存活时间,取值范围为0-255,通过网络上一个路由器就减1,当TTL为0时,此包会被丢弃Protocol Number
协议代码 记录此包在传输层及网络层使用的协议是什么,如TCP=6,UDP=17等Header Checksum
IP表头检查码,用于检查IP包表头的错误Source Address
来源IP地址Destination Address
目的IP地址Options
其他额外功能,如安全处理,路由记录Padding
由于IP每条资料必须是32bit,由于Options没有固定位数,所有Padding用于补齐如上面提到,IPv4由32位组成,其中我们又将这32位IP划分出Net_ID(用于标识网段)和Host_ID(用于标识同网段下的主机),为了方便记录,我们通常将这32位IP以每8位写成十进制来表示.如11111111 11111111 11111111 @11111111
通常写成255.255.255.255
我们将Host_ID全为0的IP用来标识某网段地址(Network IP),用Host_ID全为1来标识此网段的广播地址(Broadcast IP)
前面我们提到Net_ID用于标识网段,首先我们需要明白,网段是在同一个物理网段上划分出来的,不是说你们两IP的Net_ID一样(前提是同一个物理网段)就可以广播通信
当我们确定在同一个网段时,可以通过CSMA/CD直接在此网段上广播自己的数据包出去
当我们确定在同一个物理网,不同的子网段上时,可以路由或者网关,将我们传送的包转交至其他网段上,然后在其他网段上广播到目的主机
IP地址中的Net_ID就像我们的街道,Host_ID就像我们的门牌.而Host_ID全为0标识街道的地址,当我们要找街道上某户人时,我们可以在街道的广播设备(Host_ID全为1)上呼叫,目标听到后回应,而当我们写信给不同地方的朋友时,那只能通过邮局了(route),通过这个街道上的邮局都是用Host_ID全为1再减1后的IP来标识
为了规范Net_ID的位数,于是我们将IP进行分级,其中A类IP为0.0.0.0/8-127.255.255.255/8
B类IP为128.0.0.0/16-191.255.0.0/16
C类IP为192.0.0.0/24-223.255.255.255/24
,其中IP/Num
的Num是Net_ID的位数
上面是对IP进行分级,下面我们对IP进行分类,其可以分成公有IP和私有IP,而我们要连上Internet须使用公有IP,私有IP用来构建局域网来划分主机,如果要将私有IP送上Internet,需要架设防火墙与NAT服务
IPv4规划好的私有IP:
A类私有IP : 10.0.0.0 - 10.255.255.255
B类私有IP : 172.16.0.0 - 172.31.255.255
C类私有IP : 192.168.0.0 - 192.168.255.255
此外还有一个特殊的IP网段(loopback),用于本地测试使用,就是127.0.0.0/8
,本地服务都是在此网段的主机上启动,如127.0.0.1
这个IP
由于我们默认使用的IP地址,可能Host_ID过多,实际使用时,我们并没有这么多主机(如一个A类IP可使用2^24-2个主机),假设我们有这么多主机,如果我们同时向这些主机广播一个数据包,也是很痛苦的一件事
所以我们将我们获取的IP地址再进一步划分出不同的子网段,来管理网络(其实就是从Host_ID中分出子网的ID位)
Netmask就是用32位IP地址中Net_ID全为1,Host_ID全为0来表示
假设我要对192.168.0.0/24
这个IP地址划分出2个子网
可以这么做Net_ID+1=24+1=25
,由于划分出两个网段,原本192.168.0.0/24
有256个IP,每个网段有128个IP,
那么第1个网段地址(Network IP)是192.168.0.0/25
而其广播地址(Broadcast IP)是192.168.0.127/25
第2个网段地址是192.168.0.128/25
而其广播地址是192.168.0.255
子网掩码是255.255.255.128
打破原本IP分级,将Net_ID位用作Host_ID位,使得多个网段写成一个网段
在同一个网段内,我们可以通过IP广播来传输数据,而如上面提到的,当你要在不同网段上传输数据时,这时就只能借助邮局(路由或网关)了,路由其实就是路径选择
我们以下图为例
192.168.0.0/24
与192.168.1.0/24
是不同网段,当PC01传输资料给PC11,其流程如下
查询IP包的目的IP地址 当PC01要传输IP包时,查询到IP包表头的目的IP地址
查询本机的路由 PC01查看其的路由表,发现目的IP与自己处于同网段时,就会广播数据包出去
查询默认路由器(default gateway) 本例中由于PC01与PC11在不同网段,所以PC01会将IP包发给其设置的路由器,由路由器处理此包,本例是server A
路由器转交IP包到目的网段
路由器查看自己的路由信息,将PC01的IP包转交给192.168.1.254
,并将IP包在此网段广播出去,给目的IP
由上我们可以知道,每台主机都存在一个路由表,而且会设置其默认的网关/路由器地址,用于不同网段间的通信
我们可以使用route来查看本机的路由表,其中第1列是网段地址,而default
来表示缺省的网段
我们知道,网络实际上是利用MAC来传输帧,并不是我们指定的IP,所以我们需要通过IP地址来获取MAC地址,则就是ARP协议
ARP协议:通过广播包含目标IP地址的ARP包出去,目标接收到此包后会返回其MAC地址,发送端接收到目标MAC地址后记录进ARP table中,并开始通信
RARP协议是MAC地址来获取IP地址
查看本机的MAC地址:ifconfig
查看本机的ARP table: arp
网络控制消息协定(Internet Control Message Protocol,ICMP),通常用于返回的错误信息或是分析路由。ICMP错误消息总是包括了源数据并返回给发送者。 ICMP错误消息的例子之一是TTL值过期。每个路由器在转发数据报的时候都会把IP包头中的TTL值减一。如果TTL值为0,“TTL在传输中过期”的消息将会回报给源地址。 每个ICMP消息都是直接封装在一个IP数据包中的,因此,和UDP一样,ICMP是不可靠的。
网络层的IP只是负责将数据送到正确的目标上,而数据没有被接收,那是传输层的任务之一,传输层的封包分为连接导向的TCP封包,与非连接导向的UDP封包
通常传输层会将数据打包成TCP包,然后将其传入网络层,装入IP包中,TCP包/IP包/帧的关系如下图
TCP数据包如下
source port & destination port
: 来源IP中的端口与目标IP中的服务端口,传输数据时,两个端口需要连接,其中一个IP与一个端口组成socket pairsequence number
: TCP包比IP包大时,TCP包进行分段,sequence number就是每个分段的序号acknoledge number
:回应代码Data offset
对Options
的补齐,保证TCP包的大小Reserved
保留Code
控制码,好让接收端明白这个封包的动作
ACK
回应SYN
表示发送端希望与接收端建立同步连接FIN
表示传输结束URG
表示紧急包,接收端应紧急处理PSH
要求接收端立即传输缓存区的对应的包RST
强制结束连线Window
主要用于控制包的流量Checksum
发送端发送资料前,进行检验动作,检验码写到此项中Urgent pointer
紧急资料,与URG
对应,告知紧急资料所在位置Options
表示接收端可以接收的最大数据容量Padding
补齐包的大小TCP被称为可靠的连线传输,是因为客服端与接收端建立在同步连接的基础上的,而同步连接是通过三次握手来实现,如下图
通过客服端发起SYN连线请求,服务端发起ACK/SYN请求,最后客服端回应ACK建立连接
在UDP传输过程中,不会建立连线,接收端在接收到包后不会回应(ACK)发送端,直接发送数据给与客服端,不管客服端是否正确接收到数据,UDP较为快速
UDP数据包如下
防火墙针对OSI七层协议来说,每层可以抵挡的方面有:
Index