一、TCP/IP协议分层
1、链路层:有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
2、网络层:有时也称为互联网层,处理分组在网络中的活动,例如分组的选路等。网络层协议包括IP协议(网际协议)、ICMP(Internet互联网控制报文协议)、IGMP协议(Internet组管理协议)。
3、运输层:又叫传输层,主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议组件中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。而另一方面, UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。这两种运输层协议分别在不同的应用程序中有不同的用途。
4、应用层:负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供一些通用的应用程序,例如:
Telnet 远程登录协议
HTTP 超文本传输协议
FTP 文件传输协议
SMTP 用于电子邮件的简单邮件传输协议
SNMP 简单网络管理协议
当然还有许多其他应用程序。
5、协议分层图:
7、TCP/IP协议分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用(Demultiplexing)
为协议ICMP和IGMP定位一直是一件很棘手的事情。在图1 - 4中,把它们与IP放在同一层上,那是因为事实上它们是IP的附属协议。但是在这里,我们又把它们放在I P层的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。对于ARP和RARP,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程序的上方,这是因为它们和I P数据报一样,都有各自的以太网数据帧类型。但在图2 - 4中,我们又把ARP作为以太网设备驱动程序的一部分,放在I P层的下面,其原因在逻辑上是合理的。这些分层协议盒并不都是完美的。当进一步描述TCP的细节时,我们将看到协议确实是通过目的端口号、源I P地址和源端口号进行解包的。
8、路由器在历史上称为网关,它使得使用不同链路层(包括ISO的物理层)规划的局域网络通过网络层的中间层能够互联,例如使用以太网的局域网和使用令牌环网的两个局域网互联的逻辑图如下:
现在的网关只用来表示应用层网关,指用来连接两种不同协议族的进程(例如TCP/IP和IBM的SNA),它为某个特定的应用程序服务(常常是电子邮件或文件传输)。当然现在的路由器在很多地方仍然保留着网关的称乎,如windows网卡IP的设置中,网关地址指的就是路由器IP地址。
9、连接两个局域网(链路层规划一致或不一致)当然还有另外一种方式,使用网桥。网桥使两个局域网在链路层上连接,使得它们像一个局域网一样。这样组成的网络虽然也能使局域网得以互联,但只适合小范围使用,所以在构建互联网上很少见(实际上因为路由器的方便性和廉价性使得很少有人这样做)。它的逻辑图如下:
10、数据传输在各层的分片
由于以太网电器设备的限制,使得链路层能够传输的数据帧的最大长度为1518,减去链路层头部14个字节和尾部CRC校验的4字节,剩余1500字节,也就是常说的MTU。TCP/IP在网络层的IP数据报上会根据应用层数数据包的长度和MTU大小来决定是否进行分片,因为UDP可以发送大块数据,而处于传输层的UDP并不对自己传输的大块数据进行切片,所以如果UDP数据块MTU大的话,会在IP层进行切片,而如果由同一个UDP数据报切成的多个IP报文中的任何一个丢失,将会导致接收端UDP组包失败,致使整个UPD数据包丢失,所以在发送UDP数据包时要特别考虑MTU的问题,最好不要超过MTU大小。
对于TCP来说,因为MSS一般小于或等于MTU,而TCP发送的数据包受MSS限制,所以TCP数据包大小一般不会大于MTU大小,所以TCP的数据包经过IP层时一般不需要再进行切片。
二、链路层协议
1、以太网标准
以太网是指数字设备公司(Digital Equipment Corp.)、英特尔公司(Intel Corp.)和Xerox公司在1982年联合公布的一个标准。它是当今TCP/IP采用的主要的局域网技术。它采用一种称作CSMA/CD的媒体接入方法,CSMA/CD的意思是带冲突检测的载波侦听多路接入(Carrier Sense, Multiple Access with Collision Detection)技术。它的速率为10 Mb/s,地址为48 bit。
2、IEEE802系列标准
在以太网标准发布几年后,IEEE(电子电气工程师协会)802委员会公布了一个稍有不同的标准集,其中802. 3针对整个CSMA /CD网络,802. 4针对令牌总线网络,802. 5针对令牌环网络。这三者的共同特性由802. 2标准来定义,那就是802网络共有的逻辑链路控制(LLC)。不幸的是,802. 2和802. 3定义了一个与以太网不同的帧格式。文献[Stallings 1987]对所有的IEEE 802标准进行了详细的介绍。
在TCP/IP世界中,以太网I P数据报的封装是在RFC 894[Hornig 1984]中定义的,IEEE 802网络的I P数据报封装是在RFC 1042[Postel and Reynolds 1988]中定义的。主机需求RFC要求每台Internet主机都与一个10Mb/s的以太网电缆相连接:
a、必须能发送和接收采用RFC 894(以太网)封装格式的分组。
b、应该能接收与RFC 894混合的RFC 1042(IEEE 802)封装格式的分组。
c、也许能够发送采用RFC 1042格式封装的分组。如果主机能同时发送两种类型的分组数据,那么发送的分组必须是可以设置的,而且默认条件下必须是RFC 894分组。
最常使用的封装格式是RFC 894定义的以太网格式。
3、以太网标准和802系列标准帧封装格式
4、链路层帧封装格式说明
A、由上图可以得知以太网标准帧格式封装头部长度为14字节,IEEE802标准帧格式封装头部长度为22字节
B、帧的最小长度限制为60字节
C、帧在局域内传输时目的地址(网卡的mac地址)通过ARP协议获取,在广域网上传输时,需要网关路由的转发,所以刚开始发送时的目的地址使用网关的mac地址,源地址使用发送机的mac地址,在路由传送中发送地址和目的地址根据发送者和接收者的不同不断变化。
5、ARP请求应答帧分组格式
6、RARP请求应答帧分组格式
RARP请求应答帧分组格式和ARP的格式基本一致,只不过帧类型值为0x0835,而ARP帧类型值为0x0806,普通以太网帧的帧类型值为0x0800。另外RARP帧是单播发送的,而ARP的帧是广播发送的。
A、ARP和RARP协议的请求应答内容长度为28字节,需要在以太网标准封装帧中加入18字节的PAD,再加上4字节的CRC,总长度为64(14+28+18+4)字节。
B、ARP和RARP协议的请求应答内容长度为28字节,需要在802系列标准的封装帧中加入10字节的PAD,再加上4字节的CRC,总长度为64(22+28+10+4)。
三、网络层协议
网络层有时也称为互联网层,处理分组在网络中的活动,例如分组的选路等。网络层协议包括IP协议(网际协议)、ICMP(Internet互联网控制报文协议)、IGMP协议(Internet组管理协议)。
IP协议是TCP/IP协议族中最为核心的协议。它提供不可靠、无连接的数据报传送服务,它只是尽最大努力提供最好传输服务。可靠性有上层服务来控制。对于骨干网上的路由器来说,他们的路由表数目其实并不多,主要包括和它上级的路由地址和它的子级路由地址,而对于接入路由来说,它们的路由表数目就更少了,可能只有上级骨干网路由一个条目。
1、IP数据报首部格式
A、由图可以看出IP数据报首部基本字段长度为20字节。如果有选项存在,其头部长度由4位首部长度来标识,单位是字长,所以IP数据报首部字段长度最长为60(15×字长4)字节。
B、16位总长度为整IP报文的长度,包括IP报文首部和数据,它的最大长度为65535。
2、ICMP数据报分组首部格式
A、ICMP报文的前4个字节都是相同的,但后面的字节,因类型的不同而各不相同,有些代码字段也标识不同的条件
B、ICMP报文类型代码表
C、ICMP地址掩码请求报文格式
D、ICMP时间戳请求应答报文格式
E、ICMP不可达报文
F、ICMP回显请求和回显应答报文格式
G、ICMP超时报文
H、ICMP重定向报文
I、ICMP路由请求报文格式
J、ICMP路由通告报文格式
K、ICMP源站抑制差错控制报文格式
3、IGMP报文格式
A、IGMP类型字段值为1表示此报文是由多播路由器发出的查询报文,为2表示此报文是主机发出的报告报文。
B、32位组地址为D类IP地址(224.0.0.0-239.255.255.255),在查询报文中组地址设置为0,在报告报文中组地址为要参加的组地址。
四、传输层协议
1、UDP首部
2、TCP首部
TCP状态转换图: