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

TCP协议浅析TCP概述TCP可靠数据传输TCP流量控制TCP连接管理

本文将简单介绍tcp协议的基本内容,主要包括一下四部分: tcp概述 TCP可靠数据传输 TCP流量控制 TCP连接管理 让我们对tcp有一个简单的回顾总结 TCP概述 tcp是一个点对点端到端的传输协议...tcp是面向连接的协议,通信双方在发送数据之前必须建立连接。连接状态只在连接的两端中维护,在沿途节点中并不维护状态。...TCP在IP层提供的不可靠服务基础上实现可靠数据传输服务 流水线机制 累积确认 TCP使用单一重传定时器 触发重传的事件:超时和收到重复ACK RTT和超时 问题:如何设置定时器的超时时间?...会出现卡死,发送方不发数据了。关于这些问题具体会在tcp拥塞控制里面讨论。 TCP连接管理 TCP sender和receiver在传输数据前需要建立连接。...收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。

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

继续画图带你学习TCP 其他 7 特性

本文是接着上篇 画图带你理清TCP协议三次握手和四次挥手 继续带你学习TCP 其他 7 特性。...,进一步地提高传输效率 认识滑动窗口 一发一收的方式:TCP 协议需要对数据进行确认后,才可以发送下一个数据包,如图: 如上图,发送端每发送一个数据包,都需要得到接收端的确认应答以后,才可以发送下一个数据包...(窗口大小) (通过接收缓冲区的 “剩余空间大小” 来决定发送方的速率) 窗口大小不能无限,传输速率太快,接收方可能处理不过来 在使用滑动窗口机制进行数据传输时,发送方根据实际情况发送数据包,接收端接收数据包...,并返回确认应答包,告诉发送端自己下次希望收到的数据包是多少(新的窗口大小),发送端收到确认应答包以后,将以该窗口大小进行发送数据包 接收端将自己可以接收的缓冲区大小放入 TCP 首部中的 “窗口大小”...,就可以接收新的数据(滑动窗口大小是动态变化的) 六、拥塞控制 (安全机制) 拥塞控制是考虑网络传输路径上的拥堵程度 虽然TCP有了滑动窗口这个大杀器,能够高效可靠的发送大量的数据;但是如果在刚开始阶段就发送大量的数据

32120

【MODBUS】Modbus-TCP数据

Modbus-TCP基于4种报文类型 MODBUS 请求是客户机在网络上发送用来启动事务处理的报文 MODBUS 指示是服务端接收的请求报文 MODBUS 响应是服务器发送的响应信息 MODBUS 证实是在客户端接收的响应信息...Modbus-TCP报文: 报文头MBAP MBAP为报文头,长度为7字节,组成如下: 帧结构PDU PDU由功能码+数据组成。...数据(一个地址的数据为1位) 如:在从站0x01中,读取开始地址为0x0002的线圈数据,读0x0008位 00 01 00 00 00 06 01 01 00 02 00 08 回:数据长度为0x01...数据(长度:9+ceil(数量/8)) 如:从地址0x0000开始读0x0012个离散量输入 00 01 00 00 00 06 01 02 00 00 00 12 回:数据长度为0x03个字节,数据为...寄存器数据(长度:9+寄存器数量×2) 如:读起始地址为0x0002,数量为0x0005的寄存器数据 00 01 00 00 00 06 01 04 00 02 00 05 回:数据长度为0x0A,第一个寄存器的数据

5410

Sweet Snippet系列 之 TCP数据接收

Sweet Snippet系列 之 TCP数据接收 一.引子   虽说仍然是Sweet Snippet,不过本篇并没有代码,纯粹是自己觉得有点趣味,就索性一记了~ 二. ...问题   接触过网络编程的朋友大概都应知道TCP,作为一种“流”式协议,TCP的粘包问题一直都是程序处理的要点,而这次的问题就是,如果发送n字节的TCP数据,对端接收时会出现多少种接收情况? 三. ...解法   我们先从具体的一个实例来简单算一算吧~就假设我们发送了3个字节的TCP数据: image.png   由于TCP如果接收成功至少可以接收一个字节,所以对于3个字节的数据而言,最多可能造成总计三次...TCP接收,让我们分情况讨论一下:   对于只发生一次TCP接收就获取全部数据的情况,只有1种可能(分隔线代表一次接收): image.png 对于发生两次TCP接收,有2种可能: image.png...  对于发生三次TCP接收,显而易见,只有1种可能: image.png 所以总的接收情况次数为:C(3) = 1 + 2 + 1 = 4 对于n个字节的一般情况,分情况讨论的方法就有些费心费力了

55010

tcp紧急数据处理源码浅析

tcp紧急数据用于一端有紧急通知需要告之对端的时候,他传输的其实是一种命令或者说信号,而不算是数据,因为他只有一个字节。...对端收到紧急数据后会给对应的进程发送一个信号,通知该进程有紧急的命令需要处理(前提是设置了进程或者进程组来处理紧急数据)。下面看一下紧急数据的发送。入口函数是tcp_write。关键代码如下。...// 可发送的序列化最大值 - 下一个可写的序列化值等于可以发送的字节数,如果当前可以发送的数据量太大,这里会导致紧急数据不在当前的tcp报文中,需要等下一个报文才会发送真正的紧急数据,但是该tcp报文还是会设置紧急指针和紧急标记位...|| copy max_window >> 1) || copy > sk->mss) copy = sk->mss; // 能发送的比需要发送的,...*/ // 之前已经收到过紧急数据,并且之前收到的紧急数据序列号比现在收到的 if (sk->urg_data && !

66520

如何处理 tcp 紧急数据(OOB)?

前言 在上大学的时候,我就听说了 OOB 这个概念(Out Of Band 带外数据,又称紧急数据)。当时老师给的解释就是在当前处理的数据流之外的数据,用于紧急的情况。...需要注意的是,目前只有 TCP 支持 OOB,UDP 没所谓顺序,更没所谓带内带外之分,所以也没有 OOB;另外 TCP 目前大多数实现只支持 1 字节 OOB,大于 1 字节的 OOB,只有最后一字节会被当为...而且普通数据的接收,会被 OOB 数据打断成两块,无法一次性读取。 2....使用 SO_OOBINLINE 标志位将 OOB 作为惯常数据处理 这种方法是将 OOB 数据当作惯常数据接收,在接收前通过判断哪些是普通数据哪些是 OOB 数据,具体步骤如下: a) 新连接建立时,设置套接字选项...的 recv 接收数据,因为 OOB 数据已经被当作惯常数据来处理了,此处与方法 2是一致的。

71630

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.获取输出流...; import java.io.*; import java.net.Socket; import java.net.ServerSocket; /** * TCP 接收数据步骤 * 1.创建服务端

1.2K50

tcp服务下的数据传递

go中实现一个tcp服务,首先是要监听端口,接收请求,这个地方会被阻塞等待 当客户端连接过来,会开一个grountine去处理这条客户端的tcp连接,因此可以同时处理多条连接 在连接中,要循环的去读取客户端传递过来的数据...,这样就可以不停的处理客户端的请求数据 在读取数据的时候,每次我只读一个字节,这样方便查看接收到什么数据,因此读取数据的时候也要循环,拼接收到的数据,在这个循环中如果读取大小为0或者读取的这个字节为\n...因为\n的ascii编码为10,所以我收到的这一个字节切片的数据tmpByte[0]为10的时候就断掉 可以通过下面代码的运行看一下收取到的数据,客户端传递一个英文字符,和传递一个中文字符所收取到的具体数据...package main import ( "fmt" "net" ) func main() { //监听端口 listener, _ := net.Listen("tcp...for { tmpByte := make([]byte, 1) var resData []byte //循环去读取数据 for

60420

示例:Netty 处理 TCP数据分包协议

一个、Netty解决TCP协议的数据分包的想法 我们知道通过TCP协议发送接收数据时,假设数据过大。接收到的数据会是分包的。...Netty提供了一个专门处理TCP协议数据的Handler: LengthFieldBasedFrameDecoder ,它的原理是server端和client约定一个协议格式:数据包=协议长度+协议体...发送了10MB字节的数据,怎样让Nettyserver一次就接收到这10MB数据呢?...那就须要client告诉服务端我发送的数据大小是多少,即在发送的数据中增加一个“数据包长度”就可以,上面提到的Handler就是用来和client约定这个协议格式的,它有几个參数,以下我介绍一下它的參数意义...: int maxFrameLength:定义接收数据包的最大长度,假设发送的数据包超过此值。

55030

TCP

TCP的优势 从传输数据来讲,TCP/UDP以及其他协议都可以完成数据的传输,从一端传输到另外一端,TCP比较出众的一点就是提供一个可靠的,流控的数据传输,所以实现起来要比其他协议复杂的多,先来看下这两个修饰词的意义...Reliability ,提供TCP的可靠性,TCP的传输要保证数据能够准确到达目的地,如果不能,需要能检测出来并且重新发送数据。 2....Data Flow Control,提供TCP的流控特性,管理发送数据的速率,不要超过设备的承载能力 为了能够实现以上2点,TCP实现了很多细节的功能来保证数据传输,比如说 滑动窗口适应系统,超时重传机制...,TCP通过确认机制来保证数据传输的可靠性,在比较早的时候使用的是send--wait--send的模式,其实这种模式叫做stop-wait模式,发送数据方在发送数据之后会启动定时器,但是如果数据或者ACK...在TCP/IP协议栈中,滑动窗口的引入可以解决此问题,先来看从概念上数据分为哪些类 1.

1.2K21

聊聊数据库事务内嵌TCP连接

概述 在数据库内部嵌套TCP连接(一般是HTTP调用或是RPC远程调用)。...事务控制: 建立TCP连接可以使数据库管理系统更好地控制和监视事务。它可以跟踪连接的状态和事务的执行进度,从而更容易实现事务管理和恢复。 性能优化: 内部TCP连接可以针对特定的事务进行性能优化。...安全性: 内部TCP连接可以通过加密和认证来增强安全性,确保只有授权的用户或应用程序能够访问数据库 弊端: TCP连接可能会超时,导致事务变成长事务。...资源消耗: 每个TCP连接都需要消耗系统资源,包括内存和处理能力。在高负载情况下,内部建立TCP连接可能导致资源耗尽,影响其他事务的执行。...连接维护开销: 维护大量的TCP连接可能会增加数据库管理系统的开销。每个连接都需要管理、维护和监视,这可能会导致性能下降。 复杂性: 内部TCP连接引入了更复杂的架构,需要更多的管理和维护工作。

10730

TCP中的数据是怎么传输的?

经受时延的ack是指如果TCP等待数据发送的200ms之内还没有收到数据,就单独发送一个ack,不带数据。...成块的数据比如电子邮件 tcp通过滑动窗口来控制成块数据的流量,使得发送方在不需要每发送一个分组就等待确认,从而加快了数据的传输 什么是滑动窗口?...TCP报文中的PUSH标识是干什么用的? 客户端用来通知TCP在向服务器发送一个报文时,不要因等待额外数据而使已提交数据在缓存中滞留。...服务器收到带PUSH标识的TCP报文时,则立即将这些数据递交给服务器进程。 TCP的紧急方式有什么用?...当服务器进入了紧急方式,此时服务器是无法发送任何数据的,但服务器TCP会立即发送紧急指针和URG标志,当客户端TCP收到这个通知时,便会通知客户端进程,于是客户端可以从服务器读取其输入、打开窗口使数据流动

1.1K30
领券