对于不耐烦:
如何改变的价值/proc/sys/net/ipv4/tcp_retries2在Linux中单个连接,使用setsockopt(),ioctl()或者这样,或者是这可能吗?
更长的解密:
我正在开发一个使用长轮询HTTP请求的应用程序.在服务器端,需要知道客户端何时关闭连接.准确性并不重要,但肯定不能是15分钟.接近一分钟就可以了.
对于不熟悉该概念的人,长轮询HTTP请求的工作方式如下:
在我的应用程序中,服务器每隔一段时间就向客户端发送"心跳"(默认为30秒).心跳只是一个作为响应块发送的换行符.这是为了保持线路忙,以便我们通知连接丢失.
客户端正常关闭时没有问题.但是当它强制关闭时(例如客户端机器断电),不会发送TCP重置.在这种情况下,服务器发送心跳,客户端不会发送确认.在此之后,服务器在放弃并向应用层(我们的HTTP服务器)报告失败后,继续重传该数据包大约15分钟.在我的情况下等待15分钟太久了.
我可以通过写入以下文件来控制重传时间/proc/sys/net/ipv4/:
tcp_retries1 - INTEGER
This value influences the time, after which TCP decides, that
something is wrong due to unacknowledged RTO retransmissions,
and reports this suspicion to the network layer.
See tcp_retries2 for more details.
RFC 1122 recommends at least 3 retransmissions, which is the
default.
tcp_retries2 - INTEGER
This value influences the timeout of an alive TCP connection,
when RTO retransmissions …Run Code Online (Sandbox Code Playgroud) 我对两个DNS概念感到困惑.我的问题是"DNS区域"和"DNS域"之间的区别是什么?
谢谢
我知道read()是一个阻塞调用,除非我使套接字无阻塞.所以我希望read()调用请求4K数据应该返回一个正值(没有读取的字节数)或错误的-1(客户端可能的连接重置等).我的问题是:read()可以在任何场合返回'0'吗?
我这样处理read():
if ((readval = read(acceptfd, buf, sizeof(buf) - 1)) < 0)
{
}
else
{
buf[readval] = 0;
//Do some thing with data
}
Run Code Online (Sandbox Code Playgroud)
如果read()返回零,这段代码就会爆炸,我知道如何修复它.但是read()有可能返回零吗?
有没有办法通过C#将原始数据包以太网发送到其他主机?在Windows 7中,如果它有所不同.
你能解释一下究竟是什么SO_SNDBUF和SO_RECVBUF选择吗?
好的,由于某种原因,操作系统会缓冲输出/输入数据,但我想澄清这个问题.
他们的角色(一般)是什么?
它们是每插槽缓冲区吗?
传输层的缓冲区(例如TCP缓冲区)和这些缓冲区之间是否存在连接?
使用流套接字(TCP)和使用无连接套接字(UDP)时,它们是否具有不同的行为/角色?
一篇好文章也会很棒.
我搜索了它,但没有找到任何有用的信息.
我打算在即将开展的项目中使用Netty.该项目将充当客户端和服务器.特别是它将建立和维护与各种服务器的许多连接,同时为其自己的客户提供服务.
现在,NioServerSocketChannelFactory的文档公平地指定了服务器端的线程模型 - 每个绑定的监听端口在整个过程中都需要专用的boss线程,而连接的客户端将在工作线程上以非阻塞的方式处理.具体来说,一个工作线程将能够处理多个连接的客户端.
但是,NioClientSocketChannelFactory的文档不太具体.这似乎也利用了boss和worker线程.但是,文档说明:
一个NioClientSocketChannelFactory有一个boss线程.它根据请求进行连接尝试.一旦连接尝试成功,boss线程就将连接的Channel传递给NioClientSocketChannelFactory管理的其中一个工作线程.
工作线程似乎也以与服务器案例相同的方式运行.
我的问题是,这是否意味着从我的程序到外部服务器的每个连接都会有一个专用的boss线程?如果我建立数百或数千个此类连接,这将如何扩展?
作为旁注.重新使用单个Executor(缓存线程池)作为ChannelFactory 的bossExecutor和workerExecutor是否有任何不良副作用?那么在不同的客户端和/或服务器ChannelFactory实例之间重新使用呢?这里有一些讨论,但我没有找到足够具体的答案.任何人都可以详细说明这个吗?
在unix的网络编程中,我总是在服务器用来侦听连接的套接字上设置SO_REUSEADDR选项.这基本上说可以在机器上的同一端口上打开另一个套接字.这在从崩溃中恢复并且套接字未正确关闭时非常有用 - 应用程序可以重新启动,它只需在同一端口上打开另一个套接字并继续监听.
我的问题是,旧套接字会发生什么?毫无疑问,仍将在旧套接字上接收所有数据/连接.它会被操作系统自动关闭吗?
所以我想学习所有关于网络的知识.在插座下方,直到原始插座和东西.我想了解集线器,路由器,接入点等.例如,我希望能够编写自己的软件来完成这类工作.*这类信息是否有很好的来源?
我知道我在这里问了很多,并且要完全解释这一切都需要从高级别到低级别.我想我正在寻找一个类似于应用密码学的范围和深度的来源,但关于网络.
感谢任何能帮助我(以及像我这样的人)指向正确方向的人.
*是的,我意识到使用我手工制作的任何网络堆栈代码都是一个巨大的安全问题,我只是想学习它:)
类似的问题:这里.但是,我正在寻找的不仅仅是"TCP/UDP套接字以下的内容?".
编辑澄清:我所谈论的深度高于驾驶员水平.假设这些位可以进出线的另一端,那么下一步是什么呢?
我需要创建一个相对简单的Java tcp/ip服务器,我在确定是否应该使用像Netty这样的东西或只是坚持使用简单的ServerSocket和InputStream/OutputStream时遇到一些麻烦.
我们真的只需要监听请求,然后将新客户端Socket传递给新线程中的某些处理代码.一旦处理完成并发送响应,该线程将终止.
我喜欢Netty中管道,解码器等的想法,但对于这样一个简单的场景,似乎不值得增加前期开发时间.对我们的初始要求来说似乎有点矫枉过正,但我有点紧张,有很多事我不考虑.如果有的话,Netty对这些简单要求有什么好处?我没有考虑什么?
我正在尝试在Ubuntu 14.04 LTS上安装openvpn-2.3.6以使用TUN/TAP.
我从http://swupdate.openvpn.org/community/releases/openvpn-2.3.6.tar.gz下载了这个包.
提取它并尝试使用命令行终端安装它.
但是下面的错误是红外线:
"configure:error:ssl是必需的但是缺少 "
如何解决此问题才能完成openvpn-2.3.6的安装?
我按照以下链接中的说明操作:http: //backreference.org/2010/03/26/tuntap-interface-tutorial/
它使用openvpn工具配置虚拟tun接口.
我可以在没有openvpn或任何其他工具的情况下制作隧道并配置tun接口.
有没有一个简单的例子在ubuntu上使用tun?
tcp ×3
java ×2
linux ×2
netty ×2
networking ×2
sockets ×2
.net ×1
asynchronous ×1
c ×1
c# ×1
dns ×1
nio ×1
raw-ethernet ×1
serversocket ×1
tcp-ip ×1
ubuntu ×1
unix ×1
windows ×1
windows-7 ×1