language-agnostic - tcp底层传输机制/网络编程

标签 language-agnostic networking network-programming tcp


我已搜索但找不到以下内容:
Process1 通过 TCP 套接字传输数据。做传输的代码是(伪代码)

//Section 1
write(sock,data,len);//any language.Just write data
//Section 2

写入后的Process1可以在section 2中继续,但这并不意味着数据已经传输完毕。 TCP 可以缓冲数据以供以后传输。
现在 Process2 与 Process1 同时运行。这两个进程都尝试并发 发送数据。 IE。两者都有上面的代码。
问题1:如果两个进程同时向TCP套接字写入数据,数据最终将如何通过IP/OS在线传输?
a) Process1 的所有数据后跟 Process2 的所有数据(或反向),即某种 FIFO 顺序?
或者
b) 来自 Process1 和 Process2 的数据将通过网络由 IP 层(或操作系统)多路复用,并“同时”发送?
问题 2:我添加了一个延迟,我是否可以确保来自 2 个进程的数据通过线路串行发送(例如,Process1 的所有数据后跟 Process2 的所有数据)?
更新:
Process1 和 Process2 不是父子。他们也在不同的 socket 上工作
谢谢

最佳答案

嗯,您是在谈论由两个进程(如父进程和子进程)共享的单个套接字吗?在这种情况下,数据将按照输出系统调用 (write(2)s) 的顺序进行缓冲。

如果(更有可能)您在谈论两个进程中的两个不相关的 TCP 套接字,则无法保证数据传输的任何顺序。原因是套接字可能连接到以不同速度消耗数据的远程点。 TCP flow control然后确保快速发送者不会压倒慢速接收者。

关于language-agnostic - tcp底层传输机制/网络编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4220095/

相关文章:

ios - 如何检查iPhone应用程序的网络事件?

networking - Traceroute:发送的所有探测包路径是否相同?

web - 'port' 到底是什么,它与互联网有什么关系?

c++ - 将目标地址与 C++ 中的转发表条目匹配

language-agnostic - 如何实现自己的 WHOIS 服务器?

data-binding - UI 数据绑定(bind) : alternatives and future

ubuntu - 存储缓冲区并保存在触发器上的网络捕获工具集

network-programming - 编程实践 : how to choose a packet size for UDP datagrams?

language-agnostic - 静态内容的部署

math - 乒乓球值随着时间的推移而降低,以产生闪烁效果