搞了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,若是,则可将数据推入应用层。