标签: networking

如果应用程序打开2个TCP套接字,那么它们之间是否会维护有序属性?

如果我有一个Javascript应用程序并行打开2个websockets,它们都在同一个端口上的同一个主机:

var socket1 = io.connect(host);
var socket2 = io.connect(host);
Run Code Online (Sandbox Code Playgroud)

然后我将每个数据发送到应用程序中的相同功能:

socket1.on("data", function(e) {doStuff(e);});
socket2.on("data", function(e) {doStuff(e);});
Run Code Online (Sandbox Code Playgroud)

每个套接字是否只对自己强制执行有序属性,还是对整个应用程序强制执行?例如,如果发送到socket1的数据包丢失,socket2是否仍然能够接收和处理未来的TCP数据包而无需等待重新传输数据包到socket1?

javascript sockets networking tcp websocket

0
推荐指数
1
解决办法
27
查看次数

UDP传输和维护网络字节顺序

所以我在通过C++中的客户端 - 服务器程序发送和接收自定义数据包时遇到了一些麻烦.我已经使用TCP实现了类似的功能,但是在使用UDP时,我遇到了将所有内容转换为单个数据报的问题.

目前我的头部由偶数个uint32_t字段组成.其中每个都以网络顺序存储,如下所示:

 uint32_t x = htonl (int y);
Run Code Online (Sandbox Code Playgroud)

...

我正在将报头与数据包中的有效负载结合起来,如下所示:

 typedef struct {
    450Header header; // 512 bytes consisting of the unint32_t like above
    char data[ BLOCKSIZE ];  // 3.5k
    // Total Packet Size = 4k
} Packet;
Run Code Online (Sandbox Code Playgroud)

"

标题部分将包含有关数据包的信息,我的问题是如何处理字符串和有效负载的字节顺序.我非常喜欢一些字符串字段添加到搞什么名头,如果我派比数据包中的块大小,我想它分成多个包大的文件,我需要知道如何分割文件,因此可以按正确的顺序解释接收端.

  1. 我已经成功地独立构建了一个标题(所有字段都按网络字节顺序排列),如果我将它们添加到标题中,是否还需要转换字符串的顺序?我假设如果我将字符串保持在设定的大小,我仍然可以为标题编写校验和函数.

  2. 如果从问题1中正确排序所有内容,我是否需要在接收端再次将它们转换回主机订单?

  3. 我有一个mmap函数,它将文件加载到char缓冲区中,我可以简单地使用memcpy和递增偏移量这样一块一块地复制到Packet中的数据缓冲区吗?或者我是否还要担心有效载荷数据的网络顺序?

  4. 我是否需要对有效负载使用校验和?如果它不使用整个缓冲区并以奇数个字节结束,我该怎么办呢?

最后,我想报头包含序列号,所以我可以练习执行程序,如果数据包被丢弃(即回N),所以我现在最担心的是规范中,一切都从客户端发送的,因此它可以被理解的顺序在服务器端以正确的顺序.

c++ sockets networking udp

0
推荐指数
1
解决办法
1240
查看次数

我的自定义加密握手是否安全?

我为商城制作了一些广告软件,它有一堆客户端(屏幕)和一个服务器,他们从中获取内容.到目前为止,它一直在一个单独的局域网内工作,所以安全性甚至没有超出我的想法,但他们问我是否可以通过互联网使其易于管理.

我试着想出一个合理的解决方案,比如Plan A

  1. 客户端发送"我想登录消息"
  2. 服务器使用随机生成的密钥进行响应
  3. 客户端发送用所述密钥加密的密码
  4. 服务器使用另一个密钥响应,使用第一个密钥加密
  5. 客户现在可以使用最后一个密钥来加密/解密任何进一步的通信

但后来我开始思考,发送另一把钥匙是什么意思?如果有人观察流量可以找出我正在使用的算法,那么如果他们可以根据原始的未加密密钥对它们进行解码,那么我发送的加密密钥数无关紧要.

B计划

  1. 客户端发送用其密码加密的用户名

停在那里,然后它只是一个固定的消息,将授予访问权限

计划C.

  1. 客户端和服务器被赋予用户/密码组合(每个用户)
  2. 每次客户端使用用密码加密的用户登录(用于加密此会话中的所有进一步通信)时,服务器会发送一个新密码,以便旧密码不能再次使用

很好,除了它仍然遭受计划A的问题,并带来进一步的问题,如如果客户端通信在发送登录后立即切断并且没有获得新密码...

无论我以哪种方式看待它,如果解密算法是图形可行的,那么安全性就有一个漏洞.

好的计划D!

  1. 客户端和服务器手动获得加密密钥
  2. 客户端使用密钥加密所有通信,甚至可能请求与第一个密钥组合使用的额外密钥以进一步使解密复杂化

点是,原始密钥永远不会通过网络发送.

好吧..这个似乎有效.显然任何东西都可以被花费足够的时间来攻击,但也许它足以使它不值得.问题是,这个有点笨重,客户端的每次安装都需要手动输入密钥.它最有可能是漫长而复杂的,你是一般的懒人,可能只是通过邮件发送它... meh,目的失败了.

我不知道该做什么.如果我可以获得与您运行的工厂登录类型网站(例如此类网站)相同的安全级别,那对我来说没问题.他们如何使用用户+密码处理它?

security encryption networking cryptography

0
推荐指数
1
解决办法
81
查看次数

如何用NETEM过滤?

我需要一些帮助来指导特定IP的netem延迟.我已正确输入所有命令,没有任何错误,如附图所示.我的速度测试没有延迟.有关使用命令时的更多信息:"tc qdisc add dev eth0 root netem delay 100ms"延迟添加完美无缺.我究竟做错了什么 ?

PS我是使用TC和NETEM的初学者,所以如果有任何解决方案请在解释时请仔细阅读.

以下是一些屏幕截图,可以更好地理解我的问题:

http://postimg.org/image/k9pu6uhxv/ http://postimg.org/image/tis0gyqtv/

networking

0
推荐指数
1
解决办法
3587
查看次数

为什么目标地址位于以太网标头中的源地址之前

我知道在以太网头中,目标地址位于源地址之前。你能解释一下为什么吗?

networking ethernet

0
推荐指数
1
解决办法
729
查看次数

我可以使用Directory.GetFiles()访问安全的网络文件夹吗?

是否可以使用Directory.GetFiles()访问网络文件夹,我通常必须在通过资源管理器打开时输入我的凭据?

c# io networking

0
推荐指数
1
解决办法
9224
查看次数

为什么traceroute时间有时会在跳跃之间消失?

我在traceroute手册页上看到类似的输出,但我一直很好奇为什么ping时间在跳跃之间?即,我总是希望值从一跳到另一跳递增:

 [yak 71]% traceroute nis.nsf.net.
 traceroute to nis.nsf.net (35.1.1.48), 64 hops max, 38 byte packet
 1  helios.ee.lbl.gov (128.3.112.1)  19 ms  19 ms  0 ms
 2  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms
 3  lilac-dmc.Berkeley.EDU (128.32.216.1)  39 ms  39 ms  19 ms
 4  ccngw-ner-cc.Berkeley.EDU (128.32.136.23)  39 ms  40 ms  39 ms
 5  ccn-nerif22.Berkeley.EDU (128.32.168.22)  39 ms  39 ms  39 ms
 6  128.32.197.4 (128.32.197.4)  40 ms  59 ms  59 ms
 7  131.119.2.5 (131.119.2.5)  59 ms  59 ms  59 ms
 8  129.140.70.13 …
Run Code Online (Sandbox Code Playgroud)

linux networking traceroute

0
推荐指数
1
解决办法
2997
查看次数

为什么TFTP在UDP之上使用自己的协议

TFTP协议建立在UDP之上.为了数据完整性,为什么在TCP出现时使用UDP呢?

networking

0
推荐指数
1
解决办法
484
查看次数

Java套接字写/读

所以我想从套接字读取,但它没有给我任何东西,我是java网络的新手,所以请帮助我,它不会给我任何错误,但不会给我任何客户端套接字的输出..这是一个源代码:

ServerSocket server  = new ServerSocket(4444);
    Socket client = server.accept();
    PrintWriter out = new PrintWriter(client.getOutputStream());
    BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()));
    String inputline = in.readLine();
    while(inputline != null)
    {
        System.out.println("recieved "+inputline);
    }
    out.close();
    in.close();
    server.close();
    client.close();
Run Code Online (Sandbox Code Playgroud)

java sockets networking

0
推荐指数
1
解决办法
67
查看次数

如何在ubuntu 14.4上更改docker容器内的MTU

我想更改MTU(最大传输单元)docker,其在Ubuntu 14.04上运行.还有使用ubuntu 14.04运行的docker容器.

问题是它docker0在主机操作系统上的接口可以将MTU值从1500改为9000,但它不会影响docker os内部.意味着在docker内部运行时使用较旧的值,即1500.当我在主机上重新启动docker服务时,所有更改都将变为默认值.

我也尝试过使用新界面创建桥接连接,但是当我将界面连接到整个网络并且不再工作时.

帮助将受到高度赞赏

linux ubuntu networking docker ubuntu-14.04

0
推荐指数
1
解决办法
3545
查看次数