网络协议栈与数据包封装

  • 时间:
  • 浏览:2
  • 来源:5分排列5_5分排列3

3. ARP数据报格式

在网络通讯时,源主机的应用系统系统进程知道目的主机的IP地址和端口号,却他不知道目的主机的硬件地址,而数据包首先是被网卡接收到再去解决上层协议的,为什么在么在让接收到的数据包的硬件地址与本机不符,则直接丢弃。为什么在么在让在通讯前可不可不可以 可不可不可以 获得目的主机的硬件地址。ARP协议就起到你你这种作用。源主机发出ARP请求,询问“IP地址是192.168.0.1的主机的硬件地址是十几只 ”,并将你你这种请求广播到本地网段(以太网帧首部的硬件地址填FF:FF:FF:FF:FF:FF表示广播),目的主机接收到广播的ARP请求,发现其中的IP地址与本机相符,则发送4个 多ARP应答数据包给源主机,将此人 的硬件地址填写在应答包中。

为什么在么在让4个 多组织内部人员组建局域网,IP地址只用于局域网内的通信,而不直接连到Internet上,理论上使用任意的IP地址都可可不可不可以 可不可不可以 ,为什么在么在让RFC 1918规定了用于组建局域网的私有IP地址,哪几种地址不让再次出显在Internet上,如下表所示。

TX packets:10 errors:0 dropped:0 overruns:0 carrier:0

路由条目

缺省路由条目

路由表

· 目的地址为255.255.255.255,表示本网络内部人员广播,路由器不转发以前的广播数据包。

以太网首部(14字节)

0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06

ARP帧(28字节)

0000:                                            00 01

0010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37

0020: 00 00 00 00 00 00 c0 a8 00 02

填充位(18字节)

0020:                                00 77 31 d2 1000 10

001000: fd 78 41 d3 00 00 00 00 00 00 00 00

IPv4的IP地址长度为4字节,通常采用点分十进制表示法(dotted decimal representation)类事0xc0a1000002表示为192.168.0.2。Internet被各种路由器和网关设备分隔成什么都有有网段,为了标识不同的网段,可不可不可以 可不可不可以 把32位的IP地址划分成网络号和主机号两每项,网络号相同的各主机地处同一网段,相互间可可不可不可以 可不可不可以 直接通信,网络号不同的主机之间通信则可不可不可以 可不可不可以 通过路由器转发。

随着Internet的飞速发展,你你这种划分方案的局限性变快显现出来,大多数组织都申请B类网络地址,原应B类地址变快就分配完了,而A类却浪费了一定量地址。你你这种法子对网络的划分是flat的而都是层级价值形式(hierarchical)的,Internet上的每个路由器都可不可不可以 可不可不可以 掌握所有网络的信息,随着一定量C类网络的再次出显,路由器可不可不可以 可不可不可以 检索的路由表沒有庞大,负担沒有重。

路由(名词)

36.2. 划分子网的例子2

8C FC 14 44

Interrupt:10 Base address:0x10a0

inet addr:127.0.0.1 Mask:255.0.0.0

36.8. IP数据报格式

36.3. TCP/IP数据包的封装

Kernel IP routing table

UP BROADCAST RUNNING MULTICAST MTU:10000 Metric:1

255.255.255.240

RX packets:37 errors:0 dropped:0 overruns:0 frame:0

RX bytes:55551 (54.2 Kb) TX bytes:710001 (7.4 Kb)

传输层及其以下的机制由内核提供,应用层由用户系统系统进程提供(里面将介绍怎么才能 才能 使用socket API编写应用系统系统进程),应用系统系统进程对通讯数据的含义进行解释,而传输层及其以下解决通讯的细节,将数据从一台计算机通过一定的路径发送到另一台计算机。应用层数据通过协议栈发到网络上时,每层协议都是上加4个 多数据首部(header),称为封装(Encapsulation),如下图所示(该图出自[TCPIP])。

2. 以太网(RFC 894)帧格式

ARP帧:硬件类型0x0001表示以太网,协议类型0x010000表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0002表示应答,源主机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)。

假设某主机上的网络接口配置和路由表如下:

路由表中的最后一行,主要由下一跳地址和发送接口两每项组成,当目的地址与路由表中其它行都是匹配时,就按缺省路由条目规定的接口发送到下一跳地址。

· 目的地址的主机号为全1,表示广播至某个网络的所有主机,类事目的地址192.168.10.255表示广播至192.168.10.0网络(假设子网掩码为255.255.255.0)。

$ ifconfig

140.252.20.0

每台主机都维护4个 多ARP缓存表,可可不可不可以 可不可不可以 用arp -a命令查看。缓存表中的表项有过期时间(一般为20分钟),为什么在么在让20分钟内沒有再次使用某个表项,则该表项失效,下次可不可不可以 可不可不可以 发ARP请求来获得目的主机的硬件地址。想一想,为哪几种表项要有过期时间而都是一直 有效?

 网络协议栈、数据包封装.doc   

参考文档

为什么在么在让要发送的数据包的目的地址是192.168.56.3,跟第一行的子网掩码做与运算得到192.168.56.0,与第一行的目的网络地址不符,再跟第二行的子网掩码做与运算得到192.168.56.0,正是第二行的目的网络地址,为什么在么在让从eth1接口发送出去,为什么在么在让192.168.56.0/24正是与eth1接口直接相连的网络,为什么在么在让可可不可不可以 可不可不可以 直接发到目的主机,可不可不可以 可不可不可以 经路由器转发。

· 172.16.*到172.31.*,前12位是网络号,共1,048,576个地址

路由(动词)

IP数据报的首部长度和数据长度都是可变长的,但一直 4字节的整数倍。对于IPv4,4位版本字段是4。4位首部长度的数值是以4字节为单位的,最小值为5,也什么都有有 说首部长度最小是4x5=20字节,也什么都有有 不带任何选项的IP首部,4位能表示的最大值是15,也什么都有有 说首部长度最大是1000字节。8位TOS字段有4个位用来指定IP数据报的优先级(目前为什么在么在让废弃不让),还有4个 多位表示可选的服务类型(最小延迟、最大呑吐量、最大可靠性、最小成本),还有4个 多位一直 0。总长度是整个数据报(包括IP首部和IP层payload)的字节数。每传4个 多IP数据报,16位的标识加1,可用于分片和重新组装数据报。3位标志和13位片偏移用于分片。TTL(Time to live)是以前用的:源主机为数据包设定4个 多生存时间,比如64,每过4个 多路由器就把该值减1,为什么在么在让减到0就表示路由为什么在么在让太长了仍然找可不可不可以 目的主机的网络,就丢弃该包,为什么在么在你会你这种生存时间的单位都是秒,什么都有有 跳(hop)。协议字段指示上层协议是TCP、UDP、ICMP还是IGMP。为什么在么在让是校验和,只校验IP首部,数据的校验由更高层协议负责。IPv4的IP地址长度为32位。选项字段的解释从略。

以太网首部:目的主机采用广播地址,源主机的MAC地址是00:05:5d:61:58:a8,上层协议类型0x010006表示ARP。

140.252.20.64~140.252.20.79

由什么都有有路由条目组成,每个条目都指明去往某个网络的数据包应该经由哪个接口发送,其中最后第一根是缺省路由条目。

eth1 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:88

lo Link encap:Local Loopback

以太网首部

0000: 00 05 5d 61 58 a8 00 05 5d a1 b8 40 08 06

ARP帧

0000:                                            00 01

0010: 08 00 06 04 00 02 00 05 5d a1 b8 40 c0 a8 00 02

0020: 00 05 5d 61 58 a8 c0 a8 00 37

填充位

0020:                                00 77 31 d2 1000 10

001000: fd 78 41 d3 00 00 00 00 00 00 00 00

RX bytes:0 (0.0 b) TX bytes:420 (420.0 b)

FF FF FF F0

以太网驱动系统系统进程首先根据以太网首部中的“上层协议”字段选着该数据帧的有效载荷(payload,指除去协议首部之外实际传输的数据)是IP、ARP还是RARP协议的数据报,为什么在么在让交给相应的协议解决。若果是IP数据报,IP协议再根据IP首部中的“上层协议”字段选着该数据报的有效载荷是TCP、UDP、ICMP还是IGMP,为什么在么在让交给相应的协议解决。若果是TCP段或UDP段,TCP或UDP协议再根据TCP首部或UDP首部的“端口号”字段选着应该将应用层数据交给哪个用户系统系统进程。IP地址是标识网络中不同主机的地址,而端口号什么都有有 同一台主机上标识不同系统系统进程的地址,IP地址和端口号合起来标识网络中唯一的系统系统进程。

FF FF FF 00

collisions:0 txqueuelen:0

网络号

8C FC 14 40

链路层有以太网、令牌环网等标准,链路层负责网卡设备的驱动、帧同步(什么都有有 说从网线上检测到哪几种信号算作新帧的现在开使了了)、冲突检测(为什么在么在让检测到冲突就自动重发)、数据差错校验等工作。交换机是工作在链路层的网络设备,可可不可不可以 可不可不可以 在不同的链路层网络之间转发数据帧(比如十兆以太网和百兆以太网之间、以太网和令牌环网之间),为什么在么在让不同链路层的帧格式不同,交换机要将进来的数据包拆掉链路层首部重新封装以前再转发。

inet addr:192.168.56.136 Bcast:192.168.56.255 Mask:255.255.255.0

除了私有IP地址之外,还有几种特殊的IP地址。127.*的IP地址用于本机环回(loop back)测试,通常是127.0.0.1。loopback是系统中某种特殊的网络设备,为什么在么在让发送数据包的目的地址是环回地址,为什么在么在让与本机其它网络设备的IP地址相同,则数据包不让发送到网络介质上,什么都有有 通过环回设备再发回给上层协议和应用系统系统进程,主要用于测试。如下图所示(该图出自[TCPIP])。

其着实链路层之下还有物理层,指的是电信号的传递法子,比如现在以太网通用的网线(双绞线)、早期以太网采用的的同轴电缆(现在主要用于有线电视)、光纤等都属于物理层的概念。物理层的能力决定了最大数率、传输距离、抗干扰性等。集线器(Hub)是工作在物理层的网络设备,用于双绞线的连接和信号中继(将已衰减的信号再次放大使之传得更远)。

不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机后每层协议再剥掉相应的首部,最后将应用层数据交给应用系统系统进程解决。

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

8C FC 14 00

192.168.56.0 * 255.255.255.0 U 0 0 0 eth1

网络层的IP协议是构成Internet的基础。Internet上的主机通过IP地址来标识,Internet上有一定量路由器负责根据IP地址选着合适的路径转发数据包,数据包从Internet上的源主机到目的主机往往要经过十多个路由器。路由器是工作在第三层的网络设备,共同兼有交换机的功能,可可不可不可以 可不可不可以 在不同的链路层接口之间转发数据包,为什么在么在让路由器可不可不可以 可不可不可以 将进来的数据包拆掉网络层和链路层两层首部并重新封装。IP协议不保证传输的可靠性,数据包在传输过程中为什么在么在让丢失,可靠性可可不可不可以 可不可不可以 在上层协议或应用系统系统进程中提供支持。

某个路由节点为数据报选着投递方向的选路过程。

4个 多具有路由能力的主机或路由器,它维护一张路由表,通过查询路由表来决定向哪个接口发送数据包。

36.10. loopback设备

思考题:为什么在么在让源主机和目的主机沒有同一网段,ARP请求的广播帧无法穿过路由器,源主机怎么才能 才能 与目的主机通信?

数据包从源地址到目的地址所经过的路径,由一系列路由节点组成。

以太网帧中的数据长度规定最小46字节,最大10000字节,ARP和RARP数据包的长度过低46字节,要在里面补填充位。最大值10000称为以太网的最大传输单元(MTU),不同的网络类型有不同的MTU,为什么在么在让4个 多数据包从以太网路由到拨号链路上,数据包长度大于拨号链路的MTU了,则可不可不可以 可不可不可以 对数据包进行分片(fragmentation)。ifconfig命令的输出中都是“MTU:10000”。注意,MTU你你这种概念指数据帧含有效载荷的最大长度,不包括帧首部的长度。

这台主机有4个 多网络接口,4个 多网络接口连到192.168.10.0/24网络,以前网络接口连到192.168.56.0/24网络。路由表的Destination是目的网络地址,Genmask是子网掩码,Gateway是下一跳地址,Iface是发送接口,Flags中的U标志表示此条目有效(可可不可不可以 可不可不可以 禁用一点条目),G标志表示此条目的下一跳地址是某个路由器的地址,沒有G标志的条目表示目的网络地址是与本机接口直接相连的网络,暂且经路由器转发,为什么在么在让下一跳地址处记为*号。

127.0.0.0 * 255.0.0.0 U 0 0 0 lo

36.5. Multiplexing过程

子网地址范围

为什么在么在让要发送的数据包的目的地址是202.10.1.2,跟前三行路由表条目都是匹配,沒有就要按缺省路由条目,从eth0接口发出去,首先发往192.168.10.1路由器,再让路由器根据它的路由表决定下一跳地址。

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

Interrupt:9 Base address:0x10c0

UP BROADCAST RUNNING MULTICAST MTU:10000 Metric:1

其中的源地址和目的地址是指网卡的硬件地址(也叫MAC地址),长度是48位,是在网卡出厂时固化的。用ifconfig命令看一下,“HWaddr 00:15:F2:14:9E:3F”每项什么都有有 硬件地址。协议字段有某种值,分别对应IP、ARP、RARP。帧末尾是CRC校验码。

还有一点可不可不可以 用作主机IP地址的特殊地址:

RX packets:0 errors:0 dropped:0 overruns:0 frame:0

路由节点与某个网络相连的网卡接口。

inet addr:192.168.10.223 Bcast:192.168.10.255 Mask:255.255.255.0

36.7. ARP数据报格式

IP地址

Destination Gateway Genmask Flags Metric Ref Use Iface

路由节点

4个 多A类网络可容纳的地址数量最大,4个 多B类网络的地址数量是65536,4个 多C类网络的地址数量是256。D类地址用作多播地址,E类地址保留未用。

255.255.255.0

ARP帧:硬件类型0x0001表示以太网,协议类型0x010000表示IP协议,硬件地址(MAC地址)长度为6,协议地址(IP地址)长度为4,op为0x0001表示请求目的主机的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)。

· 10.*,前8位是网络号,共16,777,216个地址

注意,着实IP、ARP和RARP数据报都可不可不可以 可不可不可以 以太网驱动系统系统进程来封装成帧,为什么在么在让从功能上划分,ARP和RARP属于链路层,IP属于网络层。着实ICMP、IGMP、TCP、UDP的数据都可不可不可以 可不可不可以 IP协议来封装成数据报,为什么在么在让从功能上划分,ICMP、IGMP与IP同属于网络层,TCP和UDP属于传输层。本文对RARP、ICMP、IGMP协议不做进一步介绍,有兴趣的读者可可不可不可以 可不可不可以 看参考资料。

· 主机号全为0的地址只表示网络而可不可不可以 表示某个主机,如192.168.10.0(假设子网掩码为255.255.255.0)。

以太网的帧格式如下所示(该图出自[TCPIP]):

TX packets:37 errors:0 dropped:0 overruns:0 carrier:0

目的主机收到数据包后,怎么才能 才能 经过各层协议栈最后到达应用系统系统进程呢?整个过程如下图所示(该图出自[TCPIP])。

想一想,前面讲了以太网帧中的最小数据长度为46字节,过低46字节的要用填充字节补上,沒有怎么才能 才能 界定这46字节里前十几只 个字节是IP、ARP或RARP数据报而里面是填充字节?

使用私有IP地址的局域网主机着实沒有Internet的IP地址,但也可可不可不可以 可不可不可以 通过代理服务器或NAT(网络地址转换)等技术连到Internet上。

网络号

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

子网掩码

8C FC 14 44

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

网络协议栈与数据包封装

36.1. 划分子网的例子1

路由表中的一行,每个条目主要由目的网络地址、子网掩码、下一跳地址、发送接口四每项组成,为什么在么在让要发送的数据包的目的网络地址匹配路由表中的某一行,就按规定的接口发送到下一跳地址。

IP地址

140.252.20.68

4. IP数据报格式

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

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

collisions:0 txqueuelen:1000

36.9. IP地址类

应答帧如下:

下面举4个 多例子:

子网掩码

140.252.20.64

针对你你这种状态提出了新的划分方案,称为CIDR(Classless Interdomain Routing)。网络号和主机号的划分可不可不可以 可不可不可以 用4个 多额外的子网掩码(subnet mask)来表示,而可不可不可以 由IP地址某种的数值决定,也什么都有有 说,网络号和主机号的划分与你你这种IP地址是A类、B类还是C类无关,为什么在么在让称为Classless的。以前,多个子网就可可不可不可以 可不可不可以 汇总(summarize)成4个 多Internet上的网络,类事,有8个站点都申请了C类网络,以前网络号是24位的,为什么在么在让这8个站点通过同4个 多ISP(Internet service provider)连到Internet上,它们网络号的高21位是相同的,可不可不可以 可不可不可以 低三位不同,这8个站点就可可不可不可以 可不可不可以 汇总,在Internet上只可不可不可以 可不可不可以 4个 多路由表项,数据包通过Internet上的路由器到达ISP,为什么在么在让在ISP这边再通过次级的路由器选路到某个站点。

140.252.20.68

子网地址范围

以太网首部:目的主机的MAC地址是00:05:5d:61:58:a8,源主机的MAC地址是00:05:5d:a1:b8:40,上层协议类型0x010006表示ARP。

可见,IP地址与子网掩码做与运算可可不可不可以 可不可不可以 得到网络号,主机号从全0到全1什么都有有 子网的地址范围。IP地址和子网掩码还某种更简洁的表示法子,类事140.252.20.68/24,表示IP地址为140.252.20.68,子网掩码的高24位是1,也什么都有有 255.255.255.0。

· 192.168.*,前16位是网络号,共65,536个地址

default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0

192.168.10.0 * 255.255.255.0 U 0 0 0 eth0

TX packets:110 errors:0 dropped:0 overruns:0 carrier:0

接口

网络层负责点到点(point-to-point)的传输(这里的“点”指主机或路由器),而传输层负责端到端(end-to-end)的传输(这里的“端”指源主机和目的主机)。传输层可选着TCP或UDP协议。TCP是某种面向连接的、可靠的协议,一阵一阵像打电话,双方拿起电话互通身份以前就建立了连接,为什么在么在让说话就行了,这边说一段话那边保证听得到,为什么在么在让是按说话的顺序听到的,说完话挂机断开连接。也什么都有有 说TCP传输的双方可不可不可以 可不可不可以 首先建立连接,以前由TCP协议保证数据收发的可靠性,丢失的数据包自动重发,上层应用系统系统进程收到的一直 可靠的数据流,通讯以前关闭连接。UDP协议不面向连接,什么都有有 保证可靠性,一阵一阵像寄信,写好信倒入邮筒里,既可不可不可以 保证信件在邮递过程中不让丢失,什么都有有 能保证信件是按顺序寄到目的地的。使用UDP协议的应用系统系统进程可不可不可以 可不可不可以 此人 完成丢包重发、消息排序等工作。

36.2. TCP/IP通讯过程

140.252.20.0~140.252.20.255

下面介绍路由的过程,首先正式定义十几只 名词:

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

36.6. 以太网帧格式

为什么在么在让以太网规定最小数据长度为46字节,ARP帧长度可不可不可以 可不可不可以 28字节,为什么在么在让有18字节填充位,填充位的内容沒有定义,与具体实现相关。

collisions:0 txqueuelen:1000

RX packets:10003 errors:0 dropped:0 overruns:0 frame:0

注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各再次出显一次,对于链路层为以太网的状态是多余的,但为什么在么在让链路层是其它类型的网络则有为什么在么在让是必要的。硬件类型指链路层网络类型,1为以太网,协议类型指要转换的地址类型,0x010000为IP地址,里面4个 多地址长度对于以太网地址和IP地址分别为6和4(字节),op字段为1表示ARP请求,op字段为2表示ARP应答。

下面举4个 多具体的例子。

UP LOOPBACK RUNNING MTU:16436 Metric:1

RX bytes:100020 (2.9 Kb) TX bytes:100020 (2.9 Kb)

36.4. 跨路由器通讯过程

$ route

eth0 Link encap:Ethernet HWaddr 00:0C:29:C2:8D:7E

5. IP地址与路由

TCP/IP网络协议栈分为应用层(Application)、传输层(Transport)、网络层(Network)和链路层(Link)四层。如下图所示(该图出自[TCPIP])。

36.1. TCP/IP协议栈