TCP协议是可靠的,虽然使用的是不可靠的IP服务,但其特殊的机制使得其提供的服务时可靠的,如报文确认机制、超时重传机制等。TELNET、FTP、SMTP等著名协议所使用的运输层协议就是TCP协议。
UDP协议是不可靠的,仅为应用程序提供发送和接收数据包的服务。其可靠性需要通过应用层协议来保证。DNS、TFTP、SNMP等著名协议所使用的的运输层协议就是UDP协议。
IP 是网络层上的主要协议,也是为TCP、UDP协议提供网络层服务的协议。在数据包到达目的主机之前,跨局域网之间的网络选路都由IP协议来提供。
ICMP是IP 协议的附属协议,其也是属于网络层协议。从报文上观察时,很容易将其误认为是运输层协议,但实际上是属于网络层协议。主要作用是在各个网络主机与路由器之间交换网络错误消息和其他的一些状态信息。
IGMP是负责组播转发的网络层协议。主要负责组播报文(报文有单播、组播与广播三种)在路由器上的选路转发。
ARP与RARP是属于链路层协议,有时也认为是2.5层协议。其主要负责的是链路层的地址(以太网即MAC地址)与网络层地址(TCP/IP协议即IP地址)之间的相互转换。
1.4.互联网的IP地址
互联网上每个接口都具备一个或多个ip地址来标识该网络接口。IP地址具有一定的结构,5类不同的ip地址格式如图1-2:
如上所述,有3类报文,分别是单播报文、组播报文与广播报文,对应的有3类ip地址,即单播地址,组播地址和广播地址。这32位地址通常用点分十进制的格式来描述,如C类地址 192.168.225.2。各类地址的IP范围如图1-3:
1.5.域名系统
虽然通过IP地址唯一标识一个接口可以顺利的找到该网络接口,进而访问该主机,但是网络接口的32位ip地址(甚至ipv6的128位地址)实在不好记。我们更希望一个主机能直接用一个主机名来描述,这样才能让使用者更加方便。因此,在TCP/IP领域中,存在一个域名系统,提供主机名与ip地址之间的相互查询服务,即大名鼎鼎的DNS。
1.6.报文封装
当我们数据要通过TCP协议来传输时,系统会将我们的数据做一层层的封装,先加上运输层TCP/UDP协议的头部信息,再加上网络层IP协议的头部,接着加上链路层协议的头部,最后从指定的端口发出。其中TCP传给IP的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame)。
报文若是通过以太网数据帧传输,那么其数据帧大小是有限制的,即其帧长必须在46-1500字节(数据由相关计算得来,主要与传输延时相关)之间。
TCP报文封装示意图如图1-4,UDP报文封装与TCP报文封装几乎一致,UDP报文封装将TCP首部换成UDP首部即可,且UDP首部长为8字节:
各个层的协议都有多种,因此承载各个协议的分层负责标识下一层所承载的相关协议。具体来说,以太网首部后面可能跟ARP/RARP/VXLAN/MPLS/IP等协议,因此以太网首部包含一个16位的帧类型字段,用来标识后面分层所承载的协议;相似的有IP层包含一个8位的协议域字段,用来标识后面分层所承载的是ICMP/IGMP/TCP/UDP等协议;相似的还有TCP/UDP首部包含16位端口号,来标识该报文所属的应用程序。