首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【Java 网络编程】TCP 传输机制 ( 数据拆分 | 排序 | 顺序发送 | 顺序组装 | 超时重发 )

文章目录 I TCP 传输过程 II TCP 传输示例 III TCP 传输特殊情况处理 I TCP 传输过程 ---- 1....TCP 传输过程 : 排序 , 顺序发送 , 顺序组装 ; ① 排序 : TCP 发送数据时 , 会将数据拆分成不同的片段 , 并对这些片段进行排序 ; ② 顺序发送 : 将排序好的数据片段顺序发送 ;...超时重发机制 : 如果某个数据片没有到达 , 或者送达时间超时 , 接收方会将相关信息反馈给发送方 , 发送方需要将该数据片重新发送 ; 3....重发数据 : 其中第三帧数据没有送达 , 时钟超时 , B 将相关信息发送到 A , A 重发第三帧数据 ; III TCP 传输特殊情况处理 ---- 1....丢包情况处理 : 如果发送端在超时时间内没有收到接收端的某个包的反馈信息 , 就会认为该包没有送达 , 在超时后 , 会重新发送该包数据 ; 3.

69110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    TCP】确认应答、超时重传机制和TCP报头

    ” 之后,TCP 就可以针对接收方收到的信息,进行重新排序,确保应用程序 read 到的数据一定是和发送方的数据顺序是一致的 接收方这边调用 read 的时候如果没有数据,就会阻塞等待(前面回显服务器文章中写的是...超时重传 发生丢包是完全随机,不可预测的,TCP 再怎么厉害,也不可能避免数据发生丢包。...- 发送发送数据之后,会给出一个“超时时间”,如果在这个时间限制之内,没有收到反馈的 ACK(应答报文 ACK 由 0 变为 1),就视为数据丢包了 图片 不管是因为数据丢了导致的丢包还是因为 ACK...如果发现当前序号 1-1000 这个数据已经在缓冲区中存在了,就会直接把新收到的这个数据丢弃掉 超时时间的设定 这里的时间不是固定不动的,而是动态变化的 发送方第一次重传,超时时间是 t1,如果重传之后...(发送方释放掉之前接收方的相关信息,这个连接诶也就没了) 确认应答和超时重传相互补充,共同构建了 TCP 的“可靠传输机制” 可靠传输机制不是靠“三次握手和四次挥手保证的” TCP 报头 首部长度 TCP

    18310

    TCP报文发送的那些事

    在拷贝过程中,内核将待发送的数据,按照MSS来划分成多个尽量接近MSS大小的分片,放到这个TCP连接对应的tcp_write_queue发送队列中。  ...当这个套接字是阻塞套接字时,等待的超时时间就是SO_SNDTIMEO选项指定的发送超时时间。如果这个套接字是非阻塞套接字,则超时时间就是0。...为此,TCP引入了Nagle算法。应用进程调用发送方法时,可能每次只发送小块数据,造成这台机器发送了许多小的TCP报文。对于整个网络的执行效率来说,小的TCP报文会增加网络拥塞的可能。...因此,如果有可能,应该将相临的TCP报文合并成一个较大的TCP报文(当然还是小于MSS的)发送。  ...选项,则允许发送;•未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送;•上述条件都未满足,但发生了超时(一般为200ms),则立即发送

    1.4K30

    速读原著-TCPIP(TCP超时与重传)

    第21章 TCP超时与重传 21.1 引言 T C P提供可靠的运输层。它使用的方法之一就是确认从另一端收到的数据。但数据和确认都有可能会丢失。 T C P通过在发送时设置一个定时器来解决这种问题。...对任何实现而言,关键之处就在于超时和重传的策略,即怎样决定超时间隔和如何确定重传的频率。...我们已经看到过两个超时和重传的例子: (1)在6 . 5节的I C M P端口不能到达的例子中,看到T F T P客户使用U D P实现了一个简单的超时和重传机制:假定 5秒是一个适当的时间间隔,并每隔...5秒进行重传; ( 2)在向一个不存在的主机发送 A R P的例子中(第 4 . 5节),我们看到当T C P试图建立连接的时候,在每个重传之间使用一个较长的时延来重传 S Y N。...本章以一个简单的 T C P超时和重传的例子开始,然后转向一个更复杂的例子。该例子可以使我们观察到T C P时钟管理的所有细节。

    1K20

    TCP报文发送的那些事

    在拷贝过程中,内核将待发送的数据,按照MSS来划分成多个尽量接近MSS大小的分片,放到这个TCP连接对应的tcp_write_queue发送队列中。  ...当这个套接字是阻塞套接字时,等待的超时时间就是SO_SNDTIMEO选项指定的发送超时时间。如果这个套接字是非阻塞套接字,则超时时间就是0。...为此,TCP引入了Nagle算法。应用进程调用发送方法时,可能每次只发送小块数据,造成这台机器发送了许多小的TCP报文。对于整个网络的执行效率来说,小的TCP报文会增加网络拥塞的可能。...因此,如果有可能,应该将相临的TCP报文合并成一个较大的TCP报文(当然还是小于MSS的)发送。  ...选项,则允许发送; 未设置TCP_CORK选项时,若所有发出去的小数据包(包长度小于MSS)均被确认,则允许发送; 上述条件都未满足,但发生了超时(一般为200ms),则立即发送

    1.1K00

    TCP 通信实现对接硬件发送

    收到的一份需求任务是对接硬件,TCP通信,并给出通信端口与数据包格式,如下: ? 0x01....Java实现TCP协议发送十六进制数据(将十六进制数据转换为byte[])和接收byte数据并转成16进制字符串 服务端: ( 也就是模拟硬件,接受 byte[] 数据并转成16进制 ) import...class Server { public static void main(String[] args) throws IOException { // 1:建立服务器端的tcp...* * @param cmd * 需要发送的数据(十六进制的字符串形式) * @return 接受到的数据(十六进制的字符串形式)...总结 目前来看是可行的,但是还没有去对接硬件,在对接完成之后再继续补充此方法是否可以成功的实现对接硬件并向硬件发送命令。 验证完之后也是可行的。

    2.1K10

    Nodejs 发送 TCP 消息的正确姿势

    NODE-RED 里内建了一个节点叫“tcp-out”,看文档呢使用这个节点可以很方便的把 payload 用 TCP 协议发送出去,但是事实上事情没有这么简单。...于是就花了点时间研究了下用 Nodejs 来发送 TCP 消息。 问题 上面说了使用内建的节点“tcp-out”发送 TCP 消息会有问题。那么到底是什么问题呢?...“tcp-out” 节点只是简单的把 payload 字符串转成了 buffer 然后发送了出去。其实如果自己做测试,发送一个消息然后服务端接受一个消息一点问题都没有的。...使用 Nodejs 发送 TCP 报文(消息) 好了上面铺垫了这么多 ,总算要开始写代码了。 如果你打开 Google 搜索 "nodejs 发送 tcp" 你会得到很多代码示例。...这样就完成了一次 TCP 报文消息的发送。 总结 虽然题目叫 Nodejs 发送消息,但是代码却是寥寥几行。本文多数文字都是在描述 TCP 协议相关的东西。

    1.5K30

    Jmeter-TCP( Socket) 连接发送数据

    - 分享内容 - 《Jmeter–TCP(Socket) 连接发送数据》 - 适用场景 - 1. Socket连接,TCP传输 2. 客户端向服务器发送「十六进制格式文件」 3....循环次数:每个线程发送请求的次数。 如果勾选了“永远”,那么所有线程会一直发送 请求,直到选择停止运行脚本。 02....配置说明 TCPClient classname:TCP发送有三种启用方式: TCPClientImpl:文本数据,默认为这种 BinaryTCPClientImpl:传输16进制数据,指定包结束符。...Connect:设置连接超时时间。 Response:设置响应超时时间。 Re-use connection:表示重复使用该连接发送请求。...注意:如果需要使用同一连接重复发送数据,每个TCP取样器的Re-use connection都 需要勾选上。 在线程组上右键菜单(添加--->取样器-→TCP取样器)选择TCP取样器。

    7K10

    TCP协议发送接收数据简单实现

    背景 Demo 基于 Java 实现简单的 TCP 传输 / 接收协议 词义百科 TCP 协议 (传输控制协议) TCP 协议是面向连接的通信协议,即传输数据之前,在发送端和接收端建立逻辑连接,再传输数据...在 TCP 连接中必须要明确客户端与服务器,由客户端向服务器发送连接请求,每次连接的创建都需要经过 “三次握手” 三次握手:TCP 协议中,在发送数据的准备阶段,客户端与服务器之间的三次交互,以保证连接的可靠...第一次握手:客户端向服务器发出连接请求,等待服务器确认 第二次握手:服务器向客户端回送一个响应,通知客户端收到连接请求 第三次握手:客户端再次向服务器发送确认信息,确认连接 完成三次握手,连接建立后,...TCP 协议可以保证传输数据的安全,所以应用十分广泛,比如:文件上传、文件下载、浏览页面 三次握手示意图 四次挥手示意图 发送端 Demo package tcp; import java.io....*; import java.net.InetAddress; import java.net.Socket; /** * TCP 发送数据步骤 * 1.创建客户端socket对象 * 2.获取输出流

    1.3K50

    解决SSH连接Linux超时

    让人非常恼火,如何解决 SSH 连接 Linux 超时自动断开?...修改服务器相关配置 $TMOUT 系统环境变量 # 用以下命令判断是否是否设置了该参数 echo $TMOUT # 如果输出空或0表示不超时,大于0的数字n表示n秒没有收入则超时 # 修改方法 vi /...ClientAliveCountMax 3 # ---------------------------- # ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送...设置60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了。 # ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开。...windows 配置 如果你在 windows 下通过工具连接,可以设置为 secureCRT:选项---终端---反空闲 中设置每隔多少秒发送一个字符串,或者是 NO-OP 协议包 putty:putty

    9.3K50

    iOS下TCP设置connnect超时时间的坑

    问题 此前开发实现了一个手机扫码连接PC,PC端调用手机端证书做签名的功能,最近为了优化通信质量和稳定性,将通信协议由UDP改为TCP,局域网用TCP直连,外网用MQTT做中转,优先使用局域网。...后来才发现,阻塞模式下,TCP的connect超时时间可能为75秒到几分钟。。。坑爹啊,等这么久的吗??...原因 阻塞模式 客户端socket为阻塞模式,connect()会一直阻塞到连接建立或连接失败(超时时间可能为75秒到几分钟) 非阻塞模式 调用connect()后,如果连接不能马上建立则返回-1,并且...errno设置为EINPROGRESS,表示正在尝试连接(注意连接也可能马上建立成功比如连接本机的服务器进程),此时TCP的三次握手动作在背后继续进行,而程序可以做其他的东西,然后调用select()检测非阻塞...connect是否完成(此时可以指定select的超时时间,这个超时时间可以设置为比connect的超时时间短),如果select超时则关闭socket,然后可以尝试创建新的socket重新连接,如果select

    2.2K10

    TCP发送窗口拥塞窗口试题分析

    若乙收到的数据全部存入缓存,不被取走,则甲从连接建立成功时刻起,未发送超时 的情况下,经过 4 个 RTT 后,甲的发送窗口是(A)。...若甲在t时刻发生超时时拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是 (A) A.10KB B.12KB C.14KB D.15KB 分析: 当t时刻发生超时...在建立TCP连接后,主机甲按照慢启动(慢开始)和拥塞避免机制发送数据,其拥塞窗口初始值为1,慢启动门限值ssthresh为8,且每次发送TCP报文段均搭载1KB的用户数据。 1....分析 1.题目说了不考虑流量控制,而流量控制是TCP接收方针对TCP发送方采取的措施,能够消除发送方使接收方缓存溢出的可能性。 也就是说,这里接收方接收缓存无限大。...而发送窗口=min(接收缓存的通知值,拥塞窗口大小)。所以这里发送窗口=拥塞窗口。 并且收到的确认不超时,不考虑超时重传。

    62610

    协议森林11 涅槃 (TCP重新发送)

    下面我们要介绍两种重新发送TCP片段的机制:超时重新发送和快速重新发送。  超时重新发送 我们之前已经简单介绍过重新发送的机制:当发送方送出一个TCP片段后,将开始计时,等待该TCP片段的ACK回复。...这个计时等待的时间叫做重新发送超时时间(RTO, retransmission timeout)。 RTO:沙漏中沙子的多少 发送方应该在等待多长时间之后重新发送呢?这是重新发送的核心问题。...快速重新发送 我们刚才介绍了超时重新发送的机制:发送方送出一个TCP片段,然后开始等待并计时,如果RTO时间之后还没有收到ACK回复,发送方则重新发送。...快速重新发送机制提高了检测丢失片段的效率,往往可以在超时之前探测到丢失片段,并重复发送丢失的片段。 总结 凤凰浴火重生。...而TCP协议利用重新发送(retransmission)来实现TCP传输的可靠性。重新发送的基本形式是超时重新发送,根据统计的往返时间来设置超时标准;如果超时,则重新发送TCP片段。

    82760

    Go:使用TCP发送和接收大文件

    在Go中进行TCP编程时,文件的发送和接收是一个常见的问题,特别是处理大文件时。本文将深入探讨如何在Go中使用TCP发送和接收大文件,以及如何有效地处理这类问题。...文件的发送 下面是一个简单的使用TCP发送文件的示例: package main import ( "io" "log" "net" "os" ) func main...我们使用io.Copy函数来完成文件内容的发送。io.Copy函数会从源(在这里是文件)读取数据,并将数据写入到目标(在这里是TCP连接)。...这意味着,即使文件非常大,我们也可以使用io.Copy函数来发送和接收文件。 明确开始和结束 在使用TCP进行文件传输时,需要考虑文件传输的开始和结束。...总结: 总的来说,虽然在Go中使用TCP发送和接收大文件可能看起来很复杂,但实际上只需要使用io.Copy函数,就可以在不占用大量内存的情况下,有效地发送和接收大文件。

    1.5K10
    领券