网络传输整个系统详解,ARPUDPTCPIP数据传输格式强烈推荐.pdf
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《网络传输整个系统详解,ARPUDPTCPIP数据传输格式强烈推荐.pdf》由会员分享,可在线阅读,更多相关《网络传输整个系统详解,ARPUDPTCPIP数据传输格式强烈推荐.pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、TCP/IP 协议栈与数据包封装TCP/IP 网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示(该图出自)。图 36.1.TCP/IP 协议栈两台计算机通过TCP/IP 协议通讯的过程如下所示(该图出自)。图 36.2.TCP/IP 通讯过程传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socketAPI 编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议
2、都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示(该图出自)。图 36.3.TCP/IP 数据包的封装不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示(该图出自)。图 36.4.跨路由器通讯过程其实在链路层之下还有物理层
3、,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大传输速率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由
4、于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。网络层的IP 协议是构成Internet 的基础。Internet 上的主机通过IP 地址来标识,Internet上有大量路由器负责根据IP 地址选择合适的路径转发数据包,数据包从Internet 上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP 协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。网络层负责点到点(
5、point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。传输层可选择TCP 或UDP 协议。TCP 是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。也就是说TCP 传输的双方需要首先建立连接,之后由 TCP 协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。UDP 协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既
6、不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。使用 UDP 协议的应用程序需要自己完成丢包重发、消息排序等工作。目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?整个过程如下图所示(该图出自)。图 36.5.Multiplexing过程以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP 还是 RARP 协议的数据报,然后交给相应的协议处理。假如是 IP 数据报,IP 协议再根据IP 首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP 还是 IGMP,
7、然后交给相应的协议处理。假如是 TCP 段或 UDP 段,TCP 或 UDP 协议再根据TCP 首部或 UDP 首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。IP 地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP 地址和端口号合起来标识网络中唯一的进程。注意,虽然IP、ARP 和 RARP 数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP 和 RARP 属于链路层,IP 属于网络层。虽然ICMP、IGMP、TCP、UDP 的数据都需要IP 协议来封装成数据报,但是从功能上划分,ICMP、IGMP 与 IP 同属于网络层,TCP 和 UD
8、P 属于传输层。本文对RARP、ICMP、IGMP 协议不做进一步介绍,有兴趣的读者可以看参考资料。2.以太网(RFC 894)帧格式以太网的帧格式如下所示(该图出自):图 36.6.以太网帧格式其中的源地址和目的地址是指网卡的硬件地址(也叫MAC 地址),长度是 48位,是在网卡出厂时固化的。用ifconfig 命令看一下,“HWaddr 00:15:F2:14:9E:3F”部分就是硬件地址。协议字段有三种值,分别对应IP、ARP、RARP。帧末尾是CRC 校验码。以太网帧中的数据长度规定最小46 字节,最大 1500 字节,ARP 和 RARP 数据包的长度不够46 字节,要在后面补填充位
9、。最大值1500 称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,如果一个数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的 MTU 了,则需要对数据包进行分片(fragmentation)。ifconfig 命令的输出中也有“MTU:1500”。注意,MTU 这个概念指数据帧中有效载荷的最大长度,不包括帧首部的长度。3.ARP 数据报格式在网络通讯时,源主机的应用程序知道目的主机的IP 地址和端口号,却不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去处理上层协议的,如果接收到的数据包的硬件地址与本机不符,则直接丢弃。因此在通讯前必须获得目的主机的硬件地址。AR
10、P 协议就起到这个作用。源主机发出ARP 请求,询问“IP 地址是 192.168.0.1 的主机的硬件地址是多少”,并将这个请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP 请求,发现其中的IP 地址与本机相符,则发送一个ARP应答数据包给源主机,将自己的硬件地址填写在应答包中。每台主机都维护一个ARP 缓存表,可以用arp-a 命令查看。缓存表中的表项有过期时间(一般为 20分钟),如果 20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP 请求来获得目的主机的硬件地址。想一想,为什么表项要有过期时间而不是一直有
11、效?ARP 数据报的格式如下所示(该图出自):图 36.7.ARP 数据报格式注意到源MAC 地址、目的 MAC 地址在以太网首部和ARP 请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0 x0800 为 IP 地址,后面两个地址长度对于以太网地址和IP 地址分别为 6和 4(字节),op 字段为 1表示 ARP 请求,op字段为 2表示 ARP 应答。下面举一个具体的例子。请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):以太网首部(14 字节)0000:ff
12、ff ff ff ff ff 00 05 5d 61 58 a8 08 06ARP 帧(28 字节)0000:00 010010:08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 370020:00 00 00 00 00 00 c0 a8 00 02填充位(18字节)0020:00 77 31 d2 50 100030:fd 78 41 d3 00 00 00 00 00 00 00 00以太网首部:目的主机采用广播地址,源主机的MAC 地址是 00:05:5d:61:58:a8,上层协议类型 0 x0806 表示 ARP。ARP 帧:硬件类型 0 x
13、0001 表示以太网,协议类型0 x0800 表示 IP 协议,硬件地址(MAC 地址)长度为 6,协议地址(IP 地址)长度为 4,op 为0 x0001 表示请求目的主机的MAC 地址,源主机 MAC 地址为 00:05:5d:61:58:a8,源主机IP 地址为 c0 a8 00 37(192.168.0.55),目的主机 MAC 地址全 0待填写,目的主机IP 地址为 c0 a8 00 02(192.168.0.2)。由于以太网规定最小数据长度为46 字节,ARP 帧长度只有 28字节,因此有 18字节填充位,填充位的内容没有定义,与具体实现相关。应答帧如下:以太网首部0000:00
14、05 5d 61 58 a8 00 05 5d a1 b8 40 08 06ARP 帧0000:00 010010:08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 020020:00 05 5d 61 58 a8 c0 a8 00 37填充位0020:00 77 31 d2 50 100030:fd 78 41 d3 00 00 00 00 00 00 00 00以 太 网 首 部:目 的 主 机 的 MAC地 址 是 00:05:5d:61:58:a8,源 主 机 的 MAC 地 址 是00:05:5d:a1:b8:40,上层协议类型0 x0806
15、表示 ARP。ARP 帧:硬件类型 0 x0001 表示以太网,协议类型0 x0800 表示 IP 协议,硬件地址(MAC 地址)长度为 6,协议地址(IP 地址)长度为4,op 为0 x0002 表示应答,源主机MAC 地址为00:05:5d:a1:b8:40,源主机IP 地址为 c0 a8 00 02(192.168.0.2),目的主机MAC 地址为00:05:5d:61:58:a8,目的主机IP 地址为 c0 a8 00 37(192.168.0.55)。思考题:如果源主机和目的主机不在同一网段,ARP 请求的广播帧无法穿过路由器,源主机如何与目的主机通信?4.IP 数据报格式IP 数据
16、报的格式如下(这里只讨论IPv4)(该图出自):图 36.8.IP 数据报格式IP 数据报的首部长度和数据长度都是可变长的,但总是4字节的整数倍。对于IPv4,4位版本字段是 4。4位首部长度的数值是以4字节为单位的,最小值为5,也就是说首部长度最小是4x5=20 字节,也就是不带任何选项的IP 首部,4位能表示的最大值是15,也就是说首部长度最大是 60字节。8位 TOS 字段有 3个位用来指定IP 数据报的优先级(目前已经废弃不用),还有 4个位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有一个位总是0。总长度是整个数据报(包括IP 首部和 IP 层 payload
17、)的字节数。每传一个 IP 数据报,16位的标识加 1,可用于分片和重新组装数据报。3位标志和 13位片偏移用于分片。TTL(Time to live)是这样用的:源主机为数据包设定一个生存时间,比如64,每过一个路由器就把该值减1,如果减到 0就表示路由已经太长了仍然找不到目的主机的网络,就丢弃该包,因此这个生存时间的单位不是秒,而是跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP 还是 IGMP。然后是校验和,只校验IP 首部,数据的校验由更高层协议负责。IPv4 的 IP 地址长度为 32位。选项字段的解释从略。想一想,前面讲了以太网帧中的最小数据长度为46 字节,不足 46
18、字节的要用填充字节补上,那么如何界定这46 字节里前多少个字节是IP、ARP 或 RARP 数据报而后面是填充字节?5.IP 地址与路由IPv4 的 IP 地址长度为 4字节,通常采用点分十进制表示法(dotted decimal representation)例如 0 xc0a80002 表示为 192.168.0.2。Internet 被各种路由器和网关设备分隔成很多网段,为了标识不同的网段,需要把32位的 IP 地址划分成网络号和主机号两部分,网络号相同的各主机位于同一网段,相互间可以直接通信,网络号不同的主机之间通信则需要通过路由器转发。过去曾经提出一种划分网络号和主机号的方案,把所有
19、IP 地址分为五类,如下图所示(该图出自)。图 36.9.IP 地址类A 类 0.0.0.0 到127.255.255.255B 类 128.0.0.0 到191.255.255.255C 类 192.0.0.0 到223.255.255.255D 类 224.0.0.0 到239.255.255.255E 类 240.0.0.0 到247.255.255.255一个 A 类网络可容纳的地址数量最大,一个B 类网络的地址数量是65536,一个 C 类网络的地址数量是256。D 类地址用作多播地址,E 类地址保留未用。随着 Internet 的飞速发展,这种划分方案的局限性很快显现出来,大多数组
20、织都申请B 类网络地址,导致B 类地址很快就分配完了,而A 类却浪费了大量地址。这种方式对网络的划分是 flat 的而不是层级结构(hierarchical)的,Internet 上的每个路由器都必须掌握所有网络的信息,随着大量C 类网络的出现,路由器需要检索的路由表越来越庞大,负担越来越重。针对这种情况提出了新的划分方案,称为CIDR(ClasslessInterdomainRouting)。网络号和主机号的划分需要用一个额外的子网掩码(subnet mask)来表示,而不能由IP 地址本身的数值决定,也就是说,网络号和主机号的划分与这个IP 地址是 A 类、B 类还是 C 类无关,因此称为
21、Classless的。这样,多个子网就可以汇总(summarize)成一个Internet 上的网络,例如,有8个站点都申请了C 类网络,本来网络号是24 位的,但是这 8个站点通过同一个 ISP(Internet service provider)连到 Internet 上,它们网络号的高21位是相同的,只有低三位不同,这8个站点就可以汇总,在Internet 上只需要一个路由表项,数据包通过Internet上的路由器到达ISP,然后在ISP 这边再通过次级的路由器选路到某个站点。下面举两个例子:表 36.1.划分子网的例子1IP 地址140.252.20.688C FC 14 44子网掩码
22、255.255.255.0FF FF FF 00网络号140.252.20.08C FC 14 00子网地址范围140.252.20.0140.252.20.255表 36.2.划分子网的例子2IP 地址140.252.20.688C FC 14 44子网掩码255.255.255.240FF FF FF F0网络号140.252.20.648C FC 14 40子网地址范围140.252.20.64140.252.20.79可见,IP 地址与子网掩码做与运算可以得到网络号,主机号从全0到全 1就是子网的地址范围。IP 地址和子网掩码还有一种更简洁的表示方法,例如140.252.20.68/2
23、4,表示 IP 地址为140.252.20.68,子网掩码的高24位是 1,也就是 255.255.255.0。如果一个组织内部组建局域网,IP 地址只用于局域网内的通信,而不直接连到Internet 上,理论上使用任意的IP 地址都可以,但是RFC 1918 规定了用于组建局域网的私有IP 地址,这些地址不会出现在Internet 上,如下表所示。10.*,前 8位是网络号,共16,777,216 个地址172.16.*到172.31.*,前 12位是网络号,共1,048,576 个地址192.168.*,前 16位是网络号,共65,536 个地址使用私有IP 地址的局域网主机虽然没有Int
24、ernet 的 IP 地址,但也可以通过代理服务器或NAT(网络地址转换)等技术连到Internet 上。除了私有IP 地址之外,还有几种特殊的IP 地址。127.*的 IP 地址用于本机环回(loop back)测试,通常是127.0.0.1。loopback 是系统中一种特殊的网络设备,如果发送数据包的目的地址是环回地址,或者与本机其它网络设备的IP 地址相同,则数据包不会发送到网络介质上,而是通过环回设备再发回给上层协议和应用程序,主要用于测试。如下图所示(该图出自)。图 36.10.loopback设备还有一些不能用作主机IP 地址的特殊地址:目的地址为 255.255.255.255
25、,表示本网络内部广播,路由器不转发这样的广播数据包。主机号全为0的地址只表示网络而不能表示某个主机,如192.168.10.0(假设子网掩码为255.255.255.0)。目的地址的主机号为全1,表示广播至某个网络的所有主机,例如目的地址192.168.10.255表示广播至 192.168.10.0网络(假设子网掩码为255.255.255.0)。下面介绍路由的过程,首先正式定义几个名词:路由(名词)数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。路由(动词)某个路由节点为数据报选择投递方向的选路过程。路由节点一个具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 传输 整个 系统 详解 ARPUDPTCPIP 数据传输 格式 强烈推荐
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内