TCP/IP 详解
分层
每一层负责不同的功能:
链路层 |
有时也称作数据链路层或网络接口层,
通常包括操作系统中的设备驱动程序和计算机
中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。
|
网络层 | 有时也称作互联网层,处理分组在网络中的活动,例如分组的选路。网络层协议包括 IP协议(网际协议),ICMP协议,以及IGMP协议 |
运输层 |
主要为两台主机上的应用程序提供端到端的通信。有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。
TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。
而另一方面,UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。
|
应用层 | 负责处理特定的应用程序细节 |
对于不同的计算机之间,需要进行通讯。在同一层上,双方都有对应的一个或多个协议进行通信。
TCP | 虽然TCP使用不可靠的 IP服务,但它却提供一种可靠的运输层服务。 |
UDP |
为应用程序发送和接收数据报。一个数据报是指从发送方传输到接收方的一个信息
单元。但是与TCP不同的是,U D P是不可靠的,
|
IP |
网络层上的主要协议,同时被 TCP和UDP使用。TCP和UDP的每组数据都通过端系统
和每个中间路由器中的IP层在互联网中进行传输。
|
ICMP | ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。P |
IGMP | IGMP是Internet组管理协议。它用来把一个 UDP数据报多播到多个主机。 |
AR |
ARP(地址解析协议)和RARP(逆地址解析协议)是某些网络接口(如以太网和令牌环
网)使用的特殊协议,用来转换 IP层和网络接口层使用的地址。
|
封装
当应用程序用 TCP传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息)
由于TCP、UDP、ICMP和IGMP都要向IP传送数据,因此IP必须在生成的IP首部中加入某种标识,以表明数据属于哪一层。为此, IP在首部中存入一个长度为8 bit的数值,称作协议域。 1表示为ICMP协议,2表示为IGMP协议,6表示为TCP协议,17表示为UDP协议。
类似地,许多应用程序都可以使用 TCP或UDP来传送数据。运输层协议在生成报文首部时要存入一个应用程序的标识符。 TCP和UDP都用一个16 bit的端口号来表示不同的应用程序。
TCP和UDP把源端口号和目的端口号分别存入报文首部中。\
一个应用对应一个端口,因为TCP协议里面只有16bit的大小来给你保存端口号,所以机器端口号需要小于 65536。
网络接口分别要发送和接收 IP、ARP和RARP数据,因此也必须在以太网的帧首部中加入某种形式的标识,以指明生成数据的网络层协议。为此,以太网的帧首部也有一个 16 bit的帧类型域。
也就是说:下层的协议都会保留一个协议域,用来区分上层协议。
分用
当目的主机收到一个以太网数据帧时,数据就开始从协议栈中由底向上升,同时去掉各层协议加上的报文首部。每层协议盒都要去检查报文首部中的协议标识,以确定接收数据的上层协议。这个过程称作分用。
为协议ICMP和IGMP定位一直是一件很棘手的事情。它们与IP都是网络层的协议,事实上它们是IP的附属协议。但是在这里,我们又把它们放在IP层的上面,这是因为ICMP和IGMP报文都被封装在IP数据报中。
对于ARP和RARP,我们也遇到类似的难题。在这里把它们放在以太网设备驱动程序的上方,这是因为它们和IP数据报一样,都有各自的以太网数据帧类型,并且以此为依据进行分用。
我们又把ARP作为以太网设备驱动程序的一部分,放在链路层,其原因在逻辑上(协议的功能)是合理的。
参考: http://www.notedeep.com/note/36/page/377
http://www.notedeep.com/note/36/page/378