草庐IT

TCP_CORK

全部标签

linux - TCP/IP : set socket option for keep-alive after connection has been established

是否可以在一些假设的应用程序级握手后设置套接字的SO_KEEPALIVE选项(TCP保持事件间隔和TCP保持事件值)?还是必须在调用accept之前设置?我关心Linux、Windows和eCoslwIP堆栈之间的互操作性,因此非常感谢有关这两个平台的信息。 最佳答案 正如EJP所说,你可以随时设置。manpage说:setsockopt()manipulateoptionsforthesocketreferredtobythefiledescriptorsockfd.你可以像这样设置或取消设置SO_KEEPALIVEintiOpt

sockets - 解析一个tcp连接的结束

TCP连接可以通过多种方式结束。这是我的理解:rst:立即执行。连接完成,并立即关闭。所有进一步的通信都是"new"连接。fin:是来自一方的一个很好的请求。它必须被ack知道,然后另一方发送一个fin说他们已经结束了谈话。这也必须ack知识。这些阶段可以同时发生,但必须传递fin和伴随它的ack。还有其他的吗?我正在查看Wireshark中的一个tcp流,它只发送了一个fin、psh和ack位。这被确认并且连接结束。还有哪些关闭TCP连接的其他方法?如果fin被ack,是否可以发送更多数据?如果是,是否需要重新发送原始fin(发送fin的一方的状态是否在某个时候重置)?

java - TCP Server 只接收一条消息

我正在尝试创建一个简单的TCP服务器和客户端。我希望客户端能够通过只打开一次套接字来发送多条消息。我看过类似的问题here,here,和here但它们并没有多大用处。我的代码如下:SampleServerTCP.javapublicclassSampleServerTCP{privatestaticfinalintDEFAULT_PORT_NUMBER=39277;publicstaticvoidmain(String[]args)throwsIOException{ServerSocketdefaultSocket=newServerSocket(DEFAULT_PORT_NUMBE

networking - tcp连接在哪些情况下需要等待ACK?

据我所知,等待ACK的唯一原因与传输窗口耗尽有关。或者慢启动。但是,这个通过预先存在的TCP套接字进行的Wireshark转储片段对我来说没有意义:这里,在数据包38和40之间,服务器(45.55.162.253)在继续发送之前等待完整的RTT。我通过Netem更改了RTT,以确保延迟始终等于RTT,正如您所看到的,没有应用程序数据从客户端流向服务器可能需要服务器“继续工作”。但是有一个来自客户端的非常明显的ACK数据包(数据包39)没有任何有效负载。广告窗口比[SEQ/ACK分析]/[传输中的字节数]大很多,即1230。我的问题是:TCP中是否有什么东西触发服务器等待数据包38和40

c - 监听两个不同端口的 TCP 服务器

我有一个TCP服务器正在监听两个不同的端口。我创建了两个不同的套接字,一个在端口8888上,一个在端口6634上。我监听这些端口,然后我在FD_SET中添加两个套接字并将它们传递给select()函数......当套接字准备好读取时,我检查FD_ISSET以查看我在哪个端口上有消息要读取。无论如何,当我连接到端口8888时,构思是成功的,我可以向服务器发送并接收...当我ctrl+c客户端时,选择功能再次返回1,现在我的accept()失败了...当我在端口6634上做同样的事情时,一切正常......代码在select()处停止并等待套接字准备好读取!谁能告诉我为什么会这样?看附件中

sockets - 本地传输大文件的最佳 TCP/IP 连接数

我需要通过套接字在本地通过tcp/ip传输大文件。我需要最好的性能。最佳模拟连接数是多少?为什么?(我的意思是我可以使用1、2、3...套接字并行发送相同的文件部分)。我认为我将通过1个模拟连接获得最佳性能,因为IO性能并行化不佳,涉及的处理器不多。通常,如果您通过一个线程从多个线程写入文件,您甚至会出现性能下降。但测试结果表明,网络传输并不总是如此。 最佳答案 一个插槽完全能够利用可用带宽。阅读WifiTCPiperfthroughput:1streamvsmultiplestreams?.

python - 一次同时处理 TCP 和 UDP 的扭曲协议(protocol)

考虑到我的逻辑,我想做的事情与我选择的传输方式无关——我希望UDP和TCP工作。通常,如果我使用的是TCP或SSL——这有点微不足道。但是,对于UDP(无工厂)和TCP(使用工厂),它变得有点棘手?fromtwisted.internet.protocolimportFactory,ServerFactory,Protocol,DatagramProtocolfromtwisted.internetimportreactorclassSpecialServerProtocol(DatagramProtocol,Protocol):defdatagramReceived(self,dat

tcp - 远程登录协议(protocol) : response to break

我有一个C++服务器应用程序,它提供一个监听TCP端口供支持人员连接。他们可以发出命令并获得响应。从应用程序的角度来看,它工作正常。当他们使用telnet(1)进行连接时,如果他们(出于某种原因)键入^C,就会出现我的问题。我的服务器看到telnet发送给我的已解析控制字符,我可以根据需要忽略或处理它们。但是telnet客户端本身进入某种状态,它停止将我的服务器的响应输出到客户端屏幕。我知道我可以1)告诉他们不要使用telnet或2)告诉他们在telnet应用程序内或通过执行toggleautoflush~/.telnetrc或其他。但如果可能的话,我更愿意做的是在服务器中使用正确的协

sockets - TCP拥塞会影响其他端口吗?

我听说当TCP数据包丢失时,一切都会因为拥塞而卡住,直到最终收到丢失的数据包。例如服务器在同一端口上发送这些数据包:1(UDP),2(UDP),3(TCP),4(UDP),5(UDP),6(UDP)所以如果数据包3丢失,客户端将无法接收数据包4、5、6,直到数据包3被接收,对吗?如果应用程序使用两个端口,一个用于TCP,另一个用于UDP,TCP拥塞是否会影响UDP端口性能?我的意思是UDP数据包会卡住吗? 最佳答案 TCP拥塞应该只会影响当前连接(套接字)。简而言之,对于每个连接,都有一个TCP滑动窗口,用于组装数据包。如果一个数据

Java Tcp 套接字发送额外的数据?

我有一个将在java中发送数据的类,服务器需要特定的字符串才能实际工作。我正在发送正确的字符串,这是连接和发送过程://CONNECTtry{//GETSERVERIPInetAddressserverAddr=InetAddress.getByName(this.terminalIp);//CREATESOCKETSockethcmSocket=newSocket(serverAddr,this.terminalPort);PrintWritersendingStream=newPrintWriter(newBufferedWriter(newOutputStreamWriter(h