网络协议分析
⏹ IP 协议负责主机到主机之间的通信。运输层与网络层最大的区别是运输层提供进程通信能力。
TCP/IP使用端口来标识通信的进程。
⏹ UDP 和TCP 都使用端口与上层的应用进程进行通信。
⏹ 端口是运输层服务访问点(TSAP)。
⏹ 应用进程将其数据通过端口向下交付给运输层;运输层将其报文段中的数据通过端口交付给相应
进程。
⏹ 端口用来标志应用层的进程。
⏹ 运输层不使用端口号而使用“进程ID”来标识一个进程是否可行?
⏹ 不可行。
⏹ 进程ID 在系统每次启动后都不一样,客户进程就无法找到提供服务的进程。
⏹ 并且客户进程并不关心提供服务的是哪一个进程。
⏹ 端口用一个 16 bit 端口号进行标志。TCP 和UDP 是两个独立的软件模块,因此各自的端口号也相
互独立。如都可以有255号端口。
⏹ 端口号只具有本地意义,不同计算机的相同端口号是没有联系的。
⏹ 一类是熟知端口,其值为 0~1023,用来分配给服务器进程,便于让客户知道。
⏹ 另一类则是一般端口,用来随时分配给请求通信的客户进程。
⏹ 使用知名端口有什么优点与缺点?
⏹ ◆ 知名端口一般是供服务器使用的,便于来访者使用服务。如果不用知名端口需要将端口号通
知所有用户。
⏹ ◆ 但从网络安全的角度来看,知名端口更容易遭受攻击。
⏹ 客户端程序的端口号有两种使用方式:
⏹ ◆一种是由应用程序开发者指定。
⏹ ◆另一种是由操作系统随机分配一个未使用的端口号。
⏹ 当不再进行网络通信时,可关闭端口,释放资源,被关闭的端口可被再分配。
⏹ 为了使多主机多进程通信时不发生混乱,必须把端口号和主机的IP 地址结合起来使用,称为套接
字(Scoket )。
⏹ 套接字包括IP 地址(32位) 和端口号(16位) ,共48位。进行通信的一对套接字在整个Internet 中是
唯一的。
⏹ TCP 与UDP 都使用套接字通信。
⏹
⏹ 下层向上层提供的服务有两种形式:
面向连接的服务与无连接的服务。
⏹ 面向连接的服务在进行数据交换前,先建立连接,传输结束后释放连接。
1)建立连接阶段:在有关协议数据单元中,必须给出源用户与目的用户的完整地址。同时可协商服务质量等选项。
数据交换阶段:在这个阶段,每个报文中不必包含用户完整的地址,而是使用一个连接标识符来代替。 报文的发送和接收都是按顺序的,发送方先发送的报文,在接收方先收到。
⏹ 两个实体通信前不必先建立连接。无连接服务灵活方便,但不能防止报文的丢失、重复和乱序。 ⏹ 每个报文必须包含完整的源地址和目的地址,因此开销较大。 3)释放连接阶段:通过相应的协议数据单元完成释放操作。
⏹ UDP 提供无连接的传输服务,对等的UDP 实体在传输时不建立端到端的连接,只是简单地发送或
接收数据。
⏹ UDP 不保证可靠的数据传输,不具有确认、重传等机制。使用UDP 的程序可根据自己的需求设计
相应的可靠性机制,如TFTP 。
⏹ 虽然UDP 只提供不可靠的交付,但在某些方面有特殊的优点:
⏹ 发送数据之前不需要建立连接。
⏹ UDP 主机不需要维持复杂的连接状态表。
⏹ UDP 用户数据报只有8个字节的首部开销。
⏹ 网络出现的拥塞不会使源主机的发送速率降低。这对某些实时应用是很重要的。
⏹ UDP 保留应用程序定义的报文边界,不把两个应用程序报文组合在一起,也不把单个报文划分成
几部分。
⏹ 块数据将作为独立的单元到达对方的应用程序。
⏹ 应用程序必须关心IP 数据报的长度。
⏹ 当应用程序把一块数据交给UDP 发送时,这UDP 用户数据报有两个字段:首部字段和数据字段。
首部字段有8个字节,由4个字段组成,每个字段2字节。
⏹ 在计算检验和时,临时把“伪首部”和 UDP 用户数据报连接在一起。伪首部仅仅是为了计算检验和。 ⏹ 长度:是首部与数据部分的总长度。
⏹ 校验和:校验范围包括首部、数据部分、伪首部。如果该字段为0就表明不进行校验。因此UDP
是否进行校验是可选的。
⏹ UDP 数据报的最大长度为:
⏹ IP 数据报的最大长度是65535字节。
⏹ 65535 – 20 = 65515字节。
⏹ UDP 数据报中用户数据的最大长度是:
⏹ 65515 – 8 = 65507字节。
⏹ 以上只是理论长度,具体长度与具体操作系统的协议模块有关,如SunOS 下使用回送接口的最大
IP 数据报长度为32767字节,所以UDP 的最大长度为32747。
⏹ UDP 用户数据报封装在IP 数据报中,IP 数据报的“协议类型”字段的值是17,表示数据部分是从
UDP 协议来的。
⏹ UDP 校验和校验的范围包括三部分:伪首部、UDP 首部以及UDP 数据部分。
⏹ 伪首部是IP 首部的一部分,其中有些字段填0
⏹ 若校验和不包括伪首部,即使UDP 数据报不出错,也可能因为IP 首部在传输中出错导致无法正
确交付。
⏹ 伪首部中的高层协议类型字段是为了确保这个数据报是属于UDP 而不是属于TCP 。
⏹ UDP 的高层协议类型是17,若这个值在传输过程中出错,接收端就能检测出并丢弃这个数据包,
从而不会交付给错误的协议。
⏹ UDP 校验和的计算方法与IP 首部校验和的计算方法相同。
⏹ UDP 和IP 的不可靠程度是否相同?
⏹ ◇ 不同。
⏹ ◇ IP 只进行首部校验。
⏹ ◇ UDP 可以进行校验,也可以不进行校验。如果校验则对整个UDP 报文进行校验。
⏹ 为什么UDP 校验和独立于IP 校验和?
⏹ ◇ UDP 是运输层的,UDP 校验和的计算是在通信端点的主机上进行的。
⏹ ◇ IP 是网络层的,IP 校验和的计算是在通信端点及中间路由器上进行的。
⏹ 你是否反对这样的协议:对包括UDP 报文在内的整个IP 数据报使用同一个校验和?
⏹ ◇ 如果使用同一校验和,会导致在网络层的计算量过大,降低IP 数据报的传输效率。
⏹ 一个UDP 数据报首部的十六进制表示为:
⏹ 06 32 00 45 00 1C E2 17
⏹ 试求源端口、目的端口、用户数据报的总长度、数据部分长度。
⏹ 这个数据报是从客户发送给服务器的还是服务器发送给客户的?该服务器程序是什么?
⏹ ◇ 源端口:0x0632 = 1586
⏹ ◇ 目的端口:0x0045 = 69
⏹ ◇ 总长度:0x001C = 28,数据部分长度20
⏹ ◇ 从客户发给服务器的,服务器是TFTP 。
⏹ UDP 数据报数据部分的长度为8192字节,通过以太网传送,该报文将被分成多少个IP 数据报?
每片的片偏移是多少?
⏹ 需要封装在IP 数据报中的数据长度为:
⏹ 8192 + 8 = 8200 字节
⏹ 以太网的MTU 为1500,因此每片大小为:
⏹ 1500 – 20 = 1480 字节 (1480 ÷ 8 = 185)
⏹ 8200 / 1480 > 5,所以应分成6片。
⏹ 片偏移依次是:0, 185, 370, 555, 740, 925
⏹ 一个应用程序用UDP 发送数据报。一份数据报被分成了4个数据报片发送出去,结果第1片和第
2片丢失了,只有第3片和第4片到达目的端。
⏹ 应用程序过了一段时间后超时重发该用户数据报,还分成与上次相同的4个数据报片。
⏹ 当重发的第1片和第2片到达目的端时,第一次收到的第3片和第4片还在目的端的缓存中,接
收端能否将这4片组装成为一份数据报?为什么?
⏹ 上面所说的分片是网络层分片还是应用层分片?
⏹ 经分析,是网络层。因“标识”字段不同,故不能重组
⏹ 使用UDP 的用户进程能否跳过UDP 而直接交给IP 层?UDP 能否提供IP 没有提供的功能? ⏹ IP 数据报包含IP 地址,该地址指定了目的主机。但无法确定交给哪一个进程。
⏹ UDP 数据报包含“目的端口”,利用这一信息,数据包能传给正确的进程。
⏹ 如何判断远程主机上的某个UDP 端口是否开放?
⏹ 向远程主机的该端口发一UDP 报文,通常情况下,如果收到“目的端口不可达”的ICMP 报文就表
示该端口关闭。
⏹ 对校验和的使用,UDP 给出了两种方案:
⏹ ◆ 使用校验和
⏹ ◆ 不使用校验和
⏹ 使用校验和时,即使只有一位发生了变化,整个数据包都会被丢弃。在某些应用环境下,这种限
制显得过于严格,比如音频、视频传播可以接收错误的数据,而不是将其丢弃。
⏹ 但是,如果禁用UDP 的校验和功能,则将失去对UDP 数据报的校验功能。
⏹ 为此,2004年7月,IETF 推出了轻量级用户数据报协议UDP-Lite (Lightweight User Datagram
Protocol) 。
⏹ 它更加适应于网络的差错率比较大,但是应用对轻微差错不敏感的情况,例如实时视频的播放等。 ⏹
⏹ 拓扑1下同一组中的三台机器A ,B ,C 。
⏹ A 编辑一个UDP 数据报,目的MAC 为C ,目的IP 为B 。然后发送该数据报。
⏹ 1、B 、C 的分析器捕捉MAC 帧时能捕捉到吗?
⏹ 能。
⏹ 2、B 、C 的分析器捕捉UDP 数据报时能捕捉到吗?
⏹ 能。
⏹ 3、B 、C 的UDP 工具能接收到吗?
⏹ 不能。在实际应用中,B 的MAC 层发现目的MAC 不是自己,就丢弃;C 的IP 层发现目的IP 不
是自己,就丢弃。
⏹ 4、如果目的MAC 为B ,目的IP 为C ,再回答上述问题。
⏹ 因为A 、B 处于同一共享模块,所以仅B 的分析器能捕捉到数据包。
⏹ 在同一网段中,主机A 将IP 设为172.16.0.2,主机B 将IP 设为172.16.1.2,掩码均为255.255.255.0。
A 使用UDP 工具向255.255.255.255发送数据时,B 能收到吗?
⏹ 能。
⏹ A 发送的数据报在MAC 层的目的地址为广播地址FFFFFF-FFFFFF ,B 收到后上交到网络层,网络
层发现目的IP 是255.255.255.255,就收下向上层交付。
⏹
⏹ IGMP
⏹ 单播:单个源站与单个目的站之间的通信叫作单播。IP 数据报中的源IP 地址和目的IP 地址分别
代表了源站和目的站。
⏹ 多播:一个源站和多个目的站之间的通信叫作多播。IP 数据报中的源地址是单播地址,目的地址
是组地址(D类地址) 。
⏹ 路由器收到多播数据包后,可从它的多个接口转发出去。
广播:源站和目的站是一对多的,源站只有一个,但所有其它主机都是目的站。Internet 不支持广播,因为这会产生非常大的通信量
⏹ 多播可以分为两种:
1. 在物理网络上的多播,如以太网多播。
2. 在逻辑网络上的多播,如IP 多播。
3. 2.1 硬件多播
4. 在以太网中,硬件地址的一半用于硬件多播,用高位地址中的最低位(I/G比特) 来区别单播地址(置
0) 和多播地址(置1) 。
5. 硬件多播只能在同一个物理网段上进行,路由器隔离了硬件多播和广播。
6. 2.2 IP多播
7. IP 多播(IP Multicasting) 是对硬件多播的推广。IP 多播同样允许一个源站与一组目的站通信,但这
组目的站可以位于互联网中的任意物理网络上。
8. 这一组目的站叫作多播组(Multicast Group)。
⏹ 2.3 多播的优点:
1. 多播比多个单播更能节省网络带宽。
2. 多播比多个单播具有更小的分组时延。例如:一个组中有1000个成员,如果用单播,第一个分
组和最后一个分组的时延可能是无法接受的。
3. 2.4 IP多播地址
4. IP 多播地址分为两类:永久地址和临时地址。
5. D 类IP 地址用于多播。D 类地址不再分层。
6. 永久地址如:
224.0.0.1 永久分配给一个物理网段上包含所有主机和路由器的组;
224.0.0.2 永久分配给一个物理网段上包含所有路由器的组。
7. 2.5 IP多播的特征:
8. 为了实现多播,站点必须安装收发多播分组的软件。
9. 当参与跨网段的多播时,站点必须通知本地多播路由器。通过本地多播路由器与其他多播路由器
通信,传输成员信息并建立多播路由。
10. IP 多播有以下特征:
11. 多播路由器的支持:转发IP 多播分组需要特殊的多播路由器。
12. 组地址:每个组有唯一的一个D 类地址,IP 最多可提供2个多播地址,分为永久地址和临时地
址两类。
13. 动态的组成员:一个站点可在任何时候加入或退出一个群组。一个站点可以是多个群组的成员。
14. 成员和传输:任何站点可以向任何群组发送分组。
15. 交付机制:IP 多播同样使用尽最大努力交付机制,分组可能丢失、延迟、重复或乱序。
16. 底层硬件:如果底层硬件支持硬件多播,则可以使用硬件多播发送IP 多播。如果底层硬件不支持,
则使用广播或单播来实现IP 多播。
17. 2.6 用以太网多播实现IP 多播
18. 以太网支持硬件多播,当IP 多播分组传到以太网时,就使用硬件进行多播,交付给该群组的成员。
19. 要把IP 多播地址映射为以太网多播地址,只要提取出D 类IP 地址的低23位,并复制到以太网多
播地址中。
28
⏹ 以太网多播MAC 地址的前25位是固定的,因此以太网的MAC 地址范围是01005E000000到
01005E7FFFFF 。
⏹ 多播数据报在传输过程中,若遇到不支持多播的路由器或网络时,就要采用隧道技术。
⏹ 路由器对多播数据报进行再次封装,即再加上普通数据报的首部,使其成为单播数据报。
⏹ 通过“隧道”后,再剥去首部,继续向多个目的站转发。
⏹ IGMP( Internet Group Management Protocol)协议位于网络层,运行于主机和与主机直接相连的多
播路由器之间,在路由器和主机之间进行组成员关系的通信。
⏹ 多播路由器在传输组成员关系之前,必须知道本网络上有哪些主机已加入某群组。
⏹ 通过IGMP 协议,一方面可以使主机通知本地路由器希望加入并接收某个特定多播组的信息; 另一方面,路由器可以周期性地查询局域网内某个已知组的成员是否处于活动状态。
⏹ 网络上的每个多播路由器中都有一个多播地址表。
⏹ 其中每个多播地址对应一个群组,一个群组至少包含本地网络上的一个成员。
⏹ 主机或路由器都可以是一个群组中的成员。
多播路由器把多播分组分发给一个群组中的各个成员
1、加入一个组:
⏹ 每个主机维护一张成员关系表,成员关系表是 表项的集合。当一个进程P 要加
入一个新组MG 时,就向主机发出申请,主机就在成员关系表中增加
表项。
⏹ 如果MG 在表中不存在,主机就发送成员关系报告报文。
⏹ 如果MG 在表中已经存在,那就不必发送成员关系报告报文,因为主机已经是MG 这个组的成员
了。
2、删除一个组:
⏹ 当主机发现在一个群组MG 中已经没有进程时,就发送退出报告报文,多播路由器收到该报告。 ⏹ 多播路由器收到退出报告报文时,并不立即删除这个群组MG ,而是发送针对MG 的查询报文,
因为这个退出群组报告仅仅是从一个站点发送来的,可能还有其他站点仍然需要这个群组。
⏹ 若在指定时间内没有收到站点对该群组的成员关系报告,就意味着在本网络上没有这个群组MG
的成员,删除这个群组。
3、监视组成员关系
⏹ 多播路由器周期性地(默认125s )发送一般查询报文,在这个报文中,组地址是 0.0.0.0。期望它
的多播地址表中的每一个组的回答。
⏹ 当主机或路由器收到一般查询报文时,如果它对一个组感兴趣,就发送成员关系报告报文。 、延迟响应
⏹ 为了避免不必要的通信量,IGMP 使用延迟响应策略。当主机或路由器收到查询报文时,不是立
即响应,而是延迟响应。
⏹ 主机或路由器使用随机数计时器,截止时间是1~10秒。每一个主机或路由器在发送成员关系报
告报文之前都要等待计时器到时。
⏹ 在这段时间内,如果监听到同组的其它站点已发送了成员关系报告报文,就不必再发送了。 ⏹
IGMP 报文被封装在IP 数据报中,在IGMP 数据包封装过程中,IP 层有3个字段需要注意,它们是:
⏹ 高层协议类型字段:值为2,高层协议类型为2的IP 数据包,其数据部分都要交给IGMP 协议处
理。
⏹ 生存时间字段:值为1,生存时间值为1保证了这个报文不离开这个局域网。
⏹ 目的IP 地址字段:为D 类地址。
⏹ 2、路由器多播地址表的形式为:
⏹ IP 地址 组地址
⏹ 上面的“IP地址”中是否包含与路由器相连的主机的IP ?
⏹ 不包含。
⏹ 3、什么情况下路由器的某端口IP 会出现在路由器的多播地址表中?
⏹ 该端口所连接的网段中存在主机属于某多播组。
⏹ 4、为什么没有必要让IGMP 报文在它自己的网络以外传送?
⏹ 因为IGMP 运行于主机和与主机直接相连的路由器之间。
⏹ 5、如果一个主机要在五个组中继续其成员关系,它应当发送五个不同的成员关系报告报文还是
只发送一个?
⏹ 一个。在一个成员关系报文中可以指定多个组地址。
⏹
每个具有组播能力的主机都保留有一个具有组播组成员身份的进程表。当一个进程想加入一个新的组播组,它就向主机发送请求信息。 主机就把进程的名字和接收请求的组播组的名字加入这个进程表。需要注意的是, 主机只有在确认这是要求获得该组播组成员身份的第一个请求时才向组播路由器发送一条IGMP 信息。换句话说, 一个主机对于一个特定组播组身份的请求信息只发送一次。这是一种由接收方来初始化的加入方法,在组播组的数据越来越多的时候, 这种方法可以使新加入的组播组成员尽快找到离它很近的组播组的分支,从而加入组播组。
⏹