比如我在同一台电脑上打开了两个qq软件、让这两个qq进行收发消息、那么数据会经过IP层、数据链路层吗?我觉得应该不经过、因为同一台电脑ip是相同的、不会经过路由器转发、也不会通过链路层传输、直接在本机上就可以实现传输了吧?如果是这样、那么具体数据是怎么流动的呢?比如第一个qq进程发出的消息数据是怎么进行封装之后到达第二个qq进程的呢?有经过传输层封装吗?
先说问题,第一,同一台主机的进程通信方式不局限于通过TCP通信,相反,有时候TCP反而是效率最低的方法;
第二,同主机的两个进程之间走网络通信,这个地方看操作系统实现,大部分的操作系统和网卡都会直接发给本机环回,就算主机本身放开了这个包,过路由的时候,路由也会把这个包再发给目标主机,就是路由把这个包又还给你;
第三,进程通信有各种各样其他的方式,比如ipc,local domain socket等等,不过大体上的原理也是通过缓冲区传递数据;