网络通信
文章平均质量分 78
1
一只牛_007
这个作者很懒,什么都没留下…
展开
-
【RoCE】Flow Control
RoCE可以实现lossless无损网络环境,在二层网络上做到可靠网络传输,从而对原本在光纤网络环境下的应用在以太网环境下提供相同的服务,而不必对应用逻辑和上层协议更改。实现无损的方法有Global Pause, PFC, Dropless Receive Queue。...原创 2022-07-29 11:50:16 · 899 阅读 · 0 评论 -
通信协议选型(待)
Protobuf有没有比JSON快5倍?用代码来击破pb性能神话 :https://www.sohu.com/a/136487507_505779序列化方案选型对比 - JSON/ProtocolBuffer/FlatBuffer/DIMBIN:https://zhuanlan.zhihu.com/p/72365108Google序列化库FlatBuffers 1.1发布,及与protobuf的比较:https://www.cnblogs.com/davad/p/4788270.html原创 2021-08-19 14:10:39 · 125 阅读 · 0 评论 -
网络基础知识-面试
常用的三个状态是:ESTABLISHED 表示正在通信,TIME_WAIT 表示主动关闭,CLOSE_WAIT 表示被动关闭。主动关闭的一方在发送最后一个 ack 后,就会进入 TIME_WAIT 状态 停留2MSL(max segment lifetime)时间,这个是TCP/IP必不可少的,也就是“解决”不了的。主要有两个原因1。防止上一个连接中的包,迷路后重新出现,影响新连接原创 2017-05-21 21:27:44 · 478 阅读 · 1 评论 -
socket缓冲区以及阻塞模式
socket缓冲区每个 socket 被创建后,都会分配两个缓冲区,输入缓冲区和输出缓冲区。write()/send() 并不立即向网络中传输数据,而是先将数据写入缓冲区中,再由TCP协议将数据从缓冲区发送到目标机器。一旦将数据写入到缓冲区,函数就可以成功返回,不管它们有没有到达目标机器,也不管它们何时被发送到网络,这些都是TCP协议负责的事情。TCP协议独立于 write()/send() 函数,数据有可能刚被写入缓冲区就发送到网络,也可能在缓冲区中不断积压,多次写入的数据被一次性发送到网络,这取原创 2021-02-25 16:47:22 · 107 阅读 · 0 评论 -
Socket技术详解(一篇就够了)
Socket原理1、什么是Socket在计算机通信领域,socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,都可以用“打开open –> 读写write/read –> 关闭close”模式来操作。 我的理解就是Socket就是该模式的一个实现:即socket是一种特殊的文件,一些转载 2021-02-25 15:05:06 · 12862 阅读 · 7 评论 -
什么是TCP粘包?怎么解决这个问题
在socket网络编程中,都是端到端通信,由客户端端口+服务端端口+客户端IP+服务端IP+传输协议组成的五元组可以明确的标识一条连接。在TCP的socket编程中,发送端和接收端都有成对的socket。发送端为了将多个发往接收端的包,更加高效的的发给接收端,于是采用了优化算法(Nagle算法),将多次间隔较小、数据量较小的数据,合并成一个数据量大的数据块,然后进行封包。那么这样一来,接收端就必须使用高效科学的拆包机制来分辨这些数据。1.Q:什么是TCP粘包问题?TCP粘包就是指发送方发送的若干包数原创 2021-02-25 13:57:27 · 157 阅读 · 0 评论 -
在socket中使用域名
客户端中直接使用IP地址会有很大的弊端,一旦IP地址变化(IP地址会经常变动),客户端软件就会出现错误。而使用域名会方便很多,注册后的域名只要每年续费就永远属于自己的,更换IP地址时修改域名解析即可,不会影响软件的正常使用。关于域名注册、域名解析、host 文件、DNS 服务器等本节并未详细讲解,请读者自行脑补。本节重点讲解如何使用域名。通过域名获取IP地址域名仅仅是IP地址的一个助记符,目的是方便记忆,通过域名并不能找到目标计算机,通信之前必须要将域名转换成IP地址。gethostbynam原创 2021-02-25 13:47:27 · 508 阅读 · 0 评论 -
socket编程实现文件传输功能
这节我们来完成socket文件传输程序,这是一个非常实用的例子。要实现的功能为:client 从 server 下载一个文件并保存到本地。编写这个程序需要注意两个问题:1) 文件大小不确定,有可能比缓冲区大很多,调用一次 write()/send() 函数不能完成文件内容的发送。接收数据时也会遇到同样的情况。要解决这个问题,可以使用 while 循环,例如://Server 代码int nCount;while( (nCount = fread(buffer, 1, BUF_SIZE,..原创 2021-02-25 13:41:56 · 2684 阅读 · 0 评论 -
优雅地断开TCP连接
调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。图1:close()/closesocket() 断开连接上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用close()/closesocket() 断开连接,之后主机A、B都不能再接受对方传输的数据。实际上,是完全无法调用与数据收发有关的函数。一般情况下这不会有问题,但有些特殊时刻,需要只断开一条数据传输通道,而保留另一条。.原创 2021-02-25 13:35:03 · 636 阅读 · 0 评论 -
TCP中的RTT和RTO
一、RTT和RTO的概念TCP作为一个面向连接的、可靠的传输协议,内部实现了一个重传计时器来保证数据能传输到对方。每发送一个数据包,就给这个数据设置一个重传计时器。如果在计时器超时之前收到了针对这个数据包的ack,就取消这个计时器。如果没有收到,则开始发起重传。计时器超时的时间被称为RTO,这个时间的确定取决于RTT。关于两者详细的解释:RTT(Round Trip Time):一个连接的往返时间,即数据发送时刻到接收到确认的时刻的差值; RTO(Retransmission Time Out原创 2020-11-12 14:41:11 · 8639 阅读 · 0 评论 -
TCP滑动窗口和拥塞控制机制
产生的原因∑对资源的需求>可用资源∑对资源的需求>可用资源注意单纯的增加网络资源无法解决问题例如:把结点的存储空间扩大,更换更高速率的链路,提高结点处理机的运算速度,不仅不能解决问题,而且可能使网络性能更坏。原因:网络拥塞是许多因素引起的,单纯的解决一个可能会使上述情况得到一些缓解,但是会把拥塞转移到其他地方。扩大结点存储空间——>由于输出链路的容量和处理机的速度并未提高,增大排队等待时间,超时重传,浪费资源。更换更高速率的链路——>可能会缓解,,有可能造成各部分原创 2020-11-12 13:47:14 · 2537 阅读 · 0 评论 -
TCP三次握手详解及释放连接过程
TCP头部: 其中 ACK SYN 序号 这三个部分在以下会用到,它们的介绍也在下面。暂时需要的信息有:ACK: TCP协议规定,只有ACK=1时有效,也规定连接建立后所有发送的报文的ACK必须为1SYN(SYNchronization) : 在连接建立时用来同步序号。当SYN=1而ACK=0时,表明这是一个连接请求报文。对方若同意建立连接,则应在响应报文中使SYN=1和ACK=1. 因此, SYN置1就表示这是一个连接请求或连接接受报文。FIN(finis)即...原创 2020-11-12 10:12:41 · 1243 阅读 · 0 评论 -
(经典)tcp粘包分析
这两天看csdn有一些关于socket粘包,socket缓冲区设置的问题,发现自己不是很清楚,所以查资料了解记录一下:一 .两个简单概念长连接与短连接:1.长连接 Client方与Server方先建立通讯连接,连接建立后不断开, 然后再进行报文发送和接收。2.短连接 Client方与Server每进行一次报文收发交易时才进行通讯连接,交易完毕后立即断开连接。此种方式常用于一点对多点通讯,比如多个Client连接一个Server.二 .什么时候需要考虑粘包问题?...原创 2020-11-11 15:06:53 · 284 阅读 · 0 评论