“基本概念”
物理层
物理层所做的只是接收一个原始比特流,并试图将它传递给目标机器。
数据链路层
数据链路层使用物理层提供的服务在通信信道上发送和s接收比特:
(1)向网络层提供一个定义良好的服务接口
(2)处理传输错误
(3)调节数据流,确保慢速的接收方不会被快速的发送方淹没
发送机器 接收机器
| ^
v |
数据包 数据包
| ^
v |
帧头:有效载荷:帧尾 帧头:有效载荷:帧尾
| ^
v |
-------------------------------------
数据链路层通常会提供以下3种可能的服务:
(1)无确认的无连接服务:源机器向目标机器发送独立的帧,目标机器并不对这些帧进行确认。事先不需要建立逻辑连接,
事后也不用释放逻辑连接。不做丢帧的特殊处理。例如:以太网。适用场景:1.错误率很低的场合,差错恢复交给上层
2.实时通信,比如语音传输,因为在实时通信种数据迟到比数据受损更糟糕
(2)有确认的无连接服务:数据链路层没有使用逻辑连接,但其发送的每一帧都需要单独确认。这样,发送方可知道一个帧
是否已经正确地到达目的地。若一个帧在指定时间间隔内还没有到达,则发送方将再次发送该帧。这类服务尤其适用于不
可靠信道,比如无限系统。802.11(WiFi)
值得强调的是,在数据链路层提供确认只是一种优化手段,永远不应该成为一种需求。网络层总是可以发送一个数据包,
然后等待该数据包被确认。如果在计时器超时之前,该数据包的确认还没有到来,那么发送方只要再次发送整个报文即可。
这一策略的麻烦在于它可能导致传输的低效率。链路层对帧通常有严格的长度限制,这是由硬件所决定的;除此之外,还有
传播延迟。但网络层不清楚这些参数。网络层可能发出了一个很大的数据包,该数据包被拆分并封装到10个帧中,而且20%
的帧在传输中被丢失,那么这个数据包可能需要花很长的时间才能传到接收方。相反地,如果每个帧都单独确认和必要时重传,
那么出现的差错就能更直接并且更快的被检测到。在可靠信道上,比如光纤,重量级数据链路协议的开销可能是不必要的;
但在无线信道上,由于信道内在的不可靠性,这种开销还是非常值得的。
(3)有确认的有连接服务:源机器和目标机器在传输任何数据之前要建立一个连接。连接上发送的每一帧都被编号,数据
链路层确保发出的每个帧都会真正被接收方收到。它还保证每个帧只被接收一次,并且所有的帧都将按正确的顺序
被接收。因此,面向连接的服务相当于为网络层进程提供了一个可靠的比特流。它适用于长距离且不可靠的链路,
比如卫星信道或者长途电话电路。如果采用有确认的无连接服务,可以想象丢失了确认可能导致一个帧被收发多次,
因而将浪费带宽。
当使用面向连接的服务时,数据传输必须经过三个不同阶段。第一个阶段,要建立连接,双方初始化各种变量和计数器,这些
变量和计数器记录了哪些帧已经接收到,哪些帧还没有收到。在第二个阶段,才真正传输一个或者多个数据帧。在第三个也是最
后一个阶段中,连接被释放,所有的变量、缓冲区以及其他用于维护该连接的资源也随之被释放。
成帧方法
(1)字节计数法:帧头标识帧中字符数,很少使用
(2)字节填充的标志字节法:标志字节作为帧的开始和结束分界符,ESC转义
(3)比特填充的标志比特法:特殊的比特模式作为开始和结束分界符,“0111 1110”0x7E标记,
遇到连续五个1,自动在输出的比特流中插入一个比特0
填充法的缺点是帧的长度会增幅大约12.5% (4)物理层编码违禁法:冗余比特
流量控制
(1)基于反馈的流量控制:大多数
(2)基于速率的流量控制:仅在传输层的一部分中可见
作为链路层硬件实现的网络接口卡(NIC),有时声称能以“线速”运行,所以任何过载不再是链路层的问题,它们必须由高层来处理
差错检测和纠正
1.纠错码:前向纠错
(1)海明码
(2)二进制卷积码
(3)里德所罗门码
(4)低密度奇偶校验码
2.检错码
(1)奇偶
(2)校验和
(3)循环冗余校验(CRC):多项式
应用程序
网络层
链路层(驱动器)
链路层(网络接口卡NIC)
物理层(线缆(介质))
网桥(以太网交换机)
网桥工作在数据链路层,
它们通过检查数据链路层地址来转发帧
后向学习算法
泛洪算法
生成树算法
中继器,集线器
工作在物理层
路由器
工作在网络层
传输网关
工作在传输层
应用网关
工作在应用层
网络层
数据报网络 VS 虚电路网络
问题 数据报网络(无连接) 虚电路网络(有连接)
电路建立 不需要 需要
寻址 每个包包含全部的源和目的地址 每个包包含间短的VC号
状态信息 路由器不保留连接状态 针对每个连接,每条VC都需要路由器保存其状态
路由方式 每个数据包被单独路由 建立VC时选择路由,所有包都遵循该路由
路由器失效的影响 没影响,除了那些路由器崩溃期间丢失的包 穿过故障路由器的所有VC都将中断
服务质量 困难 容易,如果在预先建立每条VC时有足够的资源可分配
拥塞控制 困难 容易,如果在预先建立每条VC时有足够的资源可分配
数据包分段
每个网络或链路都会限制其数据包的最大长度,限制来自多方面的原因,其中包括:
(1)硬件 (比如以太网帧的长度限制)
(2)操作系统 (比如所有的缓冲区都是512字节)
(3)协议 (比如,数据包长度字段中的位数)
(4)遵从某个国家(或国际)标准
(5)期望将错误引入的重传次数减少到某种程度
(6)期望防止数据包占用信道时间太长
一些常用技术的最大有效载荷长度:
1.以太网 1500字节
2.802.11协议 2272字节
3.IP协议 65515
MTU(Path Maximum Transmission Unit)
路径最大传输单元
透明分段 VS 非透明分段(IP)
Internet 通信过程
理论上,每个数据包最大容纳64KB,但实际上,数据包通常不超过1500字节(因而它么正好可被放到一个以太网帧中)
IPv4协议
|0000 0000|0000 0000|0 0 0 0 0000|0000 0000|
|版本 |IHL |区分服务 |总长度 |
|标识 |r|DF|MF|分段偏移量 |
|生存期 |协议 |头检验和 |
|源地址 |
|目的地址 |
|选项 |
IHL:头长,单位 4byte
总长度:该数据报中的所有内容,即头和数据,最大长度是65535个字节
标识:让目标主机确定一个新到达的分段属于哪一个数据报。同一个数据报的所有段包含同样的标识值
未使用:
DF:不分段标识,不允许路由器分割该数据报
MF:更多的段,除了最后一个段以外,其他所有的段都必须设置这一位,它的用途是接收方可以知道什么时候一个数据报的所有分段都已经到达了
分段偏移量:指明该段在当前数据报中的位置。除了数据报的最后一个段以外,其他所有段的长度必须是8字节的倍数。由于该字段有13位,所以每个数据报最多有8192个段,由此支持Total length字段限制的最大数据报
生存期:
协议:指明将它交给哪个传输进程,TCP是一种可能,UDP或者其他协议也有可能
IPv4地址分类
类别
00000000|00000000|00000000|00000000| 主机地址范围
A |0|网络 |主机 | 1.0.0.0 到 127.255.255.255
B |10|网络 |主机 | 128.0.0.0 到 191.255.255.255
C |110|网络 |主机 | 192.0.0.0 到 223.255.255.255
D |1110|组播地址 | 224.0.0.0 到 239.255.255.255
E |1111|保留 | 240.0.0.0 到 255.255.255.255
IPv4地址
每个32位地址由高位的可变长网络和低位的主机两部分数据组成
| 0000 0000 0000 0000 0000 0000 0000 0000 | 本机
| 00 ... 00 | 主机 | 本地网络的主机
| 1111 1111 1111 1111 1111 1111 1111 1111 | 在本地网络广播
| 网络 | 1111 ... 1111 | 在远程网络广播
| 127 | 任何内容 | 回环
NAT ———— 网络地址转换
使用了IP地址的三个范围:
10.0.0.0 ———— 10.255.255.255/8 (16777216个主机, 去掉全0和全1的地址)
172.16.0.0 ———— 172.31.255.255/12 (1048576个主机)
192.168.0.0 ———— 192.168.255.255/16(65536个主机)
IPv6
|0000 0000 | 0000 0000 | 0000 0000 | 0000 0000|
|版本 |区分服务 |流标签 |
|有效载荷长度 |下一个头 |跳数限制 |
|源地址(16字节) |
|目标地址(16字节) |
1.区分服务:用途主要是区分数据包的服务类别,这些数据包具有不同的实时传递需求,它主要被用在服务质量的区分服务体系
中,使用方式与IPv4数据包的同名字段一样。此外,最低2位用来发送显式拥塞指示,也与IPv4的方式相同
2.流标签:为源端和接收方提供了一种建立伪连接的方式,即源端和接收方把一组具有同样需求并希望得到网络通等对待的数据包打上标记。
例如,从某台特定主机上一个进程到一台特定主机上一个进程之间的数据包流可能有严格的延迟要求,因此需要预留带宽。这时
可以提前设置一个流(flow),并分配一个标识符。当一个流标签字段非0的数据包出现时,所有的路由器都在自己的内部表中
查找该流标签值,看它要求哪一种特殊的待遇。实际上,这样的流是两种传输模型相结合的一种尝试:数据报网络的灵活性和
虚电路网络的保障性。
3.有效载荷长度:指明40个字节头之后还有多少字节数
4.下一个头:该字段指明了当前头之后还有哪种扩展头(当前已经定义了6种扩展头),如果有的话。如果当前的头是最后一个IP头,那么
下一个头字段指定了该数据包将被传递给哪个传输协议处理(比如TCP,UDP)
5.跳数限制:与IPv4的TTL一样
6. 地址字段:16个字节被分成8组来书写,每一组4个十六进制数字,组之间用冒号隔开,如:
8000:0000:0000:0000:0123:4567:89AB:CDEF
三种优化写法:
a.在一个组内可以省略前导0,因此0123可以写成123;
b.16个“0”构成的一个或多个组可以用一对冒号代替: 8000::123:4567:89AB:CDEF
c.IPv4地址现在可以写成一对冒号再加上老式的点分十进制数: ::192.31.20.46
最小数据包长度从576字节增加到1280字节,以便允许1024字节的数据和许多个头
扩展头 描述
逐跳选项 路由器混杂信息
目标选项 给目的地的额外信息
路由 必须访问的松散路由器列表
分段 管理数据报分段
认证 验证发送方的身份
加密安全有效载荷 有关加密内容的信息
Internet控制协议
ICMP ————Internet控制消息协议
路由器严密监视Internet的操作。当路由器在处理一个数据包的过程中发生了意外,可通过Internet控制消息协议(ICMP,Internet Control Message Protocol)向数据包的源端报告有关事件;
ICMP还可以用来测试Internet。已经定义的ICMP消息类型大约有10多种,每一种ICMP消息类型都被封装在一个IP数据包中。
消息类型 描述
目的地不可达 数据包无法传递(DESTINATION UNREACHABLE)
超时 TTL字段减为0(TIME EXCEEDED)
参数问题 无效的头字段(PARAMETER PROBLEM)
源抑制 抑制包(SOURCE QUENCH)
(已前被用来抑制发送太多数据包的主机。当一台主机接收到这条消息时,它应该将发送速度减慢下来,现在很少使
用,因为发生拥塞时,再发这些包
无疑火上交油,现在Internet拥塞控制任务主要由传输层完成)
重定向 告知路由器有关地理信息(REDIRECT)
(当路由器注意到一个数据包看起来被错误的路由时,使用重定向将可能的错误信息告诉源端主机)
回显和回显应答 检查一台机器是否活着
(判断一个指定的目标是否可达,以及是否还活着。 ping工具)
请求/应答时间戳 与回显一样,但还要求时间戳
路由器通告/恳求 发现附近的路由
tips:Traceroute工具,利用超时特性
ARP ————地址解析协议
数据链路层硬件网卡 并不了解Internet地址。在以太网的环境里,每一块NIC在出厂时都配置了一个唯一的48位以太网地址。
NIC根据其48位以太网地址来发送和接收帧。它们对32位的IP地址完全一无所知
源主机发送一个广播包到以太网络上请求拥有IP地址192.32.65.5的目标主机。该广播包将会到达CS网络上的每一台主机,并且每台主机
都会检查自己的IP地址。只有目标主机会用自己的以太网地址作为应答。通过这种方式,源主机得知IP地址192.32.65.5的以太网地址。
请求和获得应答两个过程所使用的协议称为地址解析协议(ARP, Address Resolution Protocol)
默认网关:当主机发现目标IP地址不在同一网络,它知道应该将所有这些网络外的流量发给路由器,该路由器称为默认网关。按照惯例,
默认网关具有网络上的最低地址
ARP代理:路由器代替另一个网络的主机ARP请求作出响应
DHCP ————动态主机配置协议
动态主机配置协议(DHCP, Dynamic Host Configuration Protocol)
采用DHCP时,每个网络必须有一个DHCP服务器负责地址配置。当计算机启动时,它有一个嵌入在NIC中的内置以太网地址或其他链路层地址,
但没有IP地址。像ARP一样,该计算机在自己的网络上广播一个报文,请求IP地址。这个请求报文就是DHCP DISCOVER包,
这个包必须到达DHCP服务器。如果DHCP服务器没有直接连在本地网络,那么必须将路由器配置成能接收DHCP广播并将该请求
报文中继给DHCP服务器,由DHCP服务器来处理DHCP报文
当DHCP服务器收到请求,它就为该主机分配一个空闲的IP地址,并通过DHCP OFFER包返回给主机(这个报文或许也要通过路由器中继)。
为了在主机没有IP地址的情况下完成此项工作,服务器用主机的以太网地址来标识这台主机(主机的以太网地址由DHCP DISCOVER包携带过来)
标签交换和MPLS
在ISP网络之间移动Internet流量的技术,称为多协议标签交换(MPLS, MultiProtocol Label Switching),它非常接近电路交换
标签交换路由器(LSR, Label Switched Router)
标签边缘路由器(LER,Label Edge Router)
开放最短路径优先(OSPF, Open Shortest Path First) ————内部网关路由协议(interior gateway protocol)
中间系统到中间系统(IS-IS, Intermediate-System to Intermediate-System)协议
IS-IS 更多地应用在ISP网络, OSPF更广泛地应用在公司网络
通过使用LINK STATE REQUEST 消息,每一对邻接路由器中的任一个路由器都可以向另一个路由器请求链路状态信息。
这个算法的结果是,每一对邻接路由器都可检查谁有最新的数据;新的信息就是通过这种方式被传播到整个区域。所有这些
消息都是以IP数据包的形式直接被发送处去。有如下5类消息
消息类型 描述
HELLO 用来发现所有的邻居
LINK STATE UPDATE 提供发送者到其邻居的成本
LINK STATE ACK 对链路状态更新消息的确认
DATABASE DESCRIPTION 声明发送者的链路状态更新情况
LINK STATE REQUEST 请求链路状态信息
BGP ———— 外部网关路由协议
在AS内部,推荐使用的路由协议是OSPF和IS-IS。在AS之间,则可以使用另一个协议,称之为边界网关协议(BGP, Border Gateway Protocol)
Internet 组播
224.0.0.1 LAN上的全部系统
224.0.0.2 LAN上的全部路由器
224.0.0.5 LAN上的全部OSPF路由器
224.0.0.251 LAN上的全部DNS服务器
Internet 组管理协议(IGMP, Internet Group Management Protocol):大约每分钟一次,每个组播路由器向它所在LAN上的
所有主机发送一个查询数据包(当然使用本地组播地址224.0.0.1),要求这些主机报告自己当前属于哪些组。组播路由器可能与标准的
路由器在同一台机器上,也可能分属两台机器。每个主机收到查询消息后,返回一个响应包,其中包括了自己感兴趣的所有D类地址。
这些查询包和应答包使用的就是IGMP
移动IP
传输层
在传输层内,完成这项工作的硬件和/或软件称为传输实体。传输实体可以实现在主机的不同位置:
1.操作系统内核
2.以一个链接库的形式绑定到网络应用中
3.以一个独立的用户进程进行
4.可以实现在网络接口卡上
前两种实现方式在Internet上最常见
面向连接的传输服务在许多方面与面向连接的网络服务类似,都需要经历3个阶段:连接建立、数据传输和连接释放。
在这两层上,寻址和流量控制非常相像。另外,无连接的传输服务与无连接的网络服务也极为相似。然而请注意,
在一个面向连接的网络服务之上提供无连接传输服务可能很困难,因为为了发送单个数据包要建立一个连接,发送
完毕后还要立即拆除这个连接,效率实在太低
Q:为什么需要传输层(传输层服务与网络层服务非常相似)
A:因为传输层的代码完全运行在用户的机器上
一个简单传输服务的原语
原语 发出的包 含义
LISTEN 无 阻塞,直到某个进程试图与之连接
CONNECT CONNECTION REQ 主动尝试建立一个连接
SEND DATA 发送信息
RECEIVE 无 阻塞,直到到达一个DATA包
DISCONNECT DISCONNECTION REQ 请求释放连接
段(传输层之间交换的单元)被包裹在数据包(网络层之间交换的单元)中,而数据包则被包含在帧(数据链路层之间交换的单元)中。
Berkeley 套接字
TCP套接字原语
原语 含义
SOCKET 创建一个新通信端点
BIND 将套接字与一个本地地址关联
LISTEN 声明愿意接受连接:给出队列长度
ACCEPT 被动创建一个入境连接
CONNECT 主动创建一个连接
SEND 通过连接发送一些数据
RECEIVE 从连接上接收一些数据
CLOSE 释放连接
套接字也可与提供消息流而不是字节流的传输协议一起工作,而且也可以进行拥塞控制,也可以不进行拥塞控制
数据报拥塞控制协议(DCCP, Datagram Congestion Controlled Protocol)
DCCP是一个带有拥塞控制机制的UDP版本
流控制传输协议 和 结构化流传输
SCTP(Stream Control Transmission Protocol)
SST(Structured Stream Transport)
使应用程序更加有效并简单地管理一组相关流。
这些协议必须略微修改套接字API才能获得把相关数据流组成一组的好处,它们也必须支持混合功能,比如把面向连接的流量和无连接
流量混合在一起,甚至可以组合多条网络路径组合。
寻址
传输服务访问点(TSAP, Transport Service Access Point)来表示传输层的一个特殊端点
网络层上的类似端点(即网络层地址)毫不奇怪地称为网络服务访问点(NSAP, Network Service Access Point)。IP地址是NSAP的实例
数据包的生存期
数据包的生存期可以用以下一种(或多种)技术被限定在一个给定的最大值之内:
(1)限制网络设计
(2)在每个数据包中放置一个跳计数器
(3)为每个数据包打上时间戳
周期T:它是数据包实际最大生存期的某个不太大的倍数。最大数据包的生存期是一个网络的保守常数,对于Internet来说,它有点随意
地取了120秒。倍数与具体地协议有关,它只影响T地长短。
UDP概述
客户-服务器RPC是UDP广泛应用的一个领域,UDP的另一个应用领域是实时多媒体应用。 域名系统(DNS)
实时传输协议(RTP,Real-time Transport Protocol)
广泛应用于多媒体应用程序
实时传输控制协议(RTCP)
RTP的一个姊妹协议,处理反馈、同步和用户接口等,但不传输任何媒体样值
TCP
端口 协议 用途
20,21 FTP 文件传输
22 SSH 远程登录,Telnet的替代品
25 SMTP 电子邮件
80 HTTP 万维网
110 POP-3 访问远程邮件
143 IMAP 访问远程邮件
443 HTTPS 安全的Web
543 RTSP 媒体播放控制
631 IPP 打印共享
TCP连接管理模型
状态 描述
CLOSED 没有活跃的连接或者挂起
LISTEN 服务器等待入境呼叫
SYN RCVD 到达一个连接请求;等待ACK
SYN SEND 应用已经启动了打开一个连接
ESTABLISHED 正常的数据传送状态
FIN WAIT1 应用没有数据要发送可
FIN WAIT2 另一端同意释放连接
TIME WAIT 等待所有数据包寿终正寝
CLOSING 两端同时试图关闭连接
CLOSE WAIT 另一端已经发起关闭连接
LAST ACK 等待所有数据包寿终正寝