一. 网络协议
1. ISO/OSI七层模型
层级 | 功能 | TCP/IP协议族 | 设备 |
---|---|---|---|
应用层 | 为用户提供接口,包括文件传输,电子邮件,文件服务,虚拟终端等 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet | |
表示层 | 数据格式化,码转换(如ASCII,GBK,JPEG等),数据加密、压缩 | ||
会话层 | 对应用会话的管理、同步 | ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets | |
传输层 | 可靠与不可靠的传输、传输前的错误检测、流控 | TCP、UDP | |
网络层 | 定义IP编址,定义路由功能 | IP,ICMP,RIP,OSPF,BGP,IGMP | 路由器 |
数据链路层 | 成帧、用MAC地址访问媒介、错误检测与修正 | SLIP,CSLIP,PPP,ARP,RARP,MTU | 网桥、交换器 |
物理层 | 设备之间的比特流的传输、物理接口、电器特性等 | ISO2110,IEEE802 | 中继器、集线器 |
- 下四层负责实际进行数据的网络传输,上三层负责为用户提供服务
2. TCP/IP 四层模型
二、应用层
- 应用层协议定义了运行在不同端系统上的应用程序进程如何相互传递报文。
1. HTTP
2. DNS (Domain Name System)
- DNS是一个将将域名和IP地址相互映射的分布式数据库,能够使人更方便地访问互联网。
- DNS协议运行在UDP之上,使用53号端口
- DNS查询过程:
- DNS查询包括
递归查询
和迭代查询
。实践中,查询通常遵循:从请求主机到本地DNS服务器的查询是递归的,其余的查询是迭代的。
三、运输层
- 运输层协议为运行在不同主机上的应用进程间提供
逻辑通信
。运输层协议是在端系统中而不是路由器中实现的。 - 运输层将应用层报文划分为较小的块,并为每块加上一个运输层首部以生成运输层
报文段 (segment)
。 - 在源主机从不同套接字中收集数据块,并为每个数将运输层报文段中的数据交付到正确的套接字的工作称为
多路分解
。数据块封装上首部信息从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用
。 - 网络层的IP模型不确保报文段的交付,不保证报文段的按序交付,不保证报文段中数据的完整性。因此IP被称为
不可靠服务
。
1. UDP
- 进程到进程的数据交付和
差错检查
是两种最低限度的运输层服务,也是UDP能够提供的仅有的两种服务。 - UDP不能保证一个进程所发送的数据能够完整无缺地到达目的进程。因此也是一种
不可靠
的服务。 - 使用UDP的应用可以通过在应用程序自身建立可靠机制来实现可靠数据传播。
- UDP
差错检查
用于确定当UDP报文段从源到达目的地移动时,其中的比特是否发生了改变。但它对差错恢复无能为力。只是丢弃受损的报文段或者将受损的报文段交给应用程序并发出警告。 - UDP相比TCP优势包括:1)关于发送什么数据及何时发送的应用层控制更为精细;2)无需建立连接。避免了建立连接的时延,更快;3)无连接状态。不需要在端系统中维护连接状态,服务器因此一般能支持更多的活跃客户;4)分组首部开销小。仅有8字节开销。
2. TCP
TCP报文首部
- TCP可以从缓存中取出并放入报文段中的数据受限于
最大报文长度(MSS)
。MSS通常根据最初确定的有本地发送主机发送的最大链路帧长度来设置。TCP通常是将文件划分成长度为MSS的若干块。
- 其中,
序号(seq)
用来解决乱序问题。确认号(ACK)
用来解决丢包问题。窗口(sliding window)
用来控流
TCP的可靠性
丢失重传
- TCP把数据看成一个无结构的、有序的字节流。一个报文段的
序号(seq)
是该报文段首字节的字节流编号。 - 一条TCP连接的双方均可随机地选择初始序号。
- 主机A填充进报文段的
确认号
是主机A期望从主机B收到的下一字节的序号。 - TCP只确认该流中至第一个丢失字节为止的字节,所以TCP被称为提供
累计确认
。
- 每次
TCP重传
时都会将下一次的超时间隔设为先前的两倍。 - 当TCP接收方收到一个序号大于下一个所期望的、按序的报文段时,说明报文段丢失或乱序。它会对已经接收到的最后一个按序字节数据进行重复确认,称为
冗余ACK
。如果发送方收到对相同数据的3个冗余ACK,它会执行快速重传
,即在定时器过期之前重传丢失的报文段。
流量控制
- TCP通过让发送方维护一个
接受窗口
来提供流量控制。接受窗口用于给发送方指示接收方还有多少可用的缓存空间。 - 主机B有一块接收缓存,当数据来到时会先把数据放到缓存中,上层应用等缓存中有数据时就会到缓存中取数据。其中
LastByteRead
是接收方从缓存读取的数据流的最后一个字节的编号。LastByteRcvd
是从网路中到达的并放入接收方缓存的数据流的最后一个字节编号。接收窗口rwnd = RcvBuffer - [LastByteRcvd - LastByteRead]
- 主机B通过把当前rwnd放入发给主机A的报文段接收窗口字段中,主机A通过将未确认的数据量控制在rwnd内,即可保证主机B的接收缓存不会溢出。
TCP连接管理
- 三次握手
- 第一次握手 (SYN=1, seq=x)
Client发送一个特殊的SYN报文段
(标志位SYN置为1)。随机产生一个初始序号值seq=x,发送给Server,Client进入SYN_SENT状态,等待Server确认。
- 第二次握手 (SYN=1, ACK=1, seq=y, ack=x+1)
Server收到数据包后由标志位SYN=1知道Client请求建立连接,会为该TCP连接分配TCP缓存和变量。并向client发送允许连接报文段的ACK报文段(ACK标志位设置为1),报文段中SYN=1, ack=x+1,并随机产生一个服务端的初始序号seq=y。发送后,Server进入SYN_RCVD状态。
- 第三次握手 (ACK=1, ack=y+1,seq=x+1, ack=y+1)
Client收到确认后,也要给该连接分配缓存和变量。将发送一个ACK报文段对服务器的允许连接的报文段进行确认。设置ack=y+1。因为连接已被建立了SYN被置为0。Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。以后每个阶段中SYN都将被置为0.
- SYN 洪泛攻击 (SYN flood attack)
- 在第二次握手时,服务器会分配并初始化连接变量和缓存。如果客户不发送ACK来完成第三次握手,服务器(通常在一分钟后)将终止该半开连接并回收资源。
SYN 洪泛攻击
者可能会发送大量的TCP SYN报文段,而不完成第三次握手导致服务器的连接资源被消耗殆尽。 -
SYN cookie
可用有效防御这种攻击:服务器不对SYN报文生成一个半开连接,而是生成一个初始TCP序列号,称为cookie
,它是SYN报文段的源和目的IP地址
与端口号
以及仅有该服务器知道的秘密数
的一个HASH,发送给客户端。如果客户是合法的将返回一个ACK报文段。服务端对其进行验证,如果合法,则生成一个具有套接字的全开的连接。
- 四次挥手
- 第一次挥手(FIN=1,seq=u):
Client(也可以是server,后面流程相反)设置seq=u, 发送一个FIN报文段(FIN标志位设置为1),Client进入FIN_WAIT_1状态。表示client没有数据要发送给server了。
- 第二次挥手(ACK=1,ack=u+1, seq=v):
Server收到FIN后,发送一个ACK报文段给Client,ack=u+1,并随机产生一个服务端的初始序号seq=v, Server进入CLOSE_WAIT状态。表示“同意”client关闭请求
- 第三次挥手(FIN=1,ACK=1, ack=u+1, seq=w):
Server发送一个FIN报文段,用来请求关闭Server到Client的数据传送,同时包含ack=u+1,并随机产生一个服务端的初始序号seq=w,server进入LAST_ACK状态。
- 第四次挥手(ACK=1,ack=w+1):
Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK报文段ack=w+1给Server, Server收到后进入CLOSED状态。client在等待了某个固定时间(两个最大段生命周期,2MSL)之后,没有收到服务器端的 ACK ,认为服务器端已经正常关闭连接,于是自己也关闭连接,进入 CLOSED 状态。(目的是如果server由于网络原因没有收到最后的ACK,server将会再发送一个FIN,但若此时client已经CLOSED,则无法回复。因此引入了等待2MSL的流程)。自此就完成了四次挥手,主机中的连接资源也被释放。
四、网络层
1. 概述
- 网络层作用是将分组从一台发送主机移动到一台接收主机。需要使用两种重要功能:
转发
和路由选择
。 -
转发
指当一个分组到达某路由器的一条输入链路时,该路由器必须将该分组移动到适当的输出链路。转发发生的时间很短(通常为几纳秒),因此通常用硬件来实现。 -
路由选择
指当分组从发送方流向接收方时,决定这些分组所采用的路由或路径的算法。 - 每台路由器都有一个
转发表
。路由器检查到达分组首部的一个或多个字段,进而使用这些首部值在其转发表中索引,通过这种方法来转发分组。 - 路由器的组成部件包括:输入端口、交换结构、输出端口和路由选择处理器。
- 在
输入端口
和输出端口
都可以形成分组队列。排队的位置和程度将取决于流量负载、交换结构的相对速率和线路速率。随着这些队列的增长,路由器的缓存空间将会耗尽,并且当无内存可用于存储到达的分组时将会出现丢包
。 - 排队可选的规则有:先进先出,优先权排队,循环和加权公平排队。
- 转发表是由
路由选择处理器
计算和更新的,使用路由选择协议与其他网络路由器中的路由选择处理器进行交互,或者转发表接收来自远程CDN控制器的内容。
2. 网际协议:IPv4、寻址、IPv6及其他
IPv4数据报
- IPv4数据报格式
其中生存时间(TTL)
字段用来确保数据不会永远在网络中循环。每当一台路由器处理数据报时,该字段的值减1。若TTL字段减为0,则该数据报必须丢弃。
IPv4编址
- 一个链路层帧能承载的最大数据量叫作
最大传送单元(MTU)
。它限制了每个IP数据报的长度。因此需要将较大的IP数据报中的数据分片成多个更小的IP数据报。TCP与UDP都希望从网络层收到完整的、未分片的报文。IPv4的数据报的重新组装工作会在端系统中完成。 - 主机与物理链路之间的便捷叫作
接口
。一个IP地址与一个接口相关联,而不是包括该接口的主机或路由器相关联。 - 因特网中的每台主机和路由器上的每个接口都必须有一个全球唯一的
IP地址
(NAT后面的接口除外)。 - IP地址的最高x比特被称为IP地址的网络部分。一个组织通常被分配一块连续的地址,即具有相同网络部分的一段地址。剩余32-x比特用于区分组织内部设备。
-
子网掩码 (network mask)
用来指明一个IP地址的哪些位标识的是主机所在的子网,以及哪些位标识的是主机的位掩码。 - IP地址可分为
跨网络通信需要经过路由器,同一网络间的通信不需要。127只有127.0.0.1一个地址可用,代表当前计算机自己。255.255.255.255是广播地址
。当一台主机向广播地址发出数据报时,该报文会交付给网络中的所有主机。
无类别域间路由选择(CIDR)
将子网的概念一般化了,不局限于A、B、C类,x可以是任意位数。IP地址由
因特网名字和编号分配机构(ICANN)
管理。一个组织网络管理员从一个ISP获取一组地址用于一个组织的子网内。该组织系统管理员通常手动配置路由器中的IP地址,再通过配置动态主机配置协议(DHCP)
以使某给定主机每次与网络连接时能得到一个相同的或者临时的IP地址
。DHCP还允许一台主机得知其他信息,如它的子网掩码,第一条路由器地址(常称为默认网关
)与它本地DNS服务器的地址。对于一台新到达主机,它会经过 1)DHCP服务器发现:主机发送
DHCP发现报文
到广播地址;2)DHCP服务器提供:子网中存在的一个或多个DHCP服务器通过广播发出DHCP提供报文
,报文包括所收到的发现报文的事务IP、自己的IP地址、子网掩码和IP地址租用期(通常为几个小时或几天;)3)DHCP请求:客户从多个服务提供者中选择一个,并向其发送DHCP请求报文
;4)DHCP ACK:服务器用ACK报文进行响应NAT路由器
对外界的行为如同一个具有单一IP地址的单一设备。使其所有流出报文的源IP地址都是其IP地址。NAT路由器能对外界隐藏家庭网络的细节。位于家庭网络等专用网络
中的主机,其地址仅对该网络中的设备才有意义。NAT路由器内部维护了一张
NAT转换表
,表项中包含了端口号及其IP地址。因为端口号字段为16比特,NAT协议可支持60000个并行使用路由器广域网一侧单个IP地址的连接。
IPv6数据报
- IPv6将IP地址增加到128比特。
- 引入
任播地址
,可使数据报交付给一组主机中的任意一个。 - IPv6不允许在中间路由器进行分片和重新组装,只能在源与目的端执行。
3. 路由选择算法
五、链路层
1. 概述
- 链路层能够提供的可能服务包括:成帧,链路接入,可靠交付,差错检测和纠正。
- 链路层的主体部分是在
网络适配器
也称为网络接口卡(NIC)
中实现的。位于NIC核心的是链路层控制器
,它是一个实现了许多链路层服务(成帧,链路接入,差错检测等)的专用芯片。 - 在发送节点,为了保护比特免受差错,使用
差错检测和纠正比特
来增强数据。差错检测方式包括奇偶校验位
,循环冗余检测编码(CRC)
等。
2. 多路访问链路和协议
- 网络链路有:
点对点链路
和广播链路
两种。广播链路能够让多个发送和接收节点都连接到相同的、单一的、共享的广播信道上。 - 当多个节点同时传输帧,所有节点会同时接收到多个帧,即发生
碰撞
,导致没有一个节点能够有效地获得任何传输的帧。多路访问协议
用来规范协调多个发送和接收节点对同一个广播信道的访问。 - 多路访问协议包括3种类型:
信道划分协议
,随机接入协议
和轮流协议
。 - 信道划分协议某种方式对信道进行划分,包括:
时分多路复用(TDM)
,频分多路复用(FDM)
和码分多址(CDMA)
- 随机接入协议中,一个传输节点总是以信道的全部速率进行发送,当有碰撞时,涉及碰撞的每个节点等待一个随机时延后反复地重发它的帧,到该帧无碰撞地通过为止。
3. 交换局域网
- 主机或路由器的
网络适配器
具有链路层地址。因此,具有多个NIC的主机或路由器有与之相关联的多个链路层地址。链路层地址又称为LAN 地址
、物理地址
和MAC地址
。 - MAC地址长度为6字节,共有2^48个可能的MAC地址。当某适配器要向某些目的适配器发送一个帧时,发送适配器将目的适配器的MAC地址插入到该帧中,并将该帧发送到局域网上。当适配器接受到一个帧时,将检查给帧中的目的MAC地址是否与它自己的MAC地址匹配。
-
地址解析协议(ARP)
用于将IP地址和MAC地址进行转换。每台主机或路由器在其内存中具有一个ARP表,这张表包含IP地址到MAC地址的映射关系。ARP只为同一个子网上的主机和路由器接口解析IP地址。
4. 以太网
- 以太网几乎占领着现有的有线局域网市场。
- 位于以太网星型拓扑中心的是
交换机
。交换机的任务是接收入链路层帧并将它们转发到出链路。 - 交换机的
过滤
和转发
借助于交换机表
完成。过滤是决定一个帧应该转发到某个接口还是丢弃。转发是决定一个帧应该被导向哪个接口。 - 交换机的交换机表是
自学习
形成的。 - 支持
虚拟局域网(VLAN)
的交换机允许经一个单一的物理局域网基础设施定义多个虚拟局域网。在一个VLAN内的主机彼此通信,仿佛它们(并没有其他主机)与交换机连接。 - 在一个基于端口的VLAN中,交换机的端口由网络管理员划分为组。每个组构成一个VLAN,在每个VLAN中的端口形成一个广播域。
- 两个VLAN可通过与一台外部的路由器相连,进行相互间的通信。还有一种方法是通过
VLAN干线连接(VLAN trunking)
5. 链路虚拟化
- 一个
多协议标签交换(MPLS)
加强的帧在第二层首部和第三层首部间增加了一个MPLS首部。MPLS加强的帧只能在两个均为MPLS使能的路由器之间发送。这种路由器也被称为标签交换路由器
。因为它通过在其转发表中查找MPLS标签,立即将数据报传递给适当的输出接口来转发MPLS帧。因此MPLS使能的路由器不需要提取目的IP地址和在转发表中执行最长前缀匹配的查找。 - MPLS提供了新的流量管理能力,网络运行者能够超越普通的IP路由选择,迫使某些流量沿着一条路径朝着某给定的目的地引导,并且朝着相同目的地的其他流量沿着另一条路径流动。
- MPLS被用于实现
虚拟专用网(VPN)
。在为用户实现一个VPNR的过程中,ISP使用它的MPLS使能网络将用户的各种网络连接在一起。MBPS能被用于将资源和由用户的VPN使用的寻址方式相隔离,其他用户利用该VPN跨越该ISP网络