分享

TCP、UDP、ICMP的一些疑问的解答

 黄金割 2018-09-27

TCPUDPICMP的一些疑问的解答

AlexBao

2017.09.06

TCPUDPICMP的一些疑问的解答

这段时间在看如果在移动端用ping工具来测试网络,发现对ICMPTCPUDP协议层没有完全理解,所以再仔细看了下,简单整理如下。

 

1.ICMP到底是什么,它是UDP实现的还是TCP实现,如果不是,那又是什么实现的。

根据ICMP通用的解释,它是IP层的应用协议,与UDP或者TCP的协议有所不同。也就说它的实现既不是TCP协议,也不是UDP协议,它是单独实现的一层。以前一直以为网络上使用的协议不是TCP的,那就是UDP的,现在才发现不是这样的,TCPUDP只是通用的更上层的协议栈,ICMP也是基于IP协议的上层协议,有点类似TCPUDP的位置。

 

2.ICMPsocket实现的时候,如何区分它是ICMP协议呢。

以下是针对IPv4的环境的讨论,IPv6会有相应的字段。

socket = socket(AF_INET, SOCK_DGRAM, IPPROTO_ICMP);//创建socket()需要传递familytype protocol3个参数,这里的type需要指定为SOCK_DGRAM,表示它是无面向连接的传输,类似UDPprotocol指定为IPPROTO_ICMP IP层上层的协议是ICMP协议。这个在IP首部专门有一个字节是表示协议类型的,会被指定为ICMP协议。

然后就是根据协议的细则添加各字段了。这里需要注意的是Ping工具实现需要在ICMPheader里面指定type8 表示是pingrequest,指定为0表示pingreply

 

3.网上有些说type指定为SOCK_DGRAM是基于UDP协议,SOCK_STREAM是基于TCP协议实现,这样的说法准确吗?

http://www./default/SOCK_STREAMSOCK_DGRAM的区别/ 有些网上直接说SOCK_DGRAM是基于UDP的,SOCK_STREAM是基于TCP 我觉得这种说法是有问题的。SOCK_DGRAM只是数据包传输,它各个数据包没有必然的顺序关系,而SOCK_STREAM是有顺序关系的。UDP只是基于SOCK_DGRAM来实现,而不是说SOCK_DGRAM就等于UDP

 

4.如果ICMP这种方式已经可以发送数据了,为啥还需要TCPUDP呢。

经过抓包发现UDP的头部只有8个字节,其中两个字节的源端口和两个字节的目的端口,还有2个自己的数据长度和2个字节的校验和。我们会发现UDP的实现真的很简洁,没有其他的东西。但它标识了端口号,这就是通用传输数据需要的。当然TCP不仅仅有端口号,还有其他很多保证数据可靠性的字段,会复杂很多。而ICMP只是IP层面的IP数据可达性的应用,所以没有端口号。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多