TCPIP协议栈与数据包封装.docx

上传人:b****3 文档编号:2385670 上传时间:2022-10-29 格式:DOCX 页数:19 大小:683.94KB
下载 相关 举报
TCPIP协议栈与数据包封装.docx_第1页
第1页 / 共19页
TCPIP协议栈与数据包封装.docx_第2页
第2页 / 共19页
TCPIP协议栈与数据包封装.docx_第3页
第3页 / 共19页
TCPIP协议栈与数据包封装.docx_第4页
第4页 / 共19页
TCPIP协议栈与数据包封装.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

TCPIP协议栈与数据包封装.docx

《TCPIP协议栈与数据包封装.docx》由会员分享,可在线阅读,更多相关《TCPIP协议栈与数据包封装.docx(19页珍藏版)》请在冰豆网上搜索。

TCPIP协议栈与数据包封装.docx

TCPIP协议栈与数据包封装

TCP/IP协议栈与数据包封装

TCP/IP协议栈与数据包封装

TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。

如下图所示(该图出自[TCPIP])。

图36.1.TCP/IP协议栈

两台计算机通过TCP/IP协议通讯的过程如下所示(该图出自[TCPIP])。

图36.2.TCP/IP通讯过程

传输层及其以下的机制由内核提供,应用层由用户进程提供(后面将介绍如何使用socketAPI编写应用程序),应用程序对通讯数据的含义进行解释,而传输层及其以下处理通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。

应用层数据通过协议栈发到网络上时,每层协议都要加上一个数据首部(header),称为封装(Encapsulation),如下图所示(该图出自[TCPIP])。

图36.3.TCP/IP数据包的封装

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。

数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用程序处理。

上图对应两台计算机在同一网段中的情况,如果两台计算机在不同的网段中,那么数据从一台计算机到另一台计算机传输过程中要经过一个或多个路由器,如下图所示(该图出自[TCPIP])。

图36.4.跨路由器通讯过程

其实在链路层之下还有物理层,指的是电信号的传递方式,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。

物理层的能力决定了最大传输速率、传输距离、抗干扰性等。

集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。

链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(就是说从网线上检测到什么信号算作新帧的开始)、冲突检测(如果检测到冲突就自动重发)、数据差错校验等工作。

交换机是工作在链路层的网络设备,可以在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),由于不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装之后再转发。

网络层的IP协议是构成Internet的基础。

Internet上的主机通过IP地址来标识,Internet上有大量路由器负责根据IP地址选择合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。

路由器是工作在第三层的网络设备,同时兼有交换机的功能,可以在不同的链路层接口之间转发数据包,因此路由器需要将进来的数据包拆掉网络层和链路层两层首部并重新封装。

IP协议不保证传输的可靠性,数据包在传输过程中可能丢失,可靠性可以在上层协议或应用程序中提供支持。

网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。

传输层可选择TCP或UDP协议。

TCP是一种面向连接的、可靠的协议,有点像打电话,双方拿起电话互通身份之后就建立了连接,然后说话就行了,这边说的话那边保证听得到,并且是按说话的顺序听到的,说完话挂机断开连接。

也就是说TCP传输的双方需要首先建

立连接,之后由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用程序收到的总是可靠的数据流,通讯之后关闭连接。

UDP协议不面向连接,也不保证可靠性,有点像寄信,写好信放到邮筒里,既不能保证信件在邮递过程中不会丢失,也不能保证信件是按顺序寄到目的地的。

使用UDP协议的应用程序需要自己完成丢包重发、消息排序等工作。

目的主机收到数据包后,如何经过各层协议栈最后到达应用程序呢?

整个过程如下图所示(该图出自

[TCPIP])。

图36.5.Multiplexing过程

以太网驱动程序首先根据以太网首部中的“上层协议”字段确定该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,然后交给相应的协议处理。

假如是IP数据报,IP协议再根据IP首部中的“上层协议”字段确定该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,然后交给相应的协议处理。

假如是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段确定应该将应用层数据交给哪个用户进程。

IP地址是标识网络中不同主机的地址,而端口号就是同一台主机上标识不同进程的地址,IP地址和端口号合起来标识网络中唯一的进程。

注意,虽然IP、ARP和RARP数据报都需要以太网驱动程序来封装成帧,但是从功能上划分,ARP和RARP属于链路层,IP属于网络层。

虽然ICMP、IGMP、TCP、UDP的数据都需要IP协议来封装成数据报,但是从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。

本文对RARP、ICMP、IGMP协议不做进一步介绍,有兴趣的读者可以看参考资料。

每台主机都维护一个ARP缓存表,可以用arp-a命令查看。

缓存表中的表项有过期时间(一般为20分钟),如果20分钟内没有再次使用某个表项,则该表项失效,下次还要发ARP请求来获得目的主机的硬件地址。

想一想,为什么表项要有过期时间而不是一直有效?

ARP数据报的格式如下所示(该图出自[TCPIP]):

图36.7.ARP数据报格式

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现一次,对于链路层为以太网的情况是多余的,但如果链路层是其它类型的网络则有可能是必要的。

硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x0800为IP地址,后面两个地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

下面举一个具体的例子。

请求帧如下(为了清晰在每行的前面加了字节计数,每行16个字节):

以太网首部(14字节)

0000:

ffffffffffff00055d6158a80806

ARP帧(28字节)

0000:

0001

0010:

08000604000100055d6158a8c0a80037

0020:

000000000000c0a80002

填充位(18字节)

0020:

007731d25010

0030:

fd7841d30000000000000000

以太网首部:

目的主机采用广播地址,源主机的MAC地址是00:

05:

5d:

61:

58:

a8,上层协议类型0x0806表示ARP。

ARP帧:

硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的MAC地址,源主机MAC地址为

00:

05:

5d:

61:

58:

a8,源主机IP地址为c0a80037(192.168.0.55),目的主机MAC地址全0待填写,目的主机IP地址为c0a80002(192.168.0.2)。

由于以太网规定最小数据长度为46字节,ARP帧长度只有28字节,因此有18字节填充位,填充位的内容没有定义,与具体实现相关。

应答帧如下:

以太网首部

0000:

00055d6158a800055da1b8400806

ARP帧

0000:

0001

0010:

08000604000200055da1b840c0a80002

0020:

00055d6158a8c0a80037

填充位

0020:

007731d25010

0030:

fd7841d30000000000000000

以太网首部:

目的主机的MAC地址是00:

05:

5d:

61:

58:

a8,源主机的MAC地址是00:

05:

5d:

a1:

b8:

40,上层协议类型0x0806表示ARP。

ARP帧:

硬件类型0x0001表示以太网,协议类型0x0800表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0002表示应答,源主机MAC地址为00:

05:

5d:

a1:

b8:

40,源主机IP地址为c0a80002(192.168.0.2),目的主机MAC地址为00:

05:

5d:

61:

58:

a8,目的主机IP地址为c0a80037(192.168.0.55)。

思考题:

如果源主机和目的主机不在同一网段,ARP请求的广播帧无法穿过路由器,源主机如何与目的主机通信?

4.IP数据报格式

IP数据报的格式如下(这里只讨论IPv4)(该图出自[TCPIP]):

图36.8.IP数据报格式

段,需要把32位的IP地址划分成网络号和主机号两部分,网络号相同的各主机位于同一网段,相互间可以直接通信,网络号不同的主机之间通信则需要通过路由器转发。

过去曾经提出一种划分网络号和主机号的方案,把所有IP地址分为五类,如下图所示(该图出自[TCPIP])。

图36.9.IP地址类

A类0.0.0.0到127.255.255.255

B类128.0.0.0到191.255.255.255

C类192.0.0.0到223.255.255.255

D类224.0.0.0到239.255.255.255

E类240.0.0.0到247.255.255.255

一个A类网络可容纳的地址数量最大,一个B类网络的地址数量是65536,一个C类网络的地址数量是256。

D类地址用作多播地址,E类地址保留未用。

随着Internet的飞速发展,这种划分方案的局限性很快显现出来,大多数组织都申请B类网络地址,导致B类地址很快就分配完了,而A类却浪费了大量地址。

这种方式对网络的划分是flat的而不是层级结构(hierarchical)的,Internet上的每个路由器都必须掌握所有网络的信息,随着大量C类网络的出现,路由器需要检索的路由表越来越庞大,负担越来越重。

针对这种情况提出了新的划分方案,称为CIDR(ClasslessInterdomainRouting)。

网络号和主机号的划分需要用一个额外的子网掩码(subnetmask)来表示,而不能由IP地址本身的数值决定,也就是说,网络号和主机号的划分与这个IP地址是A类、B类还是C类无关,因此称为Classless的。

这样,多个子网就可以汇总(summarize)成一个Internet上的网络,例如,有8个站点都申请了C类网络,本来网络号是24位的,但是这8个站点通过同一个ISP(Internetserviceprovider)连到Internet上,它们网络号的

高21位是相同的,只有低三位不同,这8个站点就可以汇总,在Internet上只需要一个路由表项,数据包通过Internet上的路由器到达ISP,然后在ISP这边再通过次级的路由器选路到某个站点。

下面举两个例子:

表36.1.划分子网的例子1

∙10.*,前8位是网络号,共16,777,216个地址172.16.*到172.31.*,前12位是网络号,共1,048,576个地址192.168.*,前16位是网络号,共65,536个地址

使用私有IP地址的局域网主机虽然没有Internet的IP地址,但也可以通过代理服务器或NA

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 军事

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1