我在C / Obj-C中实施TCP 我注意到不同的服务器在某些情况下会增加序列号,而其他服务器则不会。 即在拆解过程中,当服务器发送FIN / ACK时,某些服务器会将ACK数量增加1,而其他服务器则不会。
澄清问题:
服务器1: ACK号码已增加到2
服务器2: ACK号码仍为1。 ACK number not increased http://img853.imageshack.us/img853/1248/zf70.png
关于第二台服务器的程序输出:
FIN(/ACK)# was 18238 but should have been 18239
我应该如何处理代码中服务器端实现的这些变体?
答案 0 :(得分:1)
你是指你的实施的一些RFC?在发送FIN + ACK时,我不知道哪个RFC包含正确的行为(增加或不增加ACK号),但我的猜测是ACK号确实应该增加。
也就是说,我们都知道'符合RFC的'实现如何......(而不仅仅是TCP实现)!!同样,对于那些拆除连接的消息交换,编写软件的人一定是格外粗心的。所以现在你有两个选择:
当处理相同标准的不同实现时(这首先违背了标准的整个目的),这是一个相当普遍的问题。所以请注意,这可能只是您可能遇到的第一个问题。
我经常不得不添加额外的代码来处理特定情况,因为某个RFC的实现在Linux中可以很好地工作,并且无法在Windows上进行最基本的测试。