2.3 TCP/IP协议 Monday, February 17, 2014 5:19 PM 2.3 TCP/IP协议

TCP/IP协议是目前最成熟并广为接受的通信协议之一,它不仅广泛应用于各种类型的局域网络,而且也是Internet的协议标准,用于实现不同类型的网络以及不同类型操作系统的主机之间的通信。TCP/IP协议事实上是一个协议栈,由许多种网络协议组合而成,包括ARP、ICMP、IGMP、IP、TCP和UDP等多种协议,而TCP协议和IP协议是其中最重要的两个协议。

2.3.1 ARP

要想实现网络通信,计算机必须知道其他计算机的硬件地址,即网卡的MAC(Media Access Control,介质访问控制)地址。地址解析是将主机IP地址映射为硬件地址的过程。ARP协议(Address Resolution Protocol,地址解析协议),是TCP/IP Internet层的一部分,用于获得在同一物理网络中的主机的硬件地址。

ARP使用目标IP地址的本地广播来获得目标主机或网关的硬件地址。收到硬件地址后,IP地址和硬件地址作为一项记录存储在ARP缓存中。在初始化一个ARP广播请求之前,ARP总要检测它的缓存来寻找IP地址和硬件地址的映射。

  1. 解析本地IP地址

网络上的主机要实现通信,必须将主机的IP地址解析为硬件地址。地址解析过程包括ARP请求与ARP应答。

当一台主机与其他主机通信时,初始化ARP请求。当断定该IP地址是本地时,源主机在其ARP缓存中查找目标主机的硬件地址。

若找不到映射,ARP构造一个请求:“谁有这个IP地址,其硬件地址是什么?”源主机的IP地址和硬件地址也包括在请求中。ARP请求被广播发送,这样,所有本地主机都能接收到并处理。

本地网上的每个主机都收到广播并寻找相符的IP地址。若主机不能找到相符的项,则不理睬该请求。

当目标主机断定请求中的IP地址与自己的IP地址相符时,直接发送ARP回复,将其硬件地址传给源主机。然后,以源主机的IP地址/硬件地址更新它的ARP缓存。源主机收到回答后便建立了通信。

  1. 解析远程IP地址

ARP也可使不同网络中的两台主机相互通信,在这种情况下,ARP广播的是源主机的默认网关,而不是目标主机的IP地址。若目标IP地址是远程网络主机的,ARP将广播一个路由器的地址,这个路由器能将数据报信息传到目标主机的网络中。

通信请求初始化时,得知目标IP地址为远程地址。源主机在本地路由表中查找目标主机或网络的路由。若没找到,源主机认为是默认网关的IP地址。然后,在ARP缓存中查找符合该网关记录的IP地址/硬件地址。

若没找到该网关的记录,ARP将广播请求网关地址,而不是目标主机的地址。路由器用自己的硬件地址响应源主机的ARP请求。源主机则将数据包送到路由器,以传送到目标主机的网络,最终到达目标主机。

在路由器上,从IP判断目标IP地址是本地的还是远程的。如果是本地的,路由器用ARP(缓存或广播)获取硬件地址。如果是远程的,路由器在其路由表中查找该网关,然后,运用ARP(缓存或广播)获得此网关的硬件地址。数据包被直接发送到下一个目标主机。

目标主机收到请求后,形成ICMP响应。因为源主机在远程网络上,将在本地路由表中查找源主机网的网关。找到网关后,ARP即获取它的硬件地址。

如果此网关的硬件地址不在ARP缓存中,通过ARP广播获得。一旦它获得硬件地址,ICMP响应应送到路由器上,然后,传到源主机。

  1. ARP缓存

为了减少广播量,ARP在缓存中保存地址映射以备用。ARP缓存保存有动态项和静态项。动态项是自动添加和删除的,静态项则保留在缓存(Cache)中直到计算机重新启动。

另外,ARP缓存总是为本地子网保留硬件广播地址(FFFFFFFFFFF)。作为一个永久项,此项使主机能够接受ARP广播。当查看缓存时,该项不显示。

每个ARP缓存记录的生命周期为10分钟,每一项添加后,便被计时。若在2分钟之内未被使用则自动删除;否则,在10分钟后删除。如果ARP项在失效前,缓存已达到最大容量,则删除最老的项并添加新项。

2.3.2 ICMP

ICMP(Internet Control Message Protocol,Internet控制消息协议)用于报告错误,并代表IP对消息进行控制。ICMP的作用并非是使IP变成一个可靠的协议,而仅用于特殊情况时报告错误和提供反馈。ICMP消息以IP数据报格式传送,因此并不可靠。

在TCP/IP主机传送数据报给另一个主机时,如果速度达到路由器或者链路的饱和状态,路由器发出一个ICMP源抵制消息。这个ICMP源抵制消息请求主机减慢传输速度。当TCP/IP主机收到ICMP源队列消息时,则放慢数据的发送速度。然而,如果TCP/IP主机被用作路由器,且不能以数据到达的速度传输,将舍弃任何不能缓存的ICMP消息。在这种情况下,上述ICMP源抵制消息则不会传给发 送者。

2.3.3 IGMP

IGMP(Internet Group Management Protocol,Internet组管理协议)用于告诉路由器某一网络上指定组中的可用主机。IGMP信息传给别的路由器以使每个多路广播的路由器获知各主机组所在的网络。IGMP包以IP数据报形式传送,因此不可靠。

2.3.4 IP

IP(Internet Protocol,Internet协议)是一个无连接的协议,主要负责在主机之间寻址,并为数据包设定路由。

IP是无连接的,在交换数据前不建立会话。

IP是不可靠的,并不能保证正确传递。但它总是为传送一个包做“最大努力”。在途中,一个包可能发生丢失、传输次序紊乱、重复或延迟。

数据被收到时,IP不需要收到确认。发送者或接收者在一个包丢失或次序紊乱时,不会被告知(告知是高层传输协议的任务,如TCP)。

当数据从传输层传下来时,源IP地址、目标IP地址、协议、检查和生存时间等字段将附加在数据包头上。

如果IP目标地址为本地地址,IP将把数据包直接传给那个主机。如果目标地址为远程地址,IP在本地路由表中查找远程主机的路由。如果找一个路由,IP用这个路由传送数据包。如果未找到路由,将数据包发送到源主机的默认网关(也称之为路由器)。

2.3.5 TCP

TCP(Transmission Control Protocol,传输控制协议)是一种可靠的面向连接的传送服务。TCP数据传输是分段进行的,主机交换数据必须建立一个会话。TCP用比特流通信,即数据被作为无结构的字节流。

TCP通过为每个由其传输的字段指定顺序号获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。对于发送的每一个分段,接收主机必须在一个指定的时间内返回一个ACK(ACknowledgement,确认),用于表明收到了数据。

如果发送者未收到确认(ACK),数据会被重新发送。例如收到的数据包已被损坏,接收主机会丢弃它,并且不发送ACK。于是,发送者会重新发送分段。

端口。Sockets应用程序使用一个协议端口号来标明自己在计算机中的唯一性,从而实现与其他应用程序之间的通信。

端口可以使用0 ~ 65536之间的任何数字。在有服务请求时,操作系统动态地为客户端的应用程序分配端口号。公认的有关服务器的应用程序端口号是由Internet分配号码局(IANA)预先分配的,且固定不变,通常在1 ~ 1024之间。

套接字。套接字在概念上与文件句柄类似,因为其功能是作为网络通信的终结点。一个应用程序通过定义三部分来产生一个套接字,即主机IP地址、服务类型(面向连接的服务是TCP,无连接服务是UDP)和应用程序采用的端口。

应用程序可以创建套接字,并用套接字向远程应用程序发送无连接传输。应用程序还可以产生套接字,并将其与其他应用程序的套接字相连接,在这种连接之上,数据可以被可靠地传送。

TCP端口。TCP端口为信息的传送提供指定地址,端口号小于256的定义为常用端口。例如,Web端口为80,SMTP端口25,POP3端口为110,FTP端口为21。

2.3.6 UDP

UDP(User Datagram Protocol,用户数据报协议)提供了无连接的数据报服务,该服务提供了不可靠的、“尽力而为”的初步传送。这意味着数据报的到达和传送包的正确顺序都不能被保证。UDP适用于无须应答,并且通常一次只传送少量数据的应用软件(如NetBIOS命名服务、SNMP等)。

为使用UDP,应用软件必须提供目标应用程序的IP地址和端口号。端口提供发送信息的位置,并被唯一的号码标识。端口作为多路复用的消息队列使用,即可以一次收到多条消息。需要注意的是,UDP端口互不相同,并且与TCP端口是分开的,尽管它们当中有些使用同样的端口号。

已使用 Microsoft OneNote 2016 创建。