开心happy

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

按照TCP/IP的七层分类,下图摘自《Linux内核网络栈源代码情景分析》:

(一)链路层

链路层的作用:为IP模块发送和接收IP数据报,为ARP模块发送ARP请求和接收ARP应答。从内核的代码层面来看,链路层主要是提供针对物理层的访问各种接口卡的驱动程序。属于设备驱动模块。TCP/IP支持不同的链路层协议,取决于网络所使用的硬件,比如“以太网”“令牌环网”“FDDI”以及“RS-232串行线路“等。

以太网是当今TCP/IP采用的主要的局域网技术。(以太网可以用于广域网么?)

问题:MTU为什么会在链路层?

以太网和802.3对数据帧的长度都有一个限制,其最大值分别为1500和1492字节,链路层的这个特性称为MTU,最大传输单元。如果IP层有一个数据报要传,数据报的长度比链路层的MTU还要大,那么IP层就需要进行分片,把数据分成若干片。 

一些典型的MTU值:

FDDI                                   4352

以太网                                  1500

IEEE802.3/802.2                         1492

 

(二)IP层

IP层不可靠的意思是不能保证IP数据报能够成功的到达目的地,如果发生比如路由器缓冲区满这种错误,则丢弃该数据报,然后发送ICMP消息给信源端。任何要求可靠性的服务都必须由上层TCP提供。

无连接的意思是IP并不维护任何后续数据报的状态信息,每个数据报的处理是相互独立的。另外的意思是,IP数据报可能不按发送顺序接收,比如A B前后两个数据报选择了不同路由,那边B可能先A到达目的端。

IP首部有20个字节。

包含版本号,IP报长度(16个字节,也就是最长是65536。虽然IP层最大允许65536的数据报,但是一般的MTU会对他进行分片,而且TCP一般也会对用户数据进行分片,因此这个一般不会影响TCP。另外UDP的应用一般都限制数据报的长度为512字节,所以不会对UDP的长度有影响

TTL(time-to-live):生存时间字段设置了数据报可以经过的最多路由数,制定了数据报的生存时间,每经过一个路由,TTL就减一。当此值为0时,数据报就会被丢弃,并发送ICMP报文通知源主机。

在一般的体制中,IP可以从TCP/UDP/ICMP和IGMP接收数据报(即在本地生成的数据)并进行发送,或者从一个网络接口接收数据报(待转发的数据报)。IP层在内存中有一个路由表,每次收到一份数据报并进行发送时,都需要对该表搜索一次。当数据报来自某个网络接口时,检查目的IP地址是不是主机IP之一或者是广播地址。如果是就送到IP首部协议所指定的协议模块进行处理。如果数据报的目的不是这些地址,那么(1)如果IP层被设置成了路由功能,就对数据报进行转发(2)否则数据报丢弃。

解析来看一下如果作为路由器,协议栈会怎么工作?

先看下路由表,首先1)destnation目的IP地址,是一个完整主机地址,也可以是一个网络地址。2)下一站路由器IP地址。3)标志:指明是主机地址还是网络地址。4)并为数据报传输指明一个网络接口,如eth0。

IP路由选择主要要做的是:

1)搜索路由表,找与目标地址完全匹配的项。

2)寻找路由表中与目标网络号相匹配的项。

3)最后查找default项。

当找到匹配的路由表后,数据报被送到以太网驱动程序,以太网程序会从ARP协议中获取目的IP地址的MAC地址,数据报会被以太网驱动程序从到对应的MAC地址上。

问题:ARP为什么会在IP层?

ARP为IP地址到对应的硬件地址之间提供动态映射,IP层必须依靠ARP协议来获取数据链路层的硬件地址。RARP地址为那些没有磁盘驱动器的系统使用,它将数据链路层地址转化为IP地址。

ARP是ARP服务在它认为需要解析新的物理地址的时候,发送一份称为ARP请求的以太网数据帧给以太网上的每一个主机,这个过程称为广播。ARP发送包含目的地址IP的数据报,意思是”如果你是这个IP的拥有者,请回答你的硬件地址“。

arp -a 确认arp高速缓存是空的,这就确保了IP操作需要重新发起ARP请求处理。

问题:ICMP(IP控制报文协议)的作用?

ICMP被认为是IP层的一部分,它传递差错报文以及其他需要注意的信息,用来辅助IP层的工作。ICMP报文通常被IP层或者更高层协议(TCP UDP)等使用。

ICMP支持的类型描述有:

1)ping的回显应答以及ping的请求回显 2)目的不可达(包括主机不可达 网络不可达 端口不可达等)3)重定向 4)超时等。。

ping程序是发送一份ICMP回显请求报文给主机,并等待返回ICMP回显应答。大多数TCP/IP实现都在内核中支持Ping服务器。另外,ping程序也支持查看IP记录路由的机会,大多数不同版本的ping程序都提供-R选项,以提供记录路由的功能。

 

(三)UDP/TCP

posted on 2016-03-02 12:42  开心happy  阅读(689)  评论(0编辑  收藏  举报