专注电子技术学习与研究
当前位置:单片机教程网 >> MCU设计实例 >> 浏览文章

关于tcp的握手与数据传输

作者:刘温电   来源:本站原创   点击数:  更新时间:2013年11月23日   【字体:

   搞了n天的tcp/ip协议,才渐渐的明白,tcp和ip是两个不同层上的协议,而且也不一样,tcp是架在ip上的,当然,ip不仅可以包含tcp,也可以包含udp,至于他们其中的复杂关系,我也不知道,只知道,现在的互联网,大多数用tcp协议。所以就搞了一下。

  对于tcp而言,2个问题,第一个是握手和挥手,第二个是数据传输。 握手和挥手时,并不传输真正的数据。只有在握手后,挥手前,才可进行有效数据的传输。对于tcp的协议程序,首先要处理握手,因为不进行握手,是无法传输数据的,这当然只是协议定义的,如果对于底层而言,就没有这么复杂了,但对于网络这样庞杂的系统来说,建立一个有效稳定的连接还是挺重要的。

  那么程序首先,要对数据帧进行拆解,核对去掉以太网帧,核对去掉ip帧,在ip帧中,判断协议是否为tcp协议(即一帧开始的第23位是否为06),当得知ip包内封装的是tcp协议后,我们就可以开始判断该tcp包是握手挥手包还是数据包了。对于下位机而言,如果不在程序上做处理,对于任何包,底层都可以接收。但我们必须要按照tcp协议规定的那样来做,首先要判断是否建立连接,如果没有,则只接收握手包,而丢弃数据包和挥手包。

  判断握手包和挥手包在帧的第47个位,0x01(挥手),0x02(握手),0x10(应答),0x11(挥手应答),0x12(握手应答),0x18(传输数据),只要判断47位数据符合哪个即可做相应处理。
握手过程为:
a:发送0x02给b,b:回复0x12给a,a:发送0x10给b
同时a在发送握手数据时会带一个序列号,当比收到序列号时,加1后会回给a
握手后建立连接,建立连接后即可发送数据
发送数据时,判断帧的第47位是否为0x18,若是,则可将数据推入应用层。

关闭窗口

相关文章