一些常见的协议详解

TCP/IP协议族里面有众多的协议,分别分布在各个不同的层次上。现将跟TCP有关的部分协议详解如下:

ARP协议

ARP协议处于TCP/IP协议族的最底层,即网络接口层。它的主要用途就是实现一台主机的IP地址到mac地址的转换。

以太网ARP请求/应答报文的格式如下图所示:

<!--more-->

  • 硬件类型字段表示物理地址的类型,它的值为1表示MAC地址。
  • 协议类型字段表示要映射的协议地址类型,它的值为0x800,表示IP地址。
  • 硬件地址长度和协议地址长度表明MAC地址或IP地址的长度,对MAC地址来说,它的值为6,对IP地址来说,IPv4长度为4,IPv6长度为16.
  • 操作字段指出4种操作类型:ARP请求(值为1),ARP应答(值为2),RARP请求(值为3)和RARP应答(值为4).
  • 最后4个字段指定通信双方的以太网地址和IP地址。

ARP协议的工作过程如下:

  • 发送端填充除目的端以太网地址之外的其他所有字段,构建一个ARP请求报文并发送。
  • 发送主机所处的网络上的所有主机均可收到该报文,但只有IP地址和报文中“目的端IP地址”相同的那台主机才响应该报文,其他主机均忽略。
  • 目的主机将自己的MAC地址填充到该报文中的目的端以太网地址上,然后交换两个目的端地址和两个发送端地址,将操作字段的值更改为2,构建ARP应答报文并发送。
  • 发送主机收到该ARP应答报文,从中取出对端的MAC地址即可。

DNS协议

我们平常访问网站时都是直接输入域名的,而因特网上的主机都是通过IP地址来标示的。所以就需要DNS协议来实现域名到IP地址的转换工作。

DNS是一套分布式的域名解析系统。工作原理如下:

  • 客户程序拿到域名后,通过系统调用gethostbyname()来想DNS服务器请求该域名对应的IP地址。
  • DNS服务器通过某种方式查询到IP地址后,将其返回给客户程序即可。

需要声明的是,DNS底层采用的是UDP协议。

DNS服务器的查询有两个方式,迭代和递归。

迭代方式就是当该DNS服务器上没有该域名对应的IP地址时,DNS服务器就返回给客户程序另一台DNS服务器的地址,告诉客户程序到这台DNS服务器上去查询。

递归方式就是当该DNS服务器上没有该域名对应的IP地址时,DNS服务器自身去另一台DNS服务器上去查询,查到之后再返回给客户程序。

IP协议

IP协议处于网络层,几乎所有上层协议都会使用到IP协议。

IP协议的报文格式如下:

解释如下:

  • 版本号指定IP协议的版本,长度为4bit。对于IPv4来说,其值为4。
  • 头部长度该IP头部包括选项在内共有多少个4字节。
  • 服务类型包括一个3位的优先权字段(现已被弃用),4位的TOS字段和1位保留字段(必须置0)。4位TOS字段分别表示最小延时,最大吞吐量,最高可靠性和最小费用。
  • 总长度表示整个IP数据报的长度,以字节为单位。
  • 标示字段唯一的标示主机发送的每一个IP数据报,初始值有系统随机生成。
  • 标志的第一位保留,第二位表示“禁止分片”。如果设置了这个为,系统不对IP报文分片。在这种请求下,如果IP数据报的长度超过MTU(Max Transfer Unit,最大传输单元),IP模块将丢弃该数据报并返回一个ICMP差错报文。第三位表示“更多分片”,如果为1,表示后续还有该IP报文的分片。
  • 分片偏移是分片相对原始IP数据报开始处的偏移,在接收端组合分片时,根据这个字段决定各分片的先后顺序。
  • 生存时间是数据报到达目的地之前允许经过的路由器跳数。
  • 协议字段用来区分上层的协议,其中ICMP是1,TCP是6,UDP是17。更多可查看/etc/protocols文件。
  • 头部校验和由发送端填充,接收端使用CRC循环冗余校验算法检查IP数据报是否损坏。
  • 接下来两个字段源端IP和目的端IP表示发送端和接收端的IP地址。
  • 选项部分长度最大为40字节,因为头部长度字段最大可表示15,也就是说IP数据报的报头最大可以有60字节。而前面这些已经占了20字节。故选项部分只能有40字节。

IP分片

当要发送的数据大于MTU的时候,通常需要进行IP分片,将数据分成多个IP数据报发送。MTU一般为1500字节。

有上文可知,在3位的标志字段中,如果允许分片,则相同的16位的标识字段标识这些分片属于同一个数据块,片偏移标识这些分片的先后顺序。

【完】