TCP/IP协议族一共分为四层包括:应用层、运输层、网络层、链路层。下面图片方便理解:
我们从后向前介绍:
数据链路层:包括为IP模块提供发送和接受IP数据报,接受ARP/RARP 请求和问答。
数据链路层由于硬件不同(包括以太网,令牌环网),支持的协议也不同(包括以太网链路层协议,PPP,SLIP,环回接口)等。
下面分别介绍各种不同协议所对应的帧格式:
由上图可知:以太网帧包括目的MAC地址(48bit)源MAC地址(48bit),帧类型(8bit),0x0800表示数据部分是IP数据报(46~1500byte),0x0806表示数据部分是ARP请求或问答(28byte),0x0835表示数据部分是RARP请求或问答(28byte);
CRC:一种检测数据是否产生差错的数据。
下面介绍的是以太网帧中的数据部分:
ARP(地址解析协议),目的地址全为1的特殊地址是广播地址。对于ARP请求帧类型字段为:0x0806;硬件类型表示硬件地址类型,它的值为1表示以网地址;协议类型表示要映射的协议地址的类型,例如要映射32位IP地址的物理地址那么该字段是0x0800;硬件地址长度和协议地址长度以字节为单位对于以太网地址ARP请求来说,它们的值分别是6和4,;操作字段指出四种操作类型ARP请求(1),ARP应答(2),RARP请求(3),RARP应答(4)。
环回接口:就是允许运行在同一台主机上的客户程序和服务程序通过TCP/IP进行通讯。A类网络号127.就是为环回接口预留的。大多数系统把127.0.0.1分配给这个接口,并命名为localhost,一个传给环回接口的IP数据报不能再任何网络中出现。一旦传输层检测到目的端地址是环回地址时,当IP数据层离开网络时把它返还给自己。
IP层:网际协议:
所有的TCP、UDP、ICMP以及IGMP数据都是以IP数据报的格式传输的(都作为IP数据包的数据部分进行传输)。
IP提供不可靠(不保证发送的数据一定会被目的端接受,举一个简单的例子:当一个路由器暂时用完了缓冲区,IP有一个简单粗暴的处理方法,那就是丢弃该数据报);无连接(例如:发送端先后发送了两个分组:A、B,但是对于IP层来说,不能保证它们所经过的路由器都是相同的,也不能保证它们的到达的先后顺序),这样看来IP层还真是挺傲娇的。
让我们来看一下傲娇的IP数据报长什么样子吧!
看看吧!这就是IP数据报,有木有感觉很繁琐呢?(反正我是记不来)关于IP数据报中各个字段解读在“TCP/IP相关介绍(三)”中有详细的说明,此处不再缀余。
下面介绍IP层的ICMP:
ICMP:Internet控制报文协议:由上面的例子我们知道,ICMP可以传送差错报文,而且它是以IP数据报的格式进行传输的(作为IP数据报的数据部分),那么ICMP具体可以干什么呢?长什么样子呢?下面我们做出相关介绍:首先,ICMP是IP层的重要组成部分,它传输传送差错报文以及其他需要注意的信息。ICMP通常被IP层或更高层协议(TCP/UDP)
使用。也可以把差错报文传递给用户。
ICMP作为IP数据报的数据部分:
ICMP具体的样子:
检验和和IP首部检验和不同,ICMP的检验和包括对数据部分的检验。
注意类型和代码两个字段共同说明了该ICMP的类型,不同的ICMP类型对应类型和代码如下所示:
不同类型和代码有不同的内容,下面我们以常见的ICMP时间截请求与应答,掩码请求与应答,端口不可达为例介绍ICMP的内容部分:
(1)时间截请求与应答:
标识符和序列号都是发送端任意指定的,这些值在应答中作为返回,作为请求和应答的匹配。
填写发送时间然后发送报文,应答系统接收到该报文时填写接收时间,一般情况下接收时间和传送时间是一样的。
(2)子网掩码的请求与应答:
(3)端口不可达:
(4)端口不可达以太网帧的整体内容(加深理解):