我想模拟数据包延迟和丢失的UDP,并TCP在Linux上衡量一个应用程序的性能.有一个简单的方法吗?
假设硬件具有无限的性能,Linux机箱是否支持> 65536个开放的TCP连接?
据我所知,短暂端口的数量(<65536)限制了从一个本地IP到一个远程IP上的一个端口的连接数.
元组(本地ip,本地端口,远程ip,远程端口)是唯一定义TCP连接的东西; 这是否意味着如果这些参数中有多个是免费的,则可以支持超过65K的连接.例如,从多个本地IP连接到多个远程主机上的单个端口号.
系统中还有另外16位的限制吗?或许文件描述符的数量?
HTTP/1.1已经为网络服务了十五年以上,但它的年龄开始显现.
任何人都可以解释HTTP 1.1和2.0之间的主要区别是什么?
传输协议有什么变化吗?
我最近查看了Richards Stevens 撰写的"UNIX网络编程,第1卷"这本书,我发现除了TCP和UDP之外还有第三个传输层标准:SCTP.
简介:SCTP是一种传输级协议,它像UDP一样是消息驱动的,但是像TCP一样可靠.以下是IBM DeveloperWorks的简短介绍.
老实说,我以前从未听说过SCTP.我记不起在任何网络书籍中阅读它或在我参加的课程中听到它.阅读提到SCTP的其他stackoverflow问题表明,我并不孤单,因为缺乏这方面的知识.
为什么SCTP如此未知?为什么没用多少?
我正在尝试实现TCP连接,从服务器端一切正常,但是当我运行客户端程序(从客户端计算机)时,我收到以下错误:
java.net.ConnectException: Connection refused
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:351)
at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:213)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:200)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:432)
at java.net.Socket.connect(Socket.java:529)
at java.net.Socket.connect(Socket.java:478)
at java.net.Socket.<init>(Socket.java:375)
at java.net.Socket.<init>(Socket.java:189)
at TCPClient.main(TCPClient.java:13)
Run Code Online (Sandbox Code Playgroud)
我尝试更改套接字号以防它正在使用但无济于事,是否有人知道是什么导致此错误以及如何解决它.
服务器代码:
//TCPServer.java
import java.io.*;
import java.net.*;
class TCPServer {
public static void main(String argv[]) throws Exception {
String fromclient;
String toclient;
ServerSocket Server = new ServerSocket(5000);
System.out.println("TCPServer Waiting for client on port 5000");
while (true) {
Socket connected = Server.accept();
System.out.println(" THE CLIENT" + " " + connected.getInetAddress()
+ ":" + connected.getPort() + " …Run Code Online (Sandbox Code Playgroud) 我已经阅读了WebSockets,我想知道为什么浏览器不能简单地打开简单的TCP连接并像其他任何桌面应用程序一样与服务器通信.为什么通过websockets进行这种通信?
我需要一个可以检查远程主机上的端口状态的命令行.我试过ping xxx.xxx.xxx.xxx:161但它不承认"主持人".我认为这是一个"好"的答案,直到我对一个我知道该端口打开的主机执行相同的命令.这是针对Windows上的批处理文件,它将检查远程端口的状态,然后运行使用该远程端口获取信息的命令,然后再使用远程端口检查命令,然后使用下一个服务器上的该端口获取信息的命令, 等等.我到处都看,并认为ping可能会这样做,但必须有各种版本的ping,我想因为我正在这样做的服务器没有显示该选项.
只是为了笑,我尝试从网站上进行基于Web的远程端口检查 - 结果对于"问题"服务器和正确的服务器都是正确的.但是,我不能在批量运行中使用它,其中包含500多个服务器IP.
有什么我可以做的很简单吗?我的Perl技能非常生疏(使用它或丢失它),除了批处理之外不知道任何其他基于Windows的语言.Unix是我的技能,但必须从Widows Server 2003执行.
我正处于编写新的Windows服务应用程序的设计阶段,该应用程序接受长连接的TCP/IP连接(即,这不像HTTP,其中有许多短连接,而是客户端连接并保持连接数小时或数天或甚至几周).
我正在寻找设计网络架构的最佳方法的想法.我将需要为该服务启动至少一个线程.我正在考虑使用Asynch API(BeginRecieve等),因为我不知道在任何给定时间(可能是数百个)我将连接多少客户端.我绝对不想为每个连接启动一个线程.
数据将主要从我的服务器流向客户端,但有时会从客户端发送一些命令.这主要是一个监控应用程序,我的服务器定期向客户端发送状态数据.
有关尽可能扩展的最佳方法的任何建议吗?基本工作流程 谢谢.
编辑:要明确,我正在寻找基于.net的解决方案(如果可能,C#,但任何.net语言都可以)
BOUNTY注意:要获得赏金,我希望不仅仅是一个简单的答案.我需要一个解决方案的工作示例,作为指向我可以下载的内容的指针或在线的简短示例.它必须是基于.net和Windows(任何.net语言都可以接受)
编辑:我要感谢所有给出好答案的人.不幸的是,我只能接受一个,我选择接受更为人熟知的Begin/End方法.Esac的解决方案可能会更好,但它仍然足够新,我不确定它将如何运作.
我已经提出了我认为很好的所有答案,我希望我能为你们做更多的事情.再次感谢.
tcp ×10
networking ×5
.net ×1
batch-file ×1
c# ×1
cmd ×1
http ×1
http2 ×1
java ×1
linux ×1
linux-kernel ×1
popularity ×1
port ×1
scalability ×1
sctp ×1
throttling ×1
udp ×1
webserver ×1
websocket ×1
windows ×1