# tcp/ip详解-协议 ## 概述 ### 四层协议系统 TCP/IP协议族通常被认作是四层协议系统,每层分别负责不同功能,由下到上分别为 1. 链路层(数据链路层) 2. 网络层:负责分组在网络中的活动,例如分组的选路等。网络层协议通常包含ip协议,icmp协议,igmp协议 3. 传输层:负责在两台主机之间提供端到端的通信,tcp/ip协议族中,传输层协议有TCP和UDP 4. 应用层:负责处理特定的协议细节 > #### IGMP > IGMP为internet组管理协议,其用于将udp数据报广播到多个主机 > #### ARP & RARP > ARP和RARP是某些网络接口使用的特殊协议,用于转换ip层和链路层所使用的地址。 ### ipv4地址 ipv4地址大小为4字节,其分类如下所示: - A类: 0~127.xxx.xxx.xxx (第一bit为0) - B类: 128~191.xxx.xxx.xxx (前两位bit为10) - C类: 192~223.xxx.xxx.xxx (前三位bit为110) - D类:224~239.xxx.xxx.xxx (前四位bit为1110) - E类:240~255.xxx.xxx.xxx (前五位bit为11110) ### 协议层封装 当应用向网络中发送数据时,数据被送入协议栈中,从上到下,从应用层一直到数据链路层,每层协议都会为上一层提交的数据添加首部或尾部信息,并且将修改后的数据传递给下一层。 其中,个数据层叫法如下: - tcp传递给网络层的数据被称为tcp段(tcp segment) - 网络层传递给数据链路层的数据被称为ip数据报(ip datagram) - 通过以太网传输的数据流被称为帧(frame) > #### 以太网数据帧 > 以太网数据帧,其以太网首部长度为`14字节`,尾部为`4`字节。 > > 且数据帧的长度必须位于46字节~1500字节之间 > #### packet > 更确切说,ip传递给数据链路层的,是分组(packet),分组可能是ip数据报(ip datagram),也可能是ip数据报的一个片(fragment) > #### UDP datagram > UDP数据和TCP数据类似,UDP传递给IP的数据被称为UDP数据报(UDP datagram)。 > > UDP首部长度为8字节。 > #### IP首部 > 除了TCP, UDP向IP传递数据外,`ICMP`和`IGMP`也会向IP传输数据,即使ICMP和IGMP和IP都位于网络层。 > > 故而,IP首部中存在长度为8bit的范围,用于标识传递给ip的协议。该字段中,1表示ICMP,2表示IGMP,6表示TCP,17表示UDP。 > #### TCP/UDP首部中的端口号 > 有很多程序都使用UDP/TCP来传递数据,故而,需要通过端口号来标识程序。 > > 端口号长度为16bit,范围为`0 ~ 65535`,tcp和udp把源端口号和目标端口号存放在报文首部。 > #### 数据链路层标识传递数据的协议 > 类似于ip,网络接口不仅会被ip传递数据,ARP和RARP即使和网络接口一样位于数据链路层,但是仍然会向网络接口传递数据。故而,以太网帧的首部同样存在一个16bit的区域用于标识传递数据的协议。 ### 分用 当目标主机接收到网络上传输到的数据时,会沿着协议栈至底向上传递。 在每层协议从下层协议接收到数据时,会去掉本层的首部/尾部。每层协议都会检查首部中的标识区域,用于判断上层协议,并将去掉首部/尾部后的数据传递给上层协议。这个过程被称之为`分用`。 各层协议其对应上层协议可能为: - 以太网网络接口:上层协议可能为`ARP, RARP, IP` - IP协议:上层协议可能为`ICMP, IGMP, TCP, UDP` - TCP, UDP: 上层可能为各种应用层序,通过来源ip、来源端口号、目标端口号进行判断