标签:des style http color io os ar 使用 for
这是我在Coursera上的学习笔记。课程名称为《Computer Networks》,出自University of Washington。
因为计算机网络才诞生不久,眼下正在以快速在发展,所以有些旧的教材可能都已经跟不上时代了。这门课程在2013年左右录制,知识相对还是比較新的。覆盖了计算机网络中的各个协议层,从物理层到应用层都讲得很细致。学完这门课程之后对计算机网络会有比較深刻的了解。
本章具体解说了网络层的一些概念。通常网络层是通过IP协议实现的,网络层是全部协议的核心。本章介绍了IP地址、协议、IPv6、ARP、DHCP等重要概念。
?概述
课程位置
已经到达网络层了。网络层基于链路层,路由器能够通过多个网络发送数据包
为什么要网络层
我们已经建立链路层了,全部的主机之间能够发送数据,为什么要须要网络层呢?
交换机的缺点
无法大规模应用:向后学习的时候要向整个网络广播,每一个交换机要记录全部机器的地址
不同的链路技术之间,比方无线和有线之间无法通信
没有流量控制机制
网络层方案
大规模:层级结构
非均匀:IP
带宽控制:路由成本极低,QOS流量控制
话题
网络服务模型
IP 互联网协议
IPv6
NAT(中间代理)
路由算法
路由和转发的比較
路由的成本非常大,由于涉及到广播
转发的成本略微小一点
课程计划
先讲转发,后讲路由
网络服务模型
话题
网络层为传输层提供哪些服务呢
两种网络服务模型
数据报模型(无链接)
虚拟电路模型(面向连接)
IP使用的是数据报模型
“保存并转发”分组交换
这两种模型都实现了分组交换
数据报模型
包中包括了目标地址
每一个路由器中包括了转发表
IP 互联网协议
使用数据报模型
地址占了32位
每一个包通常1.5KB
虚拟电路模型
三个阶段:连接,传输,断开链接
MPLS(多协议标签交换)
类似于虚拟电路的技术,被ISP广泛使用
数据报模型和虚拟电路模型比較
数据报模型 虚拟电路模型
配置:不须要 须要
路由:每一个目标 每次连接
地址:每一个包包括了所有地址 每一个包包括了短标签
路由:每一个包 每一个电路
故障:easy排除 不easy排除
QOS:不易添加 easy添加
Internetworking
话题
我们怎样连接两个不同的网络?
网络有哪些差异
网络模型(数据包或虚拟电路)
地址类型
QOS
包大小
安全性(是否加密)
能够连接数据报网络、虚拟电路网络、无线网络等
Internetworking - Cerf & Kahn
互联网之父
解决网络之间连接的问题
互联网參考模型
IP是全部网络层中最窄的一层
IP提取了上层协议中最主要的共同特性
如果仅仅有一部分网络使用QOS或安全性
IPv4格式
版本号 IHL头部 总长度 协议 校验和
IP协议是互联网的网络层,包括了源地址目标地址
总长度,标识,帧位置,分段控制位
其它字段满足了其它需求:不同的服务,TTL
IP前缀
话题
IP地址应该长什么样呢?
IP地址
IP地址使用了32位的地址,IPv6是128位
使用"."来分隔数字
IP前缀 - 现代
表示被分配的IP段
比如:10.21.0.0/16 表示以10.21开头的65536个地址,192.168.1.0/24 表示256个地址
前缀越大,地址越详细,反之亦成
IP地址分类 - 以前的方法
将地址分成4类: A类 B类 C类
A类相当于/8 B类相当于/16 C类相当于/24
外网IP,内网IP
外网IP在全球都有效
内网IP仅仅在某个地区使用:10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
须要通过NAT将内网IP转换成外网IP
分配外网IP
分配IP是一个分层的过程
最初是通过IANA进行分配,下一级就是ARIN APNIC RIPE LACNIC AFRNIC,再下一级就是ISP或企业,再下一级就是通过DHCP分配给详细的用户
IP转发
话题
路由器怎样转发一个包呢
复习
网络层的功能:能支持大规模的网络,支持不同的链路协议,充分使用链路带宽
IP转发
同一个网络中的计算机IP地址都有同样的网络前缀
路由器使用路由表来连接下一跳地址
最长匹配前缀
在路由表中的前缀可能会重叠
为了解决问题,我们使用了最长匹配前缀来选择路由规则。也就是路由的时候选择最详细的地址作为下一条
举例
路由表:
192.24.0.0/18 下一跳A
192.24.12.0/22 下一跳B
当IP地址为192.24.12.32须要路由时,会选择B作为下一条,由于这条路由规则有更长的前缀
主机/路由器的差别
路由器负责路由,将包送达目标地址
主机负责向远端发送数据,通过近期的路由器送达目标
主机转发表
使用0.0.0.0/0作为默认路由
最长匹配前缀的灵活性
能够提供更短的前缀来给某些网段设置默认的行为
能够给某个详细的地址设置特例
所以这样的方案的灵活性是非常高的
最长匹配前缀的性能
使用层级结构来匹配更详细的路由规则
查表更加复杂
转发的其它方面
转发并不是只改变地址
降低TTL
检測头部校验和
给大包分段
发送堵塞信号
生成错误消息
处理多种不同的选项
IP辅助协议 ARP DHCP
话题
解决实际应用中的IP转发问题
获取IP地址
将IP地址映射到链路地址
获取IP地址
问题:第一次连接路由器的时候不知道自己的IP是多少
方法:手动配置,通过DHCP获取
DHCP
动态主机配置协议 Dynamic Host Configuration Protocol
给内网计算机提供IP,并提供其它信息:网络前缀,路由器地址,DNSserver,时间server等
DHCP协议栈
Ethernet IP UDP DHCP
执行于UDP之上,使用67,68port
DHCP分配地址
问题:在没有地址的时候,怎样向DHCPserver发送消息?
答案:通过广播消息,将消息穿戴到全部的节点
广播地址是 255.255.255.255,以太网ff:ff:ff:ff:ff:ff,IPv6是ffff:ffff:...:ffff
DHCP消息
第一步:DISCOVER。client通过广播向服务端发送消息
第二步:OFFER。服务端应答
第三步:REQUEST。client通过广播请求服务端
第四步:ACK。服务端返回确认消息
刷新DHCP契约的时候,能够在ACK之后直接向server发送REQUEST
DHCP协议支持多个镜像server来提高可靠性
发送一个IP包
问题:一个节点须要下一跳的链路地址来传递消息。怎样将IP转换成链路地址呢?
ARP Address Resolution Protocol 地址解析协议
节点能够通过该协议将IP地址转换为链路地址
IP头:SourceMac | DestMac(通过ARP协议获取) | SourceIP | DestIP | Payload
ARP协议栈
Ethernet | ARP
直接基于链路层,不须要server
通过广播发送消息
ARP消息步骤
第一步:REQUEST。谁有 IP 1.2.3.4?
第二步:REPLY。我有,链路地址是 xx:xx:xx:xx:xx:xx
发现协议
帮助节点发现其它节点
通常使用广播消息
数据包分段
话题
我们怎样将数据报大小不同的两个网络连接在一起
数据报大小问题
MTU:最大传输单元
数据报越大,传输效率越高
解决方式:分段、发现(找出最适合的数据包大小)
IPv4分段
路由器将数据包进行分段,而目标计算机会将数据包又一次组合在一起
分段字段
在IPv4头部中和分段有关的字段有:Total Length | Identification | Fragment Offset | MF/DF control bits
MD表示More Fragment,DF表示Don‘t Fragment
IPv4分段过程
发送方:路由器将太大的数据包进行分段,将IP头拷贝到片段中,调整片段的长度,设置片段的位置,除了最后一包都设置MF标志位
接收方:利用Identification字段将片段连接在一起,利用DF标志位推断分段结束
这样的方式可以工作,而且即使链路层有反复帧,IP层也不会出错(由于有Offset字段)。可是分段会添加路由器的负担、添加丢包率、安全性差等,所以分段不是最好的办法
Path MTU Discovery
自主去发现最合适的MTU,来避免分段。这是现在常常使用的方法
当主机试图将太大的数据包进行传递时,路由器不会将数据报进行转发,而是通知主机,告诉它最合适的数据包大小
这样的方法看起来非常复杂,可是能找到合适大小最快的方法了
路径MTU可能会在传输的过程中发生变化
通过ICMP实现
For IPv4 packets, Path MTU Discovery works by setting the Don‘t Fragment (DF) option bit in the IP headers of outgoing packets. Then, any device along the path whose MTU is smaller than the packet will drop it, and send back an Internet Control Message Protocol (ICMP) Fragmentation Needed (Type 3, Code 4) message containing its MTU, allowing the source host to reduce its Path MTU appropriately. The process is repeated until the MTU is small enough to traverse the entire path without fragmentation.
IPv4中,Path MTU Discovery的实现方式是这种。首先主机在发送数据包的时候,在IP头中设置DF标志(Don‘t Fragment 不要分段)。数据包会经过一系列路由器,当某个路由器检測到MTU小于数据包大小时,这个路由器会将数据包丢掉,然后通过ICMP协议将Fragmentation Needed消息发送会主机,这条消息中就包括了路由器的MTU信息。这样,主机才干又一次调整MTU来降低数据包的大小。这个过程一直会反复,直到数据包刚好能通过整条线路。
ICMP错误处理
话题
传输数据的时候假设发生了错误该怎么办呢?
要可以找出错误
互联网控制协议
基于IP协议,协议号为1
提供错误报告和測试机制。经经常使用于连通性測试
当数据包错误发生的时候,路由器会丢包,并通过ICMP协议将错误报告返回给主机
ICMP数据包格式
每一个ICMP消息都有类型、代码、校验和
通常将错误数据包的头部作为ICMP数据部分
通过IP协议进行封装
图示:[ IP头 [ ICMP [ 有问题的IP包头部 ] ] ]
ICMP消息种类
目标无法到达
超时
ping应答
Traceroute
IP头中包括了TTL,每一跳都会减1,防止死循环
traceroute利用了TTL的特性
第一步:设置TTL为1,第一个路由器返回错误信息
第二步:设置TTL为2,第二个路由器返回错误信息
。。。
traceroute默认发送UDP包,依据返回的ICMP错误消息来判定跳点
在linux中能够用traceroute -I来使用ICMP包进行路由跟踪
IPv6
话题
IPv6是IPv4的将来,眼下仍然在部署
互联网增长
至少有10亿的互联网主机
可是我们如今在用32位的地址空间,最多仅仅有40多亿的地址
IPv4地址用尽,IPv6能够解救
由IETF 1994開始,提供更大的地址空间
1998年成为IETF标准
IPv6部署情况
实时图表: https://www.google.com/intl/en/ipv6/statistics.html#tab=ipv6-adoption
2014年3月部署率达到3%
IPv6
提供更大的地址空间
新的表示方法
比方2001:0db8:0000:0000:0000:ff00:0042:8329能够简化成2001:db8::ff00:42:8329,注意中间仅仅有两个冒号
有非常多小的修改
头部流线型处理
Flow Label 能够将数据包分组
更适合现代特性:移动网络,多播,安全性
IPv6转换
怎样部署IPv6?IPv6和IPv4是不兼容的
有非常多解决的方法
双IP头
IP协议转换
通过隧道
IPv6隧道技术
将IPv6封装到IPv4中:[ IPv4 [IPv6] ]
IPv6 -> IPv4 -> IPv6
使用了隧道后,隧道可能须要经过多个路由器,可是在用户看来就仅仅能感觉到仅仅有两个路由器直接通信
NAT网络地址转换
话题
什么是NAT
路由器不会看IP层以上的协议
中间件
处理IP层及以上的协议:比方防火墙、NAT
长处
能高速部署
能控制非常多主机
缺点
打破了协议层,有时候会产生奇怪的副作用
假设网络流量大,NAT没什么优势
NAT中间件
NAT将内网的地址转换成外网的地址
受到IP地址用尽的启示
NAT
家庭中可能会有多台计算机,假设家庭路由器中使用了NAT,那么在ISP那里看起来好像仅仅有一台电脑
NAT怎样工作
路由器中保存了 内网/外网 的映射表
通常使用IP地址+TCPport号
路由表看起来例如以下:
内网IP:port | 外网IP:port |
192.168.1.12:5523 | 44.25.80.3:1500 |
192.168.1.13:1234 | 44.25.80.3:1501 |
192.168.2.20:1234 | 44.25.80.3:1502 |
须要port级别的映射,由于外网IP仅仅有一个
从内网发送的时候,或者从外网接收的时候通过查表,将IP头中的地址和port进行改写
内网至少要向外网发送一个数据包才干激活NAT
NAT缺点
连接被打断了,由于至少要内网向外网发送一个数据包才干激活NAT
无法开启P2Pserver
不能开启UDP
有时候意外暴露内网IP
NAT长处
减轻IP枯竭的压力
easy部署
功能有用
缺点总能克服的
标签:des style http color io os ar 使用 for
原文地址:http://www.cnblogs.com/mengfanrong/p/4049780.html