TCP/UDP
文章平均质量分 81
总结TCP和UDP相关技术点
LceChan
这个作者很懒,什么都没留下…
展开
-
深入理解TCP发送速率控制协议
TCP Friendly Rate Control(TFRC),是网络环境下单播流的一种拥塞控制机制。对于TCP流,它是公平竞争带宽的。但是与TCP相比,吞吐量随时间的变化要小得多,也就是对带宽变化的响应比TCP慢,使其更适用于电话通信、流媒体等需要相对平滑发送速率的应用。因此,TFRC仅用于需要平滑吞吐量时,尤其是避免TCP响应单个丢包而将发送速率减半。推荐使用TCP发送尽可能多的数据包,或者不需要可靠机制,可以使用加法增加、乘法减小(AIMD)的拥塞控制方案,与TCP使用的参数类似。原创 2022-09-19 23:01:49 · 1224 阅读 · 0 评论 -
tcp状态图
tcp状态图原创 2022-09-10 18:03:06 · 684 阅读 · 0 评论 -
QUIC协议
quic协议总结原创 2022-09-10 15:53:53 · 147 阅读 · 0 评论 -
Socket中SO_REUSEADDR详解
如果我们终止一个已经建立连接的服务器程序,并试图立即重新启动这个服务器程序,服务器程序将不能把它的这个周知端口赋值给它的端点,因为那个端口是处于 2MSL 连接的一部分。(1)如果服务器最后发送的ACK因为某种原因丢失了,那么客户一定会重新发送FIN,这样因为有TIME_WAIT的存在,服务器会重新发送ACK给客户,如果没有TIME_WAIT,那么无论客户有没有收到ACK,服务器都已经关掉连接了,此时客户重新发送FIN,服务器将不会发送ACK,而是RST,从而使客户端报错。所以,这样是安全的。转载 2022-09-04 16:09:56 · 1852 阅读 · 0 评论 -
TCP中time_wait解释及解决方法
在关闭“前一个连接”之后,马上又重新建立起一个相同的IP和端口之间的“新连接”,“前一个连接”的迷途重复分组在“前一个连接”终止后到达,而被“新连接”收到了。当服务器主动关闭连接,产生time_wait时,每一个连接需要占用一定大小的内存资源,当TIME_WAIT 状态的连接过多时,会导致消耗的内存增加。net.ipv4.tcp_max_tw_buckets 参数的默认值为18000,当系统中处于 TIME_WAIT 状态的连接数量超过阈值,系统会将后面的TIME_WAIT连接重置。转载 2022-09-04 16:03:03 · 2739 阅读 · 0 评论 -
TCP连接中启用和禁用TCP_NODELAY有什么影响?
在我之前的时间中,t大概就是40ms。举个例子,比如之前的blog中的实验,一开始client端调用socket的write操作将一个int型数据(称为A块)写入到网络中,由于此时连接是空闲的(也就是说还没有未被确认的小段),因此这个int型数据会被马上发送到server端,接着,client端又调用write操作写入‘/r/n’(简称B块),这个时候,A块的ACK没有返回,所以可以认为已经存在了一个未被确认的小段,所以B块没有立即被发送,一直等待A块的ACK收到(大概40ms之后),B块才被发送。转载 2022-09-04 16:00:50 · 809 阅读 · 0 评论 -
setsockopt :SO_LINGER 选项设置
3、设置 l_onoff 为非0,l_linger为非0,当套接口关闭时内核将拖延一段时间(由l_linger决定)。2、设置 l_onoff为非0,l_linger为0,则套接口关闭时TCP夭折连接,TCP将丢弃保留在套接口发送缓冲区中的任何数据并发送一个RST给对方,而不是通常的四分组终止序列,这避免了TIME_WAIT状态;1、设置 l_onoff为0,则该选项关闭,l_linger的值被忽略,等于内核缺省情况,close调用会立即返回给调用者,如果可能将会传输任何未发送的数据;原创 2022-09-04 15:58:53 · 554 阅读 · 0 评论 -
彻底弄懂TCP协议:从三次握手说起
下面两图大家再熟悉不过了,TCP 的三次握手和四次挥手见下面左边的”TCP 建立连接”、”TCP 数据传送”、”TCP 断开连接”时序图和右边的”TCP 协议状态机” 。TCP三次握手、四次挥手时序图TCP协议状态机要弄清 TCP 建立连接需要几次交互才行,我们需要弄清建立连接进行初始化的目标是什么。TCP 进行握手初始化一个连接的目标是:分配资源、初始化序列号(通知 peer 对端我的初始序列号是多少),知道初始化连接的目标,那么要达成这个目标的过程就简单了,握手过程可以简化为下面的四次交互:转载 2022-09-04 01:07:34 · 698 阅读 · 0 评论 -
什么是TCP粘包?怎么解决这个问题
举个例子:有三个数据包,大小分别为2k、4k、6k,如果采用UDP发送的话,不管接受方的接收缓存有多大,我们必须要进行至少三次以上的发送才能把数据包发送完,但是使用TCP协议发送的话,我们只需要接受方的接收缓存有12k的大小,就可以一次把这3个数据包全部发送完毕。TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的,可能是来自发送方,也可能是来自接收方。接收方没有办法来处理粘包现象,只能将问题交给应用层来处理。转载 2022-09-03 01:14:35 · 127 阅读 · 0 评论 -
TCP通信过程中time_wait和close_wait产生过多的原因和解决方法
TCP通信过程中time_wait,和close_wait产生过多的原因和解决方法。转载 2022-08-22 23:10:05 · 1029 阅读 · 0 评论 -
QUIC协议原理详解
QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。1.1 什么是QUIC。.........转载 2022-08-14 12:15:19 · 16125 阅读 · 0 评论 -
Quic浅析
QUIC(Quick UDP Internet Connections)基于UDP的传输层协议,提供像TCP一样的可靠性。在提高web应用性能上,可以选择在应用层使用HTTP2.0实现多路传输,在物理层使用CDN解决网络拥塞和最后一公里问题。在传输层,目前主要使用TCP,但由于TCP本身的问题(一个充满补丁的丑陋的协议),成为了限制web应用性能的一个瓶颈。...转载 2022-08-14 11:54:32 · 407 阅读 · 0 评论 -
Google的TCP BBR拥塞控制算法深度解析
原作者:dog250,授权发布重新整理:极客重生hi ,大家好,今天推荐一篇我认为在TCP BBR技术里面分析非常透彻的文章,希望大家可以学习到一些真正的知识,理解其背后的设计原理,才能应对各种面试和工作挑战!1980年代的拥塞崩溃导致了1980年代的拥塞控制机制的出炉,某种意义上这属于见招拆招的策略,针对1980年代的拥塞,提出了1980年代的:说实话,这些机制完美适应了1980年代的网络特征,低带宽,浅缓存队列,美好持续到了2000年代。...转载 2022-08-13 18:14:50 · 1530 阅读 · 0 评论 -
一文解释清楚Google BBR拥塞控制算法原理
下图中是先以10Mbps的链路传输TCP,在第20秒网络切换到了更快的40Mbps链路,由于1.25的存在BBR很快发现了更大的带宽,而第40秒又切换回了10Mbps链路,2秒内由于RTT的快速增加BBR调低了发送速率,可以看到由于有了pacing_gain周期变换BBR工作得很好。慢启动在BBR中仍然保留,它的意义是在不知道连接的瓶颈带宽时,以起始较低的发送速率,以每RTT两倍的速度快速增加发送速率,直到到达一个阈值,对应上图中0-4秒。第1条灰色竖线,是瓶颈路由器的缓冲队列刚刚开始积压时的节点。....转载 2022-08-13 17:39:31 · 1640 阅读 · 0 评论 -
TCP BBR拥塞控制算法解析
2016年底,Google发表了一篇优化tcp传输算法的文章,极大的提高了tcp得throughput,并且已经集成到Linux 4.9 内核。本文给出了论文中省略的一些背景知识,并结合自己的理解做了更加细节的介绍,可以帮助读者理解整个bbr算法。BBR已经在Google跨数据中心的内部广域网(B4)上部署,相对于CUBIC,BBR的吞吐量提高了133。...转载 2022-08-13 16:55:20 · 2121 阅读 · 0 评论 -
TCP的拥塞控制 (Tahoe Reno NewReno SACK)
最初由V. Jacobson在1988年的论文中提出的TCP的拥塞控制由**慢启动(Slow Start)**和拥塞避免(Congestion Avoidance)组成,后来TCP Reno版本中又针对性的加入了快速重传(Fast Retransmit)、快速恢复(Fast Recovery)算法,再后来在TCP NewReno中又对快速恢复算法进行了改进,近些年又出现了选择性应答(Selective Acknowledgement, SACK)算法,还有其他方面的大大小小的改进,成为网络研究的一个热点。.原创 2022-08-13 13:26:53 · 2553 阅读 · 0 评论 -
UDP如何实现可靠传输
一般而言对于大部分的应用使用TCP既可以满足工程的需求,因为TCP即保证的可靠性,又是一个相对绅士的协议,对于网络拥塞提供了流量和拥塞控制保证了网络友好性。那为啥还需要使用UDP呢?主要是因为在一些实时性要求比较高的情景中TCP没办法满足要求同时对于数据量不大的低功耗情景也是考虑使用的UDP,但是需要在用户态自行保证可靠性,也就是接下来需要阐述的内容。1 可靠性传输UDP的可靠性,其实是借鉴TCP可靠性传输的策略,并且化繁为简取其精华。首先我们需要了解TCP是如何保证可靠性的。...转载 2022-08-08 00:56:55 · 3858 阅读 · 0 评论 -
TCP、UDP、IP头部结构
数据传输在TCP/IP网络模型中,经过一层便会添加一层头部,其中TCP(网络传输协议),UDP处于传输层,IP(网间协议)处于网络层。原创 2022-08-07 19:53:56 · 2374 阅读 · 0 评论 -
UDP协议详解
*传输层另一个重要的协议就是用户数据报协议 UDP。UDP 只在 IP 的数据报服务之上增加了很少一点的功能,这就是复用和分用的功能以及差错检测的功能。UDP的主要特点是:(1)UDP 是无连接的。即发送数据之前不需要建立连接(当然,发送数据结束时也没有连接可释放),因此减少了开销和发送数据之前的时延。(2)UDP 使用尽最大努力交付。即不保证可靠交付,因此主机不需要维护复杂的连接状态表(这里面有许多参数)。(3)UDP 是面向报文的。......转载 2022-08-07 19:48:21 · 5879 阅读 · 0 评论 -
TCP那些事
下面是:“TCP协议的状态机”(图片来源) 和 “TCP建链接”、“TCP断链接”、“传数据” 的对照图,我把两个图并排放在一起,这样方便在你对照着看。另外,下面这两个图非常非常的重要,你一定要记牢。(吐个槽:看到这样复杂的状态机,就知道这个协议有多复杂,复杂的东西总是有很多坑爹的事情,所以TCP协议其实也挺坑爹的)其实,网络上的传输是没有连接的,包括TCP也是一样的。而TCP所谓的“连接”,其实只不过是在通讯的双方维护一个“连接状态”,让它看上去好像有连接一样。所以,TCP的状态变换是非常重要的。....原创 2022-08-07 19:09:14 · 143 阅读 · 0 评论 -
TCP-IP详解:滑动窗口(Sliding Window)
可以假设一下,来优化一下PAR效率低的缺点,比如我让发送的每一个包都有一个id,接收端必须对每一个包进行确认,这样设备A一次多发送几个片段,而不必等候ACK,同时接收端也要告知它能够收多少,这样发送端发起来也有个限制,当然还需要保证顺序性,不要乱序,对于乱序的状况,我们可以允许等待一定情况下的乱序,比如说先缓存提前到的数据,然后去等待需要的数据,如果一定时间没来就DROP掉,来保证顺序性!..................转载 2022-08-07 17:33:59 · 1008 阅读 · 0 评论 -
TCP滑动窗口
根据这两个数据,A根据B的窗口值构造出自己的发送窗口为20字节(A的发送窗口一定不能超过B的接收窗口数值,上篇文章讲到过的)。窗口的实现实际上是在操作系统开辟一个缓存空间(空间和序号都是有限的,并且要循环使用,一般为环形队列),发送主机在等到确认应答返回之前,必须在缓冲区保留已发送窗口的数据(超时重传)。接收窗口内的数据序号(31~50)是允许接收的。如上图,B先收到了序号为32和33的数据(31未收到,也许丢失或滞留在网络中),此时B会给出确认报文,报文段中确认号仍为31(31未收到,期望收到的序号)。.转载 2022-08-07 15:48:03 · 288 阅读 · 0 评论 -
什么是流量控制?
一、为什么需要流量控制?双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来,这时候接收方只能把处理不过来的数据存在缓存区里(失序的数据包也会被存放在缓存区里)。如果缓存区满了发送方还在疯狂着发送数据,接收方只能把收到的数据包丢掉,大量的丢包会极大着浪费网络资源,因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。对发送方发送速率的控制,我们称之为流量控制。二、如何控制?接收方每次收到数据包,可以在发送确定报文的时候,同时告转载 2022-08-07 13:34:47 · 5328 阅读 · 0 评论 -
什么是拥塞控制?
A 与 B 建立连接之后,就可以向B发送数据了,然而这个时候 A 并不知道此时的网络拥塞情况如何,也就是说,A 不知道一次性连续发送多少个数据包好,我们也把 A 一次性连续发送多少个数据包称之为拥塞窗口,用 N 代表此时拥塞窗口的大小吧。2、一个一个增加实在是太慢了,所以可以刚开始发送1个,如果没有发生超时时间,就发送2个,如果还是没有发送超时事件就发送4个,接着8个…不过这里值得注意的是,第一种情况的增长速率确实有点慢,但是第二种情况以指数增长,增长速度有点太快了,可能一下子就到瓶颈值了。......转载 2022-08-07 12:59:45 · 754 阅读 · 0 评论 -
TCP的滑动窗口与拥塞窗口
因此我们先了解一下16位的窗口大小究竟有什么作用。窗口分为滑动窗口和拥塞窗口。滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。那么对于数据的发送端就是拥塞窗口了,拥塞窗口不代表缓存,拥塞窗口指某一源端数据流在一个RTT内可以最多发送的数据包数一、滑动窗口滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的可以接受缓冲区大小(这个字段越大说明网络吞吐量越高),从而控制发送方的发送速度,不过...转载 2021-09-28 23:38:23 · 1955 阅读 · 0 评论