学习心得之通信篇(TCP/IP协议栈)

上篇讲到的协议寻址机制简单,传输速度慢,不适合大范围,大流量的数据传输,因此,主要被应用于设备内部(如IC之间,电路板与电路板之间)。TCP/IP协议栈物理层采用光纤/同轴电缆为传输介质,传输速率快,(最高能达到100Mbit),路由,网关,侦错检错功能很强大,很好地实现多用户通信,因此多被用于设备外部多设备之间大数据流的通信。如PC/mobile之间以及访问服务器,就是通过TCP/IP实现的。

TCP/IP协议没有完全涵盖ISO/OS国际I标准化七层网络协议,只应用到了其中的四层即:网络接口层(物理层/数据链路层),网络层,传输层,应用层。

1.网络接口层。

其实是七层协议的物理层和数据链路层。物理层实现了PHY的一些物理电气特性,如接口类型RMII/MII,电平特性等,而数据链路层,主要有MAC(媒体介入控制层)协议,ARP(地址解析)协议,RARP(逆地址解析)协议。

MAC首部组成:(MAC帧即在物理介质中实际传输的数据帧格式)

1.前导码:用于数据同步(连续的01序列总共占用七字节的空间,即55-55-55-55-55-55-55)

2.帧起始的定界符号SFD,0xD5表示一帧开始;(SOF)

3.DA目的MAC地址,总共由6个字节组成,字节之间用冒号分隔,用十六进制表示;

4.SA源MAC地址,同上;

5.类型(IP/ARP/RARP)/长度,总共两字节,当大于0x0600时表示类型,小于0x0600时表示长度(有效帧数据域长度为46~1500字节);

6.数据域(IP层的数据包插入在此域中,而TCP层的数据包插入在IP包的数据域中)

7.FSC结束(帧校验序列即从目的MAC地址-》数据域)

当MAC层侦测到起始符时0xD5开始接收数据,首先接收的是目的MAC地址,MAC可设置过滤机制,将本机MAC地址写入相应的寄存器,通信中通过接收的目标MAC地址与之比较,把不符且非广播或多播的数据过滤掉,另外符合了目的MAC地址后,再去判断长度/类型,把长度过长或者过短的数据也过滤掉,接下来进行校验值比对,即MAC层自身计算出的checksum值与FSC进行比较,不符过滤掉,只有符合条件的一帧完整的数据才会被DMA放入到FIFO中去,当开始传输数据时,DMA会判断MAC数据寄存器的状态,从而控制将MAC接收数据寄存器的值放入到FIFO中,FIFO设置有阈值,当到达阈值或者容纳的数据为一个完整帧时,DMA又会控制将FIFO中的数据传入对应的数据寄存器,或者内存当中去,传送方向,源与目的地址及传送完整帧字节数,皆在DMA初始化时指定,当送完时,将触发相应的中断,MAC接收的数据长度会少于FIFO的容量,因此,MAC会在数据帧插入帧间隔位。

ARP首部的组成:(ARP作用:传输ARP数据帧用于广播来获取目标IP的物理地址,或者把自已的MAC地址回应给请求方;获取IP层传来的数据包中的IP地址对应的MAC地址以方便MAC层形成一个完整的数据帧)

1.目的MAC地址(如果为广播模式则为FF-FF-FF-FF-FF-FF)

2.源MAC地址

3.帧类型(如果为ARP帧则为0x0806)

前三部分为MAC首部,当ARP经过MAC层时,由MAC层加入的。

下面是ARP的首部:因为ARP属于网络接口层,又高于MAC因此要将其插入到MAC的数据域中。

4.硬件类型(硬件地址类型如果为1表示以太网)

5.协议类型(如果上层协议是IP层则为0x8000)

7.硬件地址长度(6Byte)

8.协议地址长度(4Byte)

9.操作字段op(四种操作类型:ARP请求1;ARP应答2;RARP请求3;RARP应答4,请求和应答仅由此位来区分)

6.发送端以太网地址

7.发送端IP地址

8.目的以太网地址(当为请求时,此处无填充,也仅此处无填充,当回应此帧时,由目标主机将自己的地址传入到发送地址中去,将操作字段改为2)

9.目的IP地址

下面是网络层协议:(不同于MAC层仅实现物理层数据传输,如果需要寻址目标机则要遍历所有客户机,网络层实现将网络进行分类,通过IP地址的网络号来区分不同的网络,当需要访问目标机时,则首先判断该机属于哪类网,再由路由来分配一个路径进行寻址,大大提高通信效率,由于不能保证数据发出后一定会安全到达,因此此层协议为不可靠协议,但因为有ICMP等作为辅助,因此具备一定的检错功能)

IP首部的组成:(IP层为MAC的上层协议,TCP的下层协议)

1.版本(IP协议的版本,现在主要有IPV4和IPV6两种)

2.首部长度:整个IP首部的长度,以4Byte为单位来表示,如0001表示4字节,1111为最大的60字节,当不够4的倍数时,用填充字段来填充。

3.服务类型,根据对IP数据传输的要求分为:前三位表示优先级,后四位表示类型D(更低的时延)T(更大的吞吐量)R(更高的可靠性)C(更低廉的路由)最后一们未用

4.总长度:即此包数据的首部加上数据的总长度(1Byte,最长可表示65535个字节的数据)

接下来的三个字段是IP分片的一些设置,当需要传输的数据包形成一个数据帧后的长度大于MTU(即1500Byte)时,则要进行IP分片,并将分片根据在原数据包中的位置,标志段偏量,根据不同的数据包,标志数据包标识,接收端再根据数据包标识和分片偏移量进行重组。

5.标识(为了标识不同的数据包,同一包数据包的不同数据段占用一个标识)

6.标志(MF(more fragment)=0表示此数据段是此包数据中的最后一段,DF=0(donn't fragment)才允许数据包有分段;)

7.段偏移,表示此段在完整数据包中的段偏移量,方便将分段后的数据按段偏移值进行重组。以8Byte 为单位。

8.寿命(TTL)即此段数据存在的时间,每经过一个路由,TTL减一,直到减到1时,数据被丢弃掉,从而防止数据长时间在通道中传来传去,造成阻塞。

9.协议,即IP层上层的协议类型(TCP/UDP/ICMP等等)

10.首部检验和(每经过一个节点都要重新计算出整个首部检验和,不包括数据部分,此部分可选择由硬件自行计算,也可由软件计算后加入,初始化时有这方面的定义)

11.目标IP地址

12.源IP地址(对于IP层及其上层协议,MAC地址不可见的,主要通过IP地址来进行通信,IP地址由网络号和主机号组成总共32位,四字节之间用.连接,用十进制进行表示,按照其网络号和主机号的分配位数的不同可分为三类:A类0+7bit表示网络号,后24bit表示主机号;B类:10+14bit表示网络号,后16bit表示主机号;C类:110+21bit表示网络号,后8bit表示主机号;)子网掩码:即用n个1来表示n位网络号,比如B类IP地址的子网掩码即为255.255.0.0,同一个网络网络号必须一致,用网桥和局域网交换机可以实现将同一个网段的主机相联,通过路由可以实现将不同的网段相联,路由中有一个路由表将内部局域网网关与外网IP相对应,并列出所有与它相联的内部IP地址和外部IP地址,用到了NAT协议,任何不同网域的IP要实现互联必须先通过连接的路由才行,路由也对应着IP地址,此地址被称为网关,当某IP要访问外网时,先要把网关作为目标IP进行通信后,再将网关地址转换成外网地址(通过NAT协议实现,作用是减少了IP号段的开销),替换其数据包的源IP地址。)

13.任选字段

ICMP首部:(与IP协议一样位于网络层,主要是通过它来获取网络通信的一些状态,因为IP层并不能保证数据一定不丢失,但是还是会有一些质量保证功能,ICMP实现报告数据通信差错或者异常),就如同ARP协议一样,发送时要插入到MAC的数据域中,ICMP作为网络层又基于IP因此要插入到IP的数据域中,进行发送。)

1.ICMP类型:

  0      //echo应答

  3      //目的站不可达

  4      //源站抑制

  5      //改变路由

  8       //echo请求

  11     //数据报的时间超过

  12     //数据报的参数有问题

  13     //时间戳请求(当前的时间参数日期年月)

  14     //时间戳回答

  17     //地址掩码请求

   18    //地址掩码回答

2.代码类型(进一步区分上面类型的不同情况)

3.检验和(ICMP首部和,不包括数据域)

4.不定长字段(与ICMP类型有关,总分为两大类:差错类/询问类)

接下来是传输层,可见TCP/IP并不只是TCP和IP的协议而是一个协议群,只是由于这两层协议是重点,协议比较庞大,才这么称呼的,现讲讲TCP协议:

TCP是面向链接的协议,即先要建立一条链接,才能进行数据传输,传输完成还要拆除链接。这个建立链接的过程,是通过众所周知的“三次握手”实现的。除此之外,TCP的另一个特点就是字节流传输,分段传输,即在需要传输的每个字节上标注一个序列号,当要传输的数据包要大于MSS时则需要将传输的数据按照允许的大小(MSS)进行分段并标记段号(即一个数据段开始的第一个字节的序列号),因为MSS小于IP层的MTU,因此数据段传到IP层时不需要进行IP 分片。而只更新标识号,(即自链路建立起来后发送的第几个数据段),段偏移为零。

现介绍TCP的首部如下:

1.源端口;(应用程序的端口号)

2.目的端口;

3.序列号;(数据段第一个字节号)

4.确认号;(回复数据段号)

5.TCP偏移量

6.保留

7.标志(SYN,ACK,PSH,RST,URG,FIN)

8.窗口(指定关于发送下一段大小的指令)

9.校验和(包括首部和数据)

10.紧急

11.选项号

UDP是面向无链接的协议, 即传输数据前不需要建立连接,减少了大量的系统开销,因此传输速度快,但因为可靠性不高,不能保证数据能够到达,不能进行段分组,当数据包长度大于MSS时,传至IP层,由IP层来进行IP分片,它不能保证所有的IP分片都能到达目的端,而且其中有一个分片丢失时,也不能够进行纠错,TCP当其中只要有一个分组丢失就会重传整个数据包。

下面介绍UDP协议首部:

1.源端口;

2.目的端口;

3.数据报长度;(报头和数据部分的总长度)

4.校验和;

上面部分已经将TCP/IP协议栈的大部分的内容讲完了,要能够让用户使用起来,还必须具备一些应用层协议,如HTTP/FTP/SNMP等等用得比较广泛的协议,

HTTP协议(超文本传输协议):实现了用户通过浏览器能够观看服务器上的文件,

 

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值