现在的位置: 首页 > 综合 > 正文

关于单片机TCP/IP协议栈的实现目前的进度和问题——TCP或UDP发送数据,端口绑定问题

2017年01月22日 ⁄ 综合 ⁄ 共 775字 ⁄ 字号 评论关闭

        这段时间研究TCP/IP协议,用于单片机通信。昨天为止,基本实现了基础通信(ARP,UDP,ICMP_Ping,TCP)。

1,ARP主动,被动可以实现,但是要知道一般基于路由器下的主机,无论ARP谁都是“假象”,因为路由器帮你ARP对方之后,无论对方MAC是什么,路由器自己知道了,但是回应给你的数据的MAC始终都是路由器自己的,无论你的IP是谁。不过也好理解,局域网的主机知道对方MAC也没有用,因为你没有与之联系,都是路由器代劳的,直接接触的是他们。哈哈

2,基于UDP的倒好说,只管发送不涉及任何问题。哪怕需要验证机制,在应用层函数里自己实现。

3,ICMP有很多信息,不过现在没需要知道各种网络状态,发不出去知道也解决不了(当然你可以返回用于研究或者其他处理)。所以实现了被动Ping。最近马航发动机Ping卫星,我觉得没有成功,但是Ping了就会被记录下来也挺不错的,可以之后研究顶多占一点硬盘和带宽。

3,TCP这个握手就很麻烦了,麻烦在哪里呢?都知道三次握手,四次断开。真要实现起来,还是挺费劲的,涉及到ACK,SYN,PSH,FIN,RST,主要是这五个标志,而且跟本地主机状态有关,每次响应要判断到底是那一状态下的包。

        同时,如果访问对方,对方不同的主机可能响应方式不太一致,要很好得处理各种状态包还是有点麻烦的。得反复琢磨一下。正常三次握手,建立连接,发送数据 ,断开连接都没有问题。要不断的试验和捕获包来分析,返回状态字看到底是什么情况。

       今天晚上完善这些问题。然后就是如果端口访问对方不成功,那么应该如何出里,自动换端口,那如果收包的时候对方回应上一个端口的包来了不能要?应该是以最新端口为准吧?谁最新就监听谁?那也可以谁来谁优先,就是说发N个握手包,哪个包先回来就对于发出去的端口为通信端口。待会研究研究这个问题

抱歉!评论已关闭.