<tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
来源:互联网 发布:淘宝怎么加旺旺号 编辑:程序博客网 时间:2024/05/16 07:54
这一次将总结IP层的分用中的UDP与IGMP。UDP是一个简单的面向数据报的运输层协议,它提供不可靠服务:它把应用程序的数据加上UDP头部之后就传递给IP层发送出去,但是并不能保证它们能到达目的地。应用程序必须关心IP数据报的长度,如果它超过网络的MTU,那么就要对IP数据报进行分片。如果需要,源端到目的端之间的每个网络都要进行分片,并不只是发送端主机连接第一个网络才这样做。IGMP是一种支持主机和路由器进行多播的Internet组管理协议。广播和多播只能应用于UDP,所以我在这里把UDP和IGMP放在一起总结了,书中也是这样的顺序,呵呵。
1. UDP:用户数据报协议
下图是UDP首部的格式:
端口号表示发送进程和接收进程。UDP长度字段指的是UDP首部和UDP数据的字节长度,该值等于IP数据报总部中的IP数据报长度减去TCP首部的长度。UDP检验和(可选)覆盖UDP首部和UDP数据,计算方法跟我们前面提到的IP首部检验和的计算方法一致。如果遇到UDP数据为奇数字节,则填充一字节的0. 计算时,还将在UDP首部前加上UDP伪首部,目的是让UDP两次检查数据是否已经正确到达目的地。下图是伪首部和字节填充的示意图:
我们提到过网络的MTU,也提到过IP数据报首部中的MF和DF位以及13位偏移位,当UDP数据报的长度超过网络的MTU时,必须对其进行分片。如果设置了DF位但是通过某个网络时需要分片,将会产生ICMP“不可达(需要分片)”的差错报文,我在前面的ICMP部分居然写着写着就把它给忘了。新一些的路由器都允许在ICMP首部8个字节的每7~8字节(那里被要求设置成0)中返回自己的MTU。分片需要注意的是:(1)在分片时,除最后一片外,其他每一片中的数据部分(除IP首部外的其余部分)必须是8整数倍(这是为什么呢?后面的习题也有瓿,我目前还不知道。。。);(2)运输层首部只出现在第一片中。UDP比较简陋,所有包丢失、重传问题都必须由上层应用程序来管理。
2. 互联网的地址、广播、多播
互联网地址有5类,格式如下:
有三类地址:单播地址,多播地址和广播地址。主机号为全0代表网络号,主机号为全1代表在该网络的广播。有四种广播地址:
一是受限的广播地址255.255.255.255.该地址用于主机配置过程中IP数据报的目的地址,在任何情况下,路由器都不转发目的地址为受限的广播地址的数据报,这样数据报仅出现在地址网络中。
二是指向网络的广播地址,主机号为全1.如A类广播地址为netid.255.255.255,一个路由器必须转发指向网络的广播。
三是指向子网的广播。指向子网的广播地址为主机号为全1且有特定子网号的地址。作为子网直接广播地址的IP地址需要了解子网的掩码,例如,如果路由器收到发往128.1.2.255的数据报,当B类网络128.1的子网掩码为255.255.255.0时,该地址就是指向子网的广播地址;但如果该子网的掩码为255.255.254.0,该地址就不是指向子网的广播地址。
四是指向所有子网的广播。指向所有子网的广播也需要了解目的网络的子网掩码,以便与指向网络的广播地址区分开来,指向所有子网的广播地址的子网号和主机号全为1.例如,如果目的子网掩码为255.255.255.0,那么IP地址128.1.255.255就是一个指向所有子网的广播地址,然而,如果网络没有划分子网,这就是一个指向网络的广播。
广播给网络中的主机产生了很多负担,广播的数据报要直到UDP层才被确定是否为主机所需要(没有监听的端口)然后才会被丢弃。多播是介于单播与广播之间的一种方式。
能够接收发往一个特定多播组地址数据的主机集合称为主机组。一个主机组可以跨越多个网络,主机组中成员可以随时加入或离开主机组。主机组中对主机的数量没有限制,同时不属于某一主机组的主机可以向该组发送信息。
下图是多播组地址到以太网地址的转换:
之所以是23位映射,听说是发明组播的那个人(当时还是个博士)的导师只肯给他买半个A类地址做实验,所以就只映射了23位。这是我在某次网络课的时候迷迷糊糊听到的,嘿嘿。
3. IGMP协议
多播路由器使用IGMP报文来记录与该路由器相连网络中组成员的变化情况,其报文格式如下:
规则如下:
(1)当第一个进程加入一个组时,主机发送一个IGMP报告,如果有多个进程加入同一个组,只需发送一个报告;
(2)进程离开一个组时,不需要发送任何报告;后期路由器发送IGMP查询时,不再发送报告;
(3)多播路由器定时发送(向每个接口)IGMP查询来了解是否还有任何主机包含有属于多播组的进程,此时IGMP查询报文中的组播地址被设置为0.
(4)主机通过发送IGMP报告来响应一个IGMP查询,对每个至少还包含一个进程的组均要发回IGMP报文。
我记得上网络课时还提到过多种算法来减少网络中的流量,包含剪枝、抑制之类的。总之,一个核心思想是,多播路由器并不关心有多少主机属于一个多播组,它只是想知道给定接口上的多播组是否还有人对这个多播组感兴趣。
- <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
- <tcp/ip详解卷一>阅读笔记(2)——IP层的分用(ICMP)
- <tcp/ip详解卷一>阅读笔记(1)— 以太网帧及其分用
- TCP/IP协议详解:卷一----笔记(4)UDP
- <tcp/ip详解卷一>阅读笔记(4)——TCP
- TCP/IP详解 卷一 ------IGMP
- TCP/IP笔记 二.网络层(3)——广播,多播,IGMP
- TCP/IP笔记 二.网络层(3)——广播,多播,IGMP
- TCP/IP 详解卷一学习笔记(二):网络层 IP
- TCP/IP协议之IP层(转自TCP/IP详解卷一)
- TCP/IP 详解卷一学习笔记(三): UDP 用户数据报协议
- TCP/IP 详解卷一 - UDP
- TCP/IP协议详解 卷一 --------UDP
- TCP/IP协议详解:卷一----笔记(2)数据链路层
- tcp/ip 详解卷一,阅读随笔
- 阅读笔记:TCP/IP详解卷1
- TCP/IP协议详解:卷一----笔记(3)IP:网际协议
- 《TCP-IP详解 卷1:协议》学习笔记(一)
- svn图标(状态)不显示-Eclipse<MyEclipse>
- Myeclipse SVN插件按照弹出failure activating drop-ins 警告
- myEclipse智能提示设置
- <tcp/ip详解卷一>阅读笔记(1)— 以太网帧及其分用
- <tcp/ip详解卷一>阅读笔记(2)——IP层的分用(ICMP)
- <tcp/ip详解卷一>阅读笔记(3)——IP层的分用(UDP和IGMP)
- <tcp/ip详解卷一>阅读笔记(4)——TCP
- windows7配置 Nginx+php+mysql
- _CrtDumpMemoryLeaks报告程序中的内存泄露问题(简单示例代码)
- 快速排序-C语言版
- json数据解析
- JDBC 开发
- 和菜鸟一起学linux总线驱动之初识i2c驱动数据传输流程
- 检测单链表是否有环新解