1 基础知识
分时系统特性:多路性、独占性、交互性、及时性
1.7 传输方式分类
面向有连接和面向无连接型 电路交换和分组交换(由分组交换机(路由器)连接通信线路;也叫蓄积交换,路由器缓存饱和或溢出,可能丢失分组数据) 单播(一对一)、广播)(电视播放)、多播(电视会议)、任播(从目标主机群选择最优,例:DNS根域名解析服务器)
1.8 地址
| | |
---|
MAC寻址(网桥) | 地址转发表 | 记录实际MAC地址本身 | IP寻址(主机、路由器) | 路由控制表 | 记录集中了的网络号(网络号与子网掩码) |
1.9 网络构成要素(中继器、n层交换机等)
设备 | 作用 | |
---|
网卡(NIC) | 使计算机连网的设备 | | 中继器(Repeater) | 从物理层上延长网络的设备 | 对减弱的信号进行放大和发送; 数据链路层出错仍转发; 无法改变传输速度(不能在传 输速度不同的媒介间转发) | 网桥(Bridge)/2层交换机 | 从数据链路层上延长网络的设备 | 识别数据链路层的数据帧, 临时存储再重新转发; 可连接传输速率不同的网络; 不限连接网段个数;有自学式网桥; 根据物理地址(MAC地址)处理 | 路由器(Router)/3层交换机 | 通过网络层转发数据的设备 | 根据IP地址处理; 可以连接任意两个数据链路; 有分担网络负荷的作用; 有的具备网络安全功能 | 4~7层交换机 | 处理传输层以上各层网络传输的设备 | 分析收发数据,进行特定处理; 负载均衡;带宽控制 | 网关(Gateway) | 转换协议的设备 | 与4~7层交换机一样都是 处理传输层及以上的数据, 但还负责数据转换;防火墙 |
中继集线器可以简称集线器或Hub 但现在常说的Hub更多指 交换式集线器(网桥的一种)
2 TCP/IP基础知识
2.4 TCP/IP协议分层模型
OSI参考模型 | TCP/IP分层模型 |
---|
应用层 | 规定特定应用的协议。 包括文件传输、电子邮件、远程登录 | 应用层 DNS,URI,HTML(表示层),HTTP(应用层), TLS/SSL,SMTP(发电邮),POP,IMAP, MIME(电邮格式,表示层),TELNET(远程登录),SSH(远程登录),FTP(文件传输) SNMP(网络管理,应用协议),MIB(表示层协议),SIP,RTP,LDAP | 应用程序 | 表示层 | 数据格式转换 (某台计算机或某款软件特有的数据格式 ——统一的网络数据格式) | 会话层 | 通信管理。何时建立和断开通信连接(数据流动的逻辑通路), 以及如何分割数据等数据传输相关的管理。 即决定处理逻辑,但并不实际建立连接等。 | 传输层 | 进行实际的建立和断开处理。 负责可靠传输(数据没传到则重发等)。 只在通信双方节点上处理,无需在路由器上处理 | 传输层 TCP,UDP,UDP-Lite,SCTP,DCCP | 操作系统 | 网络层 | 寻址和路由选择 | 互联网层 ARP(解析MAC地址),IP(传送数据),ICMP(通知异常) | 数据链路层 | 数据帧与比特流之间的转换 | 网络接口层/网卡层 | 设备驱动程序与网络接口 | 物理层 | 比特流与电子信号之间的转换 | (硬件) |
2.5 TCP/IP 分层模型与通信示例
- 包:全能性术语
- 帧:数据链路层中包的单位
- 数据报:IP和UDP等网络层以上的分层中包的单位
- 段:TCP数据流中的信息
- 消息:应用协议中的单位
2.5.3 经过数据链路的包
3 数据链路
作为传输方式的数据链路
以太网、WLAN(无线局域网)、PPP(点对点协议)、FDDI(光纤分布式数据接口)、ATM(异步传输方式)
3.2 数据链路相关技术
3.2.1 MAC地址
MAC地址长48比特(一般用十六进制数表示)。任何一个网卡的MAC地址都是唯一的(例外情况: 微机板可自由设置;虚拟机的虚拟网卡)
3.2.2 共享介质型网络
如最早的以太网、FDDI。 采用同一个载波信道进行发送和接收,基本采用半双工通信,有必要对介质进行访问控制(争用方式和令牌传递方式)
争用方式(Contention)/CSMA(载波监听多路访问)
也叫CSMA(Carrier Sense Multiple Access,载波监听多路访问)。先到先得,没空等着。 改良版:CSMA/CD(Collision Detection):没人发,可以发;边发边监控电压,发生冲突(电压超范围)则先发阻塞报文再停止发送数据帧;随机延时后重新发
令牌传递方式
不会冲突;各站有通过平等循环获得令牌的机会;网络拥堵也不会导致性能下降。 没有收到令牌就不能发送数据帧,所以利用率达不到100% 。 提高网络性能的令牌传递技术:早期令牌释放、令牌追加(不等数据到达确认就将令牌发给下个站)、多个令牌同时循环等
3.2.3 非共享介质网络
每个站直连交换机,由交换机负责转发数据帧。很多情况下采用全双工通信 如ATM,最近的以太网。 可以根据交换机的高级特性构建虚拟局域网(VLAN) 一旦交换机故障,相连的所有计算机都无法通信
3.2.4 *根据MAC地址转发
将集线器或集中器等设备以星型连接,出现了新的网络设备——交换集线器,这是一种将非介质共享型网络中所使用的交换机用在以太网中的技术,交换集线器也叫以太网交换机 以太网交换机就是持有多个端口的网桥,根据MAC地址,参考转发表,决定转发。 转发表可以通过自学自动生成:
交换机转发方式:
- 存储转发:检查以太网数据帧末尾的FCS位后再转发,可以避免发送错误帧。
- 直通转发: 不需要整个帧全部接收下来再转发。延迟较短,但有发送错误帧的可能
3.2.5 环路检测技术
- 生成树:发生故障切换网络需要几十秒的时间。RSTP(Rapid Spanning Tree Protocol)能使缩短到几秒以内
- 源路由法:为解决令牌环网络的问题
3.2.6 VLAN
使修改网络拓扑结构时,不必进行硬件线路的改造,只要修改网段即可。 VLAN:使交换机按其端口区分为多个网段,从而区分了广播数据传播的范围,减少了网络负载,提高网络安全性 VLAN技术附加到网桥/2层交换机。 可以将连接了同一个交换集线器(网桥)的主机分成不同的网段。 异构的两个网段之间需要用具有路由功能的交换机(如3层交换机),或在各段中间通过路由器连接。 TAG-VLAN允许包含跨越异构交换机的网段。在每个网段用VLAN ID进行唯一表示,在以太网首部加入这个VID标签,根据值决定发送给哪个网段。
3.3 以太网
3.3.4 以太网帧格式
前导码(Preamble),1、0交替组合而成。共8个8位字节,末尾是SFD(Start Frame Delimiter)域,值为“11”
- FCS(Frame Check Sequence):帧检验序列。
FCS中保存着整个帧除以生成多项式的余数。在接收端也用同样方式计算,如果得到FCS的值相同,就判定接收帧没错。 - IEEE802.3以太网帧的协议类型字段在SNAP中
数据链路层还可细分为介质访问控制层(MAC,Media Access Control)和逻辑链路控制层(LLC,Logical Link Control) 介质访问控制层根据以太网或FDDI等不同数据链路所特有的首部信息进行控制。 逻辑链路层则根据以太网或FDDI等不同数据链路层所共有的帧头信息进行控制。
略 3.4 无线通信 3.5 PPP 3.6 其他数据链路
4 IP协议(Internet Protocol)
网络层主要作用是 实现终端节点之间的通信(点对点通信)
4.2 IP 基础知识
三大作用模块:IP寻址、路由、IP分包与组包
4.2.1 IP地址属于网络层地址
要针对每块网卡至少配置一个或一个以上的IP地址
网络层对数据链路层的某些特性进行了抽象,数据链路的类型对IP地址形式透明
在网桥或交换集线器(根据MAC地址,参考转发表,完成转发)等物理层或数据链路层数据包转发设备中,不需要设置IP地址 (在用SNMP进行网络管理时有必要设置IP地址)
4.2.2 路由控制(Routing)
Hop(跳)
Hop(跳)指网络中的一个区间。IP包在跳间被转发。IP路由也叫多跳路由 数据链路实现某一区间(一跳)内的通信。IP实现直至最终目标地址的通信(点对点)
- 一跳是主机或路由器网卡不经其他路由器而能直接到达的相邻主机或路由器网卡之间的一个区间
- 在一跳的区间内,电缆可以通过网桥或交换集线器相连,不会通过路由器或网关相连。
4.2.3 数据链路的抽象化
IP是实现多个数据链路之间通信的协议。 它对不同数据链路的相异特性进行抽象化。(数据链路的地址可以被抽象化为IP地址) 不同数据链路的最大传输单位(MTU:Maximum Transmission Unit)不同。 所以IP要进行分片处理(IP Fragmentation):将大IP包分成多个小包,到对端目标地址再被组合传给上层。
4.2.4 IP属于面向无连接型
一是为了简化,二是为了提速
IP提供尽力服务(Best Effort),即尽力把数据包发送到最终目标地址,但不做收到与否的验证。 TCP(面向有连接型)负责保证对端确实收到数据,提高可靠性。 因为如果要一种协议规定所有的功能和作用,那其具体实施和变成就会非常复杂。分层简化了每个协议的具体实现。
4.3 IP地址的基础知识
4.3.1 IP地址的定义
IPv4:32位正整数 8位一组 分成4组 以“.”隔开 每块网卡(NIC)都得设置IP地址。一块网卡可配置多个IP地址。 一台路由器通常会配置两个以上的网卡
4.3.2 IP地址由网络和主机两部分标识组成
- IP地址由“网络标识(网络地址)”和“主机标识(主机地址)”两部分组成
- 网络标识在数据链路的每个段配置不同的值。
- 不同网段的网络标识不同。同一网段的主机标识不同。
- IP地址具有唯一性
- 路由器根据网络标识转发
4.3.3 IP地址的分类
类别 | 开头 | 网络地址 | 网络地址十进制 | 主机地址 | 主机地址上限 |
---|
A | 0 | 1~8位 | 0.0.0.0~127.0.0.0 | 后24位 | 224-2 | B | 10 | 1~16位 | 128.0.0.0~191.255.0.0 | 后16位 | 216-2 | C | 110 | 1~24位 | 192.0.0.0~223.255.255.0 | 后8位 | 28-2 | D | 1110 | 1~32位 | 224.0.0.0~239.255.255.255 | 无,D类常用于多播 | 0 |
比特位表示主机地址时,不可全为0或1。全为0表示对应网络地址或IP地址不可获知;全为1作为广播地址。
4.3.4 广播地址
用于在同一个链路中互连的主机间发送数据包。 IP地址中主机地址部分全设为1,即为广播地址。
以太网中如果将MAC地址的所有位都改为1,则形成FF:FF:FF:FF:FF:FF的广播地址。因此,广播的IP包以数据链路的帧的形式发送时,得通过MAC地址为全1比特的FF:FF:FF:FF:FF:FF转发。
广播分本地广播和直接广播
- 本地广播:192.168.0.0/24发给192.168.0.255。
- 直接广播:192.168.0.0/24发给192.168.1.255/24。收到这个包的路由器将数据转发给192.168.1.0/24(直接广播有一定的安全问题,多数情况下会在路由器上设置为不转发)
4.3.5 IP多播
- 多播用于将包发送给特定组内的所有主机。不存在可靠传输
- 多播可以穿透路由器,可以只给必要的组发送数据包
- 广播将数据发给所有终端主机,给无关系的网络或主机带来影响,造成不必要流量。且广播无法穿透路由
多播使用D类地址。即开头“1110”,后28位组成多播的组编号 224.0.0.0~239.255.255.255都是多播地址可用范围, 其中 224.0.0.0~224.0.0.255无需路由控制,在同一链路内也能实现多播。而在这个范围之外设置多播地址会给全网所有组内成员发送多播包(但可以利用生存时间TTL限制) IP多播需要IGMP(5.8.1节)等协议支持
4.3.7 CIDR与VLSM
CIDR(Classless Inter-Domain Routing):无类型域间选路。将多个网络地址合为同一个网络 VLSM(Variable Length Subnet Mask):可变长子网掩码。
4.3.8 全局地址与私有地址
私有网络的IP地址: 包含在这个范围内的IP地址都属于私有IP,在此之外(A类~C类中除去0/8、127/8)的IP地址成为全局IP(公网IP)
可通过NAT(Network Address Translator,5.6节)互换私有IP和全局IP
4.4 路由控制
路由控制表(Routing Table)两种形成方式:管理员手动设置(静态路由控制)、自动刷新(动态路由控制,需要路由协议)
4.4.1 IP地址与路由控制
- 默认路由(Default Route):路由表中任何一个地址都能与之匹配的记录。标记为0.0.0.0/0或default
- 主机路由(Host Route):“IP地址/32”。整个IP地址的所有位都参与路由,基于主机上网卡配置的IP地址本身,而不是基于网络地址部分进行路由。多用于不希望通过网络地址路由的情况
- 环回地址:同一台计算机上程序之间网络通信时使用的默认地址(127.0.0.1)。与该地址同意义的是localhost主机名。使用该IP或主机名时,数据包不会流向网络。
4.4.2 路由控制表的耦合
4.5 IP分割处理与再构成处理
4.5.2 IP报文的分片与重组
IP分片(IP Fragmentation) 较大的报文无法一下子发送出去时,分片发送。 重组只在目标主机进行。路由器虽然做分片但不会重组(因为无法保证IP数据报是否经由同一个路径传送;分片可能在中途丢失;中途重组后仍可能再被分片)
4.5.3 路径MTU发现(Path MTU Discovery)
路径MTU指发送端主机到接收端主机间不需要分片时最大MTU大小,即路径中所有数据链路中最小的MTU 工作原理:
- 发送IP数据报时将首部的分片禁止标志位设为1,途中路由器不会分片,而是直接丢包
- 由ICMP的不可达消息将路径MTU值发给主机
- UDP没有重发处理。发送下个消息时,由IP层分片;
TCP会重发。由TCP计算出最大段长度(MSS),将数据分成IP层不会再被分片的粒度。IP层不再做分片处理 - UDP中,分片到达目标主机后被重组,传给UDP层
TCP中,不需要重组,数据被原样发给TCP层
4.6 IPv6
类别 | 长度 | 表示 | 间隔符 |
---|
MAC | 6个8字节,即48比特 | 十六进制 | “:” | IPv4 | 4个8位字节,即32比特 | 十进制 | “.” | IPv6 | 8个16位字节,即128比特 | 十六进制 | “:” 省略0则用“::” |
4.7 IPv4首部
-
首部长度(IHL) 单位为4字节。没有可选项(Options)的IP包,首部长度设为“5”,即5*4字节=20字节 -
区分服务(TOS):值由应用指定。 几乎所有网络都无视该字段,因为其实现困难。有人提出将TOS字段划分为DSCP和ECN两字段 -
DSCP(Differential Services Codepoint,差分服务代码点)。现统称为DiffServ,用于质量控制 -
ECN(Explicit Congestion Notification,显式拥塞通告)。包括第6位ECT(ECN-Capable Transport)和第7位的CE(Congestion Experienced)。ECT用以通告上层TCP是否处理ECN,当ECN为1时,出现拥堵就将CE设为1 -
总长度 表示IP首部与数据部分合起来的总字节数 -
标识(ID,Identification) 用于分片重组。同一个分片的标识值相同,不同分片的值不同。 -
标志(Flags)由3比特构成,表示包被分片的相关信息: -
片偏移(FO:Fragment Offset) 标识被分片的每一分段相对原始数据的位置。单位为8字节。 -
生存时间(TTL,Time To Live) 可中转的路由器数,变成0则丢包 -
协议(Protocol)表示IP包传输层的上层协议编号 -
首部校验和(Header Checksum) 只校验数据报的首部,不校验数据部分 -
可选项(Options)包含安全级别、源路径、路径记录、时间戳
4.8 IPv6首部格式
IPv6省略了首部校验和字段。 路由器不再需要计算校验和,提高了转发效率
- 通信量类(Traffic Class) 相当于IPv4的TOS。与DiffServ和ECN相关
- 有效载荷长度(Payload Length) 不包括首部,只表示数据部分的长度。
- 下一个首部(Next Header)相当于IPv4的协议字段。在有IPv6扩展首部的情况下,表示后面第一个扩展首部的协议类型
- 跳数限制(Hop Limit)与IPv4的TTL相同
IPv6扩展首部
IPv6的首部长度固定。 扩展首部通常介于IPv6首部与TCP/UDP首部中间。 可以是任意长度 扩展首部当中还可以包含扩展首部协议以及下一个扩展首部字段
5 IP协议相关技术
5.2 DNS(Domain Name System)
5.2.1 IP地址不便记忆
主机识别码:即为每台计算机赋予的唯一的主机名,从而无需使用一大长串的IP地址 需要参考hosts数据库文件将主机名转换为IP地址,期初由互联网信息中心整体管理一份hosts文件。
5.2.2 DNS的产生
DNS系统可以有效管理主机名和IP地址之间对应关系,它维护一个表示组织内部主机名和IP地址对应关系的数据库。如果主机名和IP地址需要变更,只需在组织机构内部进行处理即可
5.2.3 域名的构成
- 域名服务器是指管理域名的主机和相应的软件。其所管理的分层叫ZONE
- 根部所设置的DNS叫做根域名服务器。根域名服务器中注册着根以下第1层域名服务器的IP地址,根域名服务器的下一层注册了再往下一层域名服务器的IP地址。如果下面再没有其它分层,就可以自由地指定主机名称或子网名称。
- 为提高容灾能力,会设置至少两个以上的域名服务器
- 所有的域名服务器都必须注册根域名服务器的IP地址。因为DNS根据IP地址检索时从根开始。
- 进行DNS查询的主机和软件叫做DNS解析器(用户的工作站或个人电脑都属于解析器)
- 一个解析器至少注册一个以上域名服务器的IP地址
5.2.4 DNS查询
解析器和域名服务器将最新了解到的信息暂时保存在缓存里
5.2.5 DNS如同互联网中的分布式数据库
DNS还管理众多其他信息
5.3 ARP(Address Resolution Protocol)
5.3.1 ARP概要
ARP以目标IP地址为线索,用来定位下一个收包的网络设备的MAC地址。如果目标主机不在同一个链路上,可通过ARP查找下一跳路由器的MAC地址 ARP只适用于IPv4。IPv6中ICMPv6替代ARP
5.3.2 ARP的工作机制
- 主机A广播发送一个ARP请求包,其中包含想要了解其MAC地址的主机IP地址,也包含自己的MAC地址
- 同一链路上的所有的主机和路由器进行解析,若目标IP与自己一直,那就将自己的MAC地址塞入ARP响应包返回主机A
- 通常会把获取到的MAC地址作为IP对MAC的映射关系记录到ARP缓存表中一段时间。
- 每执行一次ARP,其对应的缓存内容都会被清除
ARP包格式:
5.3.4 RARP(Reverse Address Resolution Protocol)
从MAC地址定位IP地址的协议。例如将打印机服务器接入到网络时
可以通过个人电脑设置IP地址,或通过DHCP(Dynamic Host Configuration Protocol)自动分配获取IP地址。但嵌入式设备可能没有任何输入接口或无法通过DHCP动态获取IP地址。所以需要RARP 架设一台RARP服务器,在上面注册设备的MAC地址及IP地址。然后再将设备接入网络插电启动时,会发送请求信息给RARP服务器,RARP服务器收到后根据其MAC告知其IP地址
5.3.5 代理ARP(Proxy ARP)
通常ARP包会被路由器隔离,但采用代理ARP的路由器可以将ARP请求转发给临近的网段。 对于不支持子网掩码的老设备来说,不使用代理ARP,有时就无法更好地使用网络
5.4 ICMP(Internet Control Message Protocol)
5.4.1 辅助IP的ICMP
网络设置包括IP地址或子网掩码的设置、路由表的设置、DNS服务器的设置、邮件服务器的设置、代理服务器的设置等
- 主要功能:确认IP包是否成功送达;通知被废弃的具体原因;改善网络设置(与IP相关的)
- ICMP的通知消息使用IP进行发送(以明文的形式像TCP/UDP一样通过IP进行传输,但并非作为传输层的补充,而应考虑为IP的一部分)
- 两类消息:通知出错原因的错误消息,用于诊断的查询消息
5.4.2 主要的ICMP消息
- ICMP目标不可达消息(类型3)
- ICMP重定向消息(类型5)
自动追加的信息要在一定期限之后删除,ICMP的重定向消息同理
- ICMP超时消息(类型11):IP包中的TTL字段值变为0
- ICMP回送消息(类型0、8):为判断所发数据包是否成功到达,可以向对端主机发送回送请求的消息(类型8),也可以接收对端主机发回来的回送应答消息(类型0)
- ICMP原点抑制消息(类型4):当路由器向低速线路发送数据时,发送队列的残存变为0而无法发送时,可向IP包的源地址发ICMP原点抑制消息
- ICMP路由器探索消息(类型9、10):主机为发现与自己相连网络中的路由器,发送ICMP路由器请求(类型10),路由器返回ICMP路由器公告消息(类型9)
- ICMP地址掩码消息(类型17、18):主机或路由器为了解子网掩码的情况,向目标主机或路由器发送ICMP地址掩码请求消息(类型17),然后接收ICMP地址掩码应答消息(类型18)获取子网掩码信息
5.4.4 ICMPv6
IPv4中ICMP仅作为辅助,而在IPv6中,没有ICMPv6就无法通信。 IPv6中,从IP地址定位MAC地址的协议从ARP转为ICMP邻居探索消息 IPv6中实现了即插即用,在没有DHCP服务器的环境也能实现IP地址的自动获取:如果是一个没有路由器的网络,就是用MAC地址作为链路本地单播地址;而在有路由器的网络环境中,可以从路由器获得IPv6地址的前面部分(网络地址),后面部分(主机地址)则由MAC地址进行设置。此时可以利用路由器请求消息和路由器宣告消息
5.5 DHCP(Dynamic Host Configuration Protocol)
5.5.1 DHCP实现即插即用
自动设置IP地址、统一管理IP地址分配。让即插即用变得可能
5.5.2 DHCP的工作机制
架设一台DHCP服务器(通常用该网络的路由器充当)。将所要分配的IP地址、相应的子网掩码、路由控制信息以及DNS服务器的地址等设置到服务器上。
- 在发送DHCP发现包与DHCP请求包时,DHCP即插即用的IP地址尚未确定。因此,DHCP发现包的目标地址为广播地址255.255.255.255,而源地址则为0.0.0.0,表示未知
- DHCP在分配IP地址时有两种方法:一是在特定的IP地址中自动选出一个;二是针对MAC地址分配一个固定的IP地址。 两种方法可并用
- 通常架设两台或两台以上的DHCP服务器,但可能导致几处分配的IP地址相互冲突(为避免冲突,可以在DHCP服务器上区分要分配的地址)
- 为检查所要分配的IP地址以及已分配的IP地址是否可用:
- DHCP服务器在分配IP地址前要发送ICMP回送请求包,确认没有返回应答
- DHCP客户端要针对获得的IP地址发送ARP请求包,确认没有返回应答
5.5.3 DHCP中继代理
在大规模组织结构的网络环境中,一般有多个以太网(无线LAN)网段。若针对每个网段都设置DHCP服务器将会是个庞大工程。即使用路由器分担DHCP功能,也难以管理和运维。
通过使用DHCP中继代理,使可以由一个DHCP服务器统一进行管理和运维。 DHCP中继代理多为路由器,也有在主机中安装软件实现的情况
5.6 NAT(Network Address Translator)
5.6.1 NAT定义
- NAT是用于在本地网络中使用私有地址,在连接互联网时转而使用全局IP地址的技术。
- NAPT(Network Address Port Translator)可以转换TCP、UDP端口号,由此可以实现用一个全局IP地址与多个主机的通信
- 通常人们提到的NAT,多指NAPT,也叫IP伪装或Multi NAT
5.6.2 NAT的工作机制
在NAT(NAPT)路由器内部,有一张自动生成的用来转换地址的表
当私有网络内多台机器同时要与外部通信时,全局IP地址可能不够用,于是采用包含端口号一起转换的方式(NAPT):
5.6.3 NAT-PT(NAPT-PT)
NAT-PT(NAT-Protocol Translation)用于将IPv6的首部转换为IPv4首部
5.6.4 NAT的潜在问题
- 无法从NAT外部向内部服务器建立连接(虽然可以指定端口号允许向内部访问,但数量受限于全局IP地址个数,因为是多(私有地址)对少(全局地址)映射)
- 转换表的生成与转换操作都会产生一定的开销
- 通信过程中一旦NAT遇异常重启,所有的TCP连接都将被重置
- 即使备置两台NAT做容灾备份,TCP连接还是会被断开
5.6.5 解决NAT潜在问题与NAT穿越
两种解决方法:
- 改用IPv6,极大扩展可用的全局地址
- NAT内侧(私有IP地址的一边)主机发送一个虚拟的网络包给外侧。NAT读取包首部并自动生成一个转换表。这时如果转换表构造合理,还能实现NAT外侧的主机与内侧主机建立连接进行通信(即NAT穿越)。由此可以让处在不同NAT内侧的主机进行相互通信。此外,应用还可以与NAT路由器进行通信生成NAT表,并通过一定方法将NAT路由器上附属的全局IP地址传给应用。
5.7 IP隧道
在网络层首部后面继续追加网络层首部的通信方法就叫“IP隧道”
很多路由器没有多播包的路由控制信息,多播消息也就无法穿越路由器发送消息,此时可使用IP隧道,使路由器用单播的形式发包
5.8 其他IP相关技术
5.8.1 IP多播相关技术(IGMP(MLD))
确认是否有接收端,通过MLD(Multicast Listener Discovery,多播监听发现)实现。它是IPv4中IGMP(Internet Group Management Protocol)和IPv6中ICMPv6的重要功能之一 IGMP(MLD)主要有两大作用:
- 向路由器表明想要接收多播消息(并通知想接收多播的地址)
- 向交换集线器通知想要接收多播的地址
5.8.2 IP任播
IP任播是指为那些提供同一种服务的服务器配置同一个IP地址,并与最近的服务器进行通信的一种方法。最有名的应用当属DNS根域名服务器
无法保证将第一个包和第二个包发给同一个主机。这在UDP发出请求而无需应答的情况下没问题,但对于TCP通信或在UDP中要求通过连续多个包进行通信的情况,就显得力不从心
5.8.3 通信质量控制
RSVP(Resolution Reservation Protocol)技术,包括两个内容:
- 提供点对点的详细优先控制的IntServ,针对应用的连接,在两端之间的所有路由器上进行有质量控制的设定
- 提供相对较粗粒度的优先控制的DiffServ,针对特定的网络进行粗粒度的通信质量控制
进行DiffServ质量控制的网络叫DiffServ域。在DiffServ域中的路由器会对所有进入该域IP包首部中的DSCP字段(IP首部TOS字段的替代)进行替换
5.8.4 * 显式拥塞通知(ECN,Explicit Congestion Notification)
TCP能控制网络拥塞,但它是通过数据包的实际损坏情况来判断是否发生拥塞,不能在数据包损坏前减少数据包的发送量 ECN(Explicit Congestion Notification,显式拥塞通知)将IP首部的TOS字段置换为ECN字段(由ECT和CE两比特组成) 并在TCP首部的保留位追加CWR标志和ECE标志 ECN的机制概括起来就是在发送包的IP首部记录路由器是否遇到拥塞,并在返回包的TCP首部中通知是否发生过拥塞。 拥塞检查在网络层,拥塞通知在传输层。
5.8.5 Mobile IP
使主机所连接的子网IP发生变化时,主机IP地址仍保持不变(仍为归属地址) 没移动时连接的网络叫归属网络,IP地址叫归属地址
6 TCP与UDP
6.2 端口号
传送层中的地址概念即端口号,用来识别同一台计算机中进行通信的不同应用程序
6.2.4 端口号如何确定
- 标准既定的端口号。也叫静态方法。指每个应用程序都有其指定的端口号。例如,HTTP、TELNET、FTP等知名端口号(一般为0~1023)。 另外还有注册端口号(1024~49151)
- 时序(或动态的)分配法。服务端有必要监听端口号,但客户端没必要确定端口号。客户端由操作系统分配端口号(如每次+1);这样,即使是同一个客户端发起的多个TCP连接,识别这些通信连接的5部分数字也不会全部相同;动态分配的端口号在49152~65535之间(较老的系统中有时会依次使用1024以上空闲的端口)。。
6.2.5 端口号与协议
- 端口号由其使用的传输层协议决定。不同的传输协议可以使用相同的端口号
- 知名端口号与传输层协议并无关系,只要端口一致都将分配同一种程序进行处理。例如,53号端口在TCP和UDP中都用于DNS服务
6.3 UDP(User Datagram Protocol)
- UDP不提供复杂的控制机制。它是将应用程序发来的数据在收到的那一刻,立即原样发送到网络上的一种机制
- 无法进行流量控制等避免网络拥塞的行为。丢包也不重发。包到达顺序乱掉也不纠正。
- 需要细节控制,则要交由采用UDP的应用程序去处理
- UDP面向无连接,可随时发送数据。本身的处理简单又高效,常用于:
- 包总量较少的通信(DNS、SNMP等)
- 视频、音频等多媒体通信(即时通信)
- 限定于LAN等特定网络中的应用通信
- 广播通信(广播、多播
- 可以认为UDP是按照程序员的编程思路在传送数据报,而TCP本身拥有各种控制机制,所以它发送数据时未必按照程序员的编程思路进行
6.4 TCP(Transmission Control Protocol)
- TCP是面向连接的、可靠的流协议。实行“顺序控制”或“重发控制”机制。还具有“流控制(流量控制)”、“拥塞控制”、提高网络利用率等功能
- 丢包可以重发,对次序乱的的分包可以进行顺序控制
- 只在确认通信对端存在时才会发送数据
- TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输
6.4.2 通过序列号与确认应答提高可靠性
- 接收端主机收到数据后会返回一个确认应答(ACK,Positive Acknowledgement)消息
- 发送端一定时间内没有等到确认应答,则进行重发
- 也可能接收端已收到数据,但确认应答消息丢失或延迟到达,导致重发,此时接收端需要放弃重复的包,通过序列号实现
- 序列号是顺序发送的每一个8位字节的编号。接收端查询接收数据TCP首部中的序列号和数据的长度,将自己下一步应该接收的序号作为确认应答返送回去
6.4.3 重发超时如何确定
- 最理想的是,找到一个最小时间,它能保证“确认应答一定能在这个时间内返回”。但网络环境复杂多变
- TCP每次发包都会计算往返时间(Round Trip Time,RTT,指报文段的往返时间)及其偏差(RTT时间波动的值、方差、也叫抖动)。将往返之间和偏差相加,重发超时的时间就是比总和稍大点的值
- 重发后还收不到确认应答,则再次重发,且确认应答的时间将以2倍、4倍的指数函数延长
- 重发一定次数后,仍无确认应答返回,则强制关闭连接,通知应用通信异常强行终止
6.4.4 连接管理
- 数据通信之前,TCP首部发送一个SYN包作为建立连接的请求等待确认应答。若对端发来确认应答,则认为可以建立通信,否则不会进行通信。
- 通信结束时会进行断开连接的处理(FIN包)
- 可使用TCP首部用于控制的字段(也叫控制域)来管理TCP连接
- 一个连接的建立与断开,正常需要来回发送7个包才能完成
6.4.5 TCP以段为单位发送数据
- 发送数据包的单位:最大消息长度(MSS, Maximum Segment Size)。最理想情况是,MSS为IP中不会被分片处理的最大数据长度
- TCP传送大量数据时,以MSS的大小将数据分割发送,重发时也是。
- MSS是在三次握手时,在两端主机间被计算得出。两端主机发建立连接请求时,会在TCP首部中写入MSS选项,然后会在两者间选择较小值使用。
6.4.6 利用窗口控制提高速度
- 每发一个段进行一次确认应答的处理,性能低。引入窗口的概念,对多个段同时进行确认应答,即发送了一个段以后不必要一直等待确认应答
- 窗口大小就是指无需等待确认应答而可以继续发送数据的最大值
- 窗口内的数据即便没有收到确认应答也可以被发送出去
- 在整个窗口的确认应答没有到达之前,若部分丢包,那发送端要重传,所以发送端需设置缓存保留待被重传的数据
- 如期收到确认应答就可以不再重发,数据就可从缓存区清除
- 收到确认应答的情况下,将窗口滑动到确认应答的序列号位置。这种机制称为滑动窗口控制
6.4.7 窗口控制与重发控制
- 使用了窗口控制,某些确认应答即便丢失也无需重发,可以通过下一个确认应答进行确认
- 若某报文段丢失,接收主机收到一个自己应该接收的序号以外的数据时(不会丢弃,而是暂时缓存),会针对当前为止收到数据返回确认应答。
- 窗口比较大,又出现报文段丢失的情况,同一个序号的确认应答将会被不断返回。发送端主机若连续3次收到同一个确认应答(共收到4次),就重发。这种机制比超时管理更高效,因此也被成为高速重发机制
6.4.8 流控制
- TCP提供一种机制可以让发送端根据接收端的实际接收能力控制发送的数据量,即流控制:接收端向发送端通知自己可以接收数据的大小,即窗口大小
- TCP首部中,专门有一个字段用来通知窗口大小。
- 接收端的缓冲区一旦面临数据溢出时,窗口大小的值也会随之被设为更小的值通知给发送端
- 接收端缓冲区满,停止接收数据后,要发送窗口更新通知给发送端才能使通信继续进行。若窗口更新通知丢失可能导致无法继续通信。因此,发送端会时不时发送叫窗口探测的数据段(仅含一个字节)以获取最新窗口大小信息。
6.4.9 拥塞控制
TCP为防网络拥堵瘫痪,在通信一开始会通过慢启动算法得出的数值,对发送数据量进行控制:
- 定义“拥塞窗口”的概念,在慢启动时,将拥塞窗口设为1个数据段(1MSS)
- 之后每收到一次确认应答(ACK),拥塞窗口值加1。
- 发数据包时,将拥塞窗口大小与接收端主机通知的窗口大小作比较,发送比其中较小值还要小的数据量。
如果重发采用超时机制,那么拥塞窗口的初始值可以设为1,以后再进行慢启动修正。 随着包的每次往返,拥塞窗口会以1、2、4等指数函数的增长,拥堵状况激增。为防此,引入慢启动阀值。拥塞窗口超出阀值,每次收到确认应答,只能以下面的比例放大拥塞窗口:
6.4.10 提高网络利用率的规范
- Nagle算法。发送端即使还有应发送的数据,若这部分数据很少则延迟发送。仅在下列任一条件下才能发送,否则等待一段时间再发
- 已发送的数据都已经收到确认应答时
- 可以发送最大段长度(MSS)的数据时
该算法会发生某种程度的延迟,所以窗口系统以及机械控制等领域使用TCP时,会关闭对该算法的启用
- 延迟确认应答。收到数据后不立即返回确认应答,而是延迟一段时间
- 在没有收到2×最大段长度的数据为止不做确认应答(根据操作系统不同)
- 其他情况下,最大延迟0.5秒发送确认应答(很多操作系统设为0.2秒左右)
- 捎带应答。在同一个包中发送确认应答和回执数据
6.5 略 其他传输层协议(UDP-Lite、SCTP、DCCP)
6.6 UDP首部的格式
- 源端口号。有时可能不设源端口号,即值为0。用于无需返回的通信
- 包长度。 保存了UDP首部的长度和数据的长度之和。单位为字节
- 校验和 略
6.7 TCP首部格式
- 序列号(Sequence Number)。 每发送一次数据,就累加一次该数据字节数的大小。
- 序列号不会从0或1开始,而是在建立连接时由计算机生成的随机数作为初始值,通过SYN包传给接收端。
- 然后将每次转发过去的字节数累加到初始值上表示数据位置
- 建立和断开连接时发送的SYN包和FIN包虽不携带数据,但也作为一个字节增加对应的序列号
- 确认应答号。 指下一次应该收到的数据的序列号。实际上,指已收到确认应答号前一位为止的数据。
- 数据偏移。表示所传输的数据部分应从TCP包的哪个位开始计算,也可以看作TCP首部的长度。字段长4位,单位为4字节
- 控制位
- 窗口大小。用于通知从相同TCP首部的确认应答号所指位置开始能够接收的数据大小(8位字节)。窗口为0,表示可以发送窗口探测
- 校验和 略
- 紧急指针。只在URG控制位为1时有效。从数据部分首位到紧急指针所指位置为紧急数据。紧急指针也用作表示数据流分段的标志
- 选项 略
7 路由协议
7.1 路由控制的定义
路由控制分静态和动态两类型
- 静态路由:事先设置,将路由信息固定。管理负担大,无法自动绕过故障结点。
- 动态路由:让路由协议在运行过程中自动地设置。路由器与相邻路由器间互发消息,以定期交换路由控制信息
7.2 路由控制范围
- 制定自己的路由策略,并以此为准在一个或多个网络群体中采用的小型单位叫自治系统(AS,Autonomous System)或路由选择域(Routing Domain)
- 自治系统内部动态路由采用域内路由协议,即IGP;自治系统之间路由控制采用域间路由协议,即EGP
- 路由协议大致分两类:外部网关协议EGP(Exterior Gateway Protocol)和内部网关协议IGP(Interior Gateway Protocol)
- EGP与IGP类似IP地址的网络部分和主机部分。根据EGP在区域网络(或ISP)之间进行路由选择,根据IGP在区域网络(或ISP)内部进行主机识别(怀疑是书上的错误,应为路由选择?)
7.3 路由算法
最具代表性的两种:距离向量算法和链路状态算法
7.3.1 距离向量(Distance-Vector)算法
- 根据距离(代价)和方向决定目标位置
- 网络变复杂时,获得稳定路由信息(也叫路由收敛)前需消耗一定时间,也极易发生路由循环等问题
- 每个路由器掌握的信息不同,不容易判断每个路由器上的信息是否正确
7.3.2 链路状态(Link-State)算法
- 了解网络整体连接状态的基础上生成路由控制表
- 每个路由器保持同样的信息
- 网络变复杂,每个路由器也能保持正确的路由信息、进行稳定的路由选择
- 如何从网络代理获取路由信息表,这一过程相当复杂,需要高速CPU和大量内存
7.3.3 主要路由协议
7.4 RIP(Routing Information Protocol)
- RIP是距离向量型,广泛用于LAN
- RIP将路由控制信息定期(30秒一次)向全网广播。
- 等了6次(180秒)没收到路由控制信息,连接就会被断开
- 距离(Metrics)的单位是“跳数”(经过路由器数)
- 根据距离向量生成距离向量表,再抽出较小的路由生成最终路由控制表
7.4.3 使用子网掩码时的RIP处理
- RIP不交换子网掩码信息,但可用于使用子网掩码的网络,但需注意:
- 从接口的IP地址对应分类得出网络地址后,与根据路由控制信息流过此路由器的包中的IP地址对应的分类得出的网络地址比较。若两者网络地址相同,则以接口的网络地址长度为准
- 若不同,以IP地址的分类所确定的网络地址长度为准
- 因此采用RIP进行路由控制的范围内必须注意:
- 因IP地址的分类而产生不同的网络地址时
- 构造网络地址长度不同的网络环境时
当把IP地址分类表示的网络地址延长至子网掩码的长度时,所延长的部分如果为0,则称为0子网,为1则称为1子网。需注意,0子网与1子网在RIP中都无法使用。但它们可以被用于RIP2和OSPF以及静态路由中
7.4.4 RIP中路由变更时的处理
无限计数(Counting to Infinity)问题
两种解决方法:
- 一是最长距离不超过16。由此即使发生无限计数的问题,也可以从时间上进行控制
- 二是规定路由器不再把所收到的路由消息原路返还给发送端。也称为水平分割(Split Horizon)
在有环路情况下,反向的回路会成为迂回的通道,路由信息会不断地被循环往复地转发。
解决方法:
- 毒性逆转(Poisoned Reverse):当网络中发生链路被断开的时候,不是不再发送这个消息,而是将这个无法通信的消息传播出去。即发送一个距离为16的消息。
- 触发更新(Triggered Update):路由信息发生变化时,不等待30秒而是立刻发送出去。
7.4.5 RIP2
- 从广播改为用多播
- 支持子网掩码。与OSPF类似,在交换的路由信息中加入了子网掩码信息
- 路由选择域。与OSPF的区域类似,在同个网络中可使用逻辑上独立的多个RIP
- 外部路由标志。用于把从BGP等获得的路由控制信息通过RIP传递给AS内
- 身份验证秘钥。与OSPF一样,RIP包中携带密码。只有在自己能够识别这个密码时才接收数据,否则忽略这个RIP包
7.5 OSPF(Open Shortest Path First)
- 根据OSI的IS-IS协议提出的 链路状态型路由协议
- 有环路也能进行稳定路由控制
- 支持子网掩码
- 引入了“区域”概念,将自治网络划分为若干更小范围,减少路由协议间不必要的交换
- 可以针对IP首部中的区分服务(TOS)字段,生成多个路由控制表,也有无法支持TOS的情况
7.5.2 OSPF基础知识
- OSPF给每条链路赋予一个权重(代价),选择总的代价较小的路径
- 相邻路由器(Neighboring Router):连接到同一个链路的路由器
- 在复杂网络中,确定一个指定路由器(Designated Router),作为中心交换路由信息
- RIP中包类型只有一种。一边确认是否连网,一边传送网络信息。但网络数越多,要交换的路由控制信息越大。且稳定状态时也要定期交换相同的路由控制信息,浪费网络带宽
OSPF有5种包:
- 发送问候包确认是否连接。
- 利用数据库描述包互发路由摘要信息和版本信息
- 若版本较老,则先发一个链路状态请求包,请求路由控制信息
- 然后由链路状态更新包接收路由状态信息
- 最后通过链路状态确认包通知大家本地已收到
7.5.3 OSPF工作原理概述
- OSPF中进行连接确认的协议叫HELLO协议
- LAN中每10秒发送一个HELLO包。若等到第四次(40秒后)仍无反馈,就认为连接已断开
- 之后进行连接断开或恢复连接操作时,路由器会发送一个链路状态更新包,通知其他路由器网络状态的变化
- 链路状态更新包要传达的消息大致分为两类:
- 一是网络LSA(Network Link State Advertisement),是以网络为中心生成的信息,表示这个网络与哪些路由器相连
- 二是路由器LSA(Router Link State Advertisement),是以路由器为中心生成的信息,表示这个路由器与哪些路由器相连
- 每个路由器可由此生成一个可以表示网络结构的链路状态数据库。可采用Dijkstra算法生成相应的路由控制表。但当网络规模变大,算法处理时间会变长,对CPU和内存消耗大
7.5.4 将区域分层化进行细分管理
- OSPF为减少计算负荷,引入区域的概念。使一个自治系统(AS)内有多个区域。
- 有多个区域的自治系统必要有一个主干区域(Backbone Area),其他所有区域必须与这个主干区域相连
- 每个区域内的路由器都持有本区域网络拓扑的数据库
- 区域之外的路径信息,只能从区域边界路由器获知它们的距离
- 区域边界路由器不会将区域内的链路状态信息全部原样发送给其他区域,只会发送自己到达这些路由器的距离信息
作为区域出口的区域边界路由器若只有一个,叫做末端区域 末端区域内不需要发送区域外的路由信息(因为它就一个口),它的区域边界路由器将成为默认路径传送路由信息即可。
7.6 BGP(Border Gateway Protocol)边界网关协议
- BGP是连接不同组织机构(自治系统)的协议,属于外部网关协议(EGP)
- BGP的最终路由控制表由网络地址和下一站的路由器组来表示,会根据要经过的AS数进行路由控制
- ISP、区域网络等会将每个网络域编配成一个个自治系统(AS)进行管理。它们为每个自治系统分配一个16比特的AS编号。BGP根据这个编号进行路由控制
7.6.2 BGP是路径向量协议
- 根据BGP交换路由控制信息的路由器叫BGP扬声器
- BGP中数据包送达目标网络时,会生成一个中途经过所有AS的编号列表,即AS路径信息访问列表(AS Path List)。
- BGP会从AS路径信息访问列表中选择较短路径,即AS数最少的路由。
- 属于路径向量(Path Vector)型协议,它能够检测出环路,支持策略路由。
7.7 MPLS(Multi Protocol Label Switching)多协议标记交换
路由技术基于IP地址中最长匹配原则进行转发,而标记交换则对每个IP包都设定一个“标记”值。根据“标记”转发
-
MPLS网络中实现MPLS功能的路由器叫标记交换路由器(LSR,Label Switching Router) -
与外部网络连接的那部分LSP叫标记边缘路由器(LER,Label Edge Router) -
若数据链路本就有相当于标记的信息,则可直接映射。若无(以太网),则需追加一个全新的垫片头(Shim Header)介于IP首部与数据链路首部之间),其中包含标记信息,有时可能被追加多个垫片头 -
标记转发动作为Push,替换标记转发的动作为Swap,去掉标记转发的动作为Pop -
MPLS中目标地址和数据包都要通过由标记决定的同一个路径,叫标记交换路径(LSP,Label Switch Path)。LSP可划分为一对一连接的点对点LSP,和一对多绑定的合并LSP -
扩展LSP有两种方式。可通过各个LSR向邻接的LSR分配MPLS标记;也可以由路由协议载着标记信息进行交互 优点: -
一是转发速度快 -
二在于利用标记生成虚拟的路径,并在它的上面实现IP等数据包的通信。基于这些特点,IP网也可以提供基于MPLS的通信质量控制、带宽保证和VPN等功能
|