首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

TCP为什么可靠?

滑动窗口 顺序、丢包问题 确认和重发机制 流量控制 拥塞控制 前言 上一篇记录了TCP三次握手四次挥手的细节以及为什么会在TIME_WAIT状态停留时间为2MSL。...一直说TCP是可靠的协议,那么它靠什么成为一个可靠的传输协议? 实现一个可靠的协议?...对于TCP协议来说,他不知道整个网络路径都会经历什么,TCP发送包常被比喻为往一个水管里面灌水,而TCP的拥塞控制就是在不堵塞、不丢包的情况下,尽量发挥带宽。...第二个问题是 TCP 的拥塞控制要等到将中间设备都填充满了,才发生丢包,从而降低速度,这时候已经晚了。其实 TCP 只要填满管道就可以了,不应该接着填,直到连缓存也填满。...为了优化这两个问题,后来有了 TCP BBR 拥塞算法。

41530

为什么业务面试问“乐观锁”

当业务服务的并发量上来之后,“乐观锁”反而成为影响业务服务吞吐量的定时炸弹,为什么要这么说呢?咱们可以这样想,10个线程处理一行数据,只能有一个线程处理成功,其他9个全是失败的。...所以这个就解释了“为什么乐观锁适合读多写少”的问题,主要目的是“既要提高业务接口的并发性,也要减少锁冲突带来的不必要的性能损耗,尤其是并发量非常高的业务场景”。...乐观锁与数据 为什么说“乐观锁”与数据关系很大了,因为咱们使用“乐观锁”就是为了保护我们数据的一致性,所以如果聊乐观锁,肯定会考察与数据相关的知识点,比如MySQL的锁,ElasticSearch的乐观锁等等

23210

TCP 传输为什么可靠?

这一定程度上保证了TCP传输的可靠性,而不是我随便想发就发,不管你收到了没有。 3)重传机制 上面讲到了确认应答,那么如果没有收到应答应该在何时开始重传呢?...4)流量控制--滑动窗口 TCP两端互传肯定不能是随心所欲,想发就发,需要有一个东西来控制他们的发送接收速率,这个东西就是滑动串口。...在TCP中是维护两个绝对指针和一个相对指针来控制窗口,当前发送完但是还没确认的数据划分在发送窗口中,可用窗口中是维护即将发送的符合大小要求的数据。...为了解决这个问题,TCP的每个连接都会维护一个持续计时器,当收到对端的win=0的包之后就会开启计时,如果发送超时就会发送窗口探测报文,对方在确认这个报文的时候会带上win,以此打破死锁的局面。

84220

为什么面试喜欢考算法题?

事实就是,越成熟的大公司,内部有越多的内部组件内部系统,你在里面工作,你不需要担心应该采用什么数据库用什么语言什么发行版的 linux ,你只需要选择现有的组件设计好架构组织好代码就足够。...为什么?一道简单的算法题,你现在对着电脑想,可能没什么难度,一下就能写出来,但是面对面试的时候的压力,你能否在十几分钟内在纸上能写出整洁无 bug 的代码?...以前在知乎上面看过一个是清华的一个竞赛出身的学生问为什么 google 问的问题那么简单他答出来了还被拒了,你搞竞赛出身你有一身牛逼的 coding 本领熟悉各种奇技淫巧,但是要你解释思路的时候却三言两语就糊弄过去

1.3K20

Linux网络编程TCP

TCP/IP协议 TCP/IP 协议栈是一系列网络协议(protocol)的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。...OSI 7层模型和TCP/IP四层网络模型对应关系 计算机网路基础的知识不过多讲解,主要是让大家明白接下来的Linux网络编程数据流属于那一层,具体如下图 TCP/IP协议数据流示意图 我们接下来讲解的...Linux网络编程Tcp协议是属于传输层的协议 Linux Socket 网络编程 TCP协议 TCP是面向连接的可靠的传输层协议。...TCP编程 Linux中的网络编程是通过socket接口来进行的。socket是一种特殊的I/O接口,它也是一种文件描述符。常用于不同机器上的进程之间的通信,当然也可以实现本地机器上的进程之间通信。...简单 tcp服务器和客户端就到这里,下期介绍多线程技术,实现一个多线程的聊天室程序。

5.4K30

使用TCP可靠吗?为什么可靠?

• 面向连接:在使用 TCP 协议之前,必须建立TCP连接,在传送数据完毕之后,必须释放连接。            • TCP连接只能有两个端点:点对点  即一对一。            ...• TCP提供可靠交付的服务:通过TCP连接传送的数据无差错、不丢失、不重复、并且按序到达。            ...• TCP提供全双工通信:通信双方的应用进程任何时候都可以发送数据。            • TCP协议:一对一。            ...• TCP 连接:两端都设有发送缓存,接受缓存,用来储存临时通信的数据。发送时,应用程序把数据传送给TCP的缓存,就可以做其他事了。...接收时,TCP把收到的数据放入缓存,上层应用程序在合适的时候读取缓存。            • 面向字节流:TCP中的流指的是流入到进程或从进程中流出的字节序列。”

31920

基础面试,为什么面试官喜欢问String?

String 在 Java 中,我们有两种方式创建一个字符串 String x = "abc"; String y = new String("abc"); 你常见也常写第一种,很少见第二种,但面试还问这类问题...为什么 String 类被 final 修饰 字符串池的需求 字符串池(String intern pool)是方法区域中的一个特殊存储区域。...这也是为什么在一般情况下,不可变类是首选的原因。...user 引用不能被更改指向内存的其他地址,但是由于 User 是可变对象,我们可以调用 user 的 setter 方法修改其属性 在String类中包含很多学问,包括你对JVM模型的理解,这也就是为什么面试官为什么喜欢问...String,主要考察你的基本功 灵魂追问 String 和基本类型的包装类如 Integer 和 Long 都被 final 修饰,但为什么不建议作为 synchronized 同步块的参数使用呢?

30230

基础面试,为什么面试官喜欢问String?

String 在 Java 中,我们有两种方式创建一个字符串 String x = "abc"; String y = new String("abc"); 你常见也常写第一种,很少见第二种,但面试还问这类问题...为什么 String 类被 final 修饰 字符串池的需求 字符串池(String intern pool)是方法区域中的一个特殊存储区域。...这也是为什么在一般情况下,不可变类是首选的原因。...user 引用不能被更改指向内存的其他地址,但是由于 User 是可变对象,我们可以调用 user 的 setter 方法修改其属性 在String类中包含很多学问,包括你对JVM模型的理解,这也就是为什么面试官为什么喜欢问...String,主要考察你的基本功 灵魂追问 String 和基本类型的包装类如 Integer 和 Long 都被 final 修饰,但为什么不建议作为 synchronized 同步块的参数使用呢?

38120

基础面试,为什么面试官喜欢问String?

String 在 Java 中,我们有两种方式创建一个字符串 String x = "abc"; String y = new String("abc"); 你常见也常写第一种,很少见第二种,但面试还问这类问题...我们最好使用 StringBuffer 或者 StringBuilder,否则,由于每次操作字符串都会创建一个新的对象,而旧的对象不会有引用指向它,这样我们会浪费很多垃圾回收的时间 到这里还没完,你有没有想过为什么...为什么 String 类被 final 修饰 字符串池的需求 字符串池(String intern pool)是方法区域中的一个特殊存储区域。...这也是为什么在一般情况下,不可变类是首选的原因。...user 引用不能被更改指向内存的其他地址,但是由于 User 是可变对象,我们可以调用 user 的 setter 方法修改其属性 在String类中包含很多学问,包括你对JVM模型的理解,这也就是为什么面试官为什么喜欢问

45910

tcp为什么是三次握手

参考 TCP 为什么是三次握手,而不是两次或四次? 1. tcp三次握手流程 ? image.png 由图可知,tcp三次握手的关键在于,序列号seq的交换确认。 2....为什么不能是两次握手 因为对于客户端和服务端来说,双方对对方的序列号的确认是可靠传输的关键。...而在tcp中,通过三次握手,和丢包的处理机制,A和B都会确定自己的序列号被对方接收。 3. tcp对三次握手中丢包的处理 照搬自TCP 为什么是三次握手,而不是两次或四次?...为 Established状态,而B显然认为TCP为Active状态: a....这样,tcp的三次握手,加上对丢包的处理机制,就保证了A、B对双方序列号的确认。也就建立了可靠传输的基础。 4. 为什么不能是四次握手 把四次握手中的第二和第三步合并起来,就是三次握手了。

1.1K81

面试突击69:TCP 可靠吗?为什么

相比于 UDP 来说,TCP 的主要特性是三个:有连接、可靠、面向数据流。...:TCP 是如何保证可靠性的?...1.校验和 TCP 协议的数据格式如下图所示: (图片来源:许许如生xxrs) 从上图可以看出“校验和”是保存在 TCP 首部中的一个数据,TCP 的发送端和接收端会采用相同的算法,根据发送的数据计算出一个...巧妙的超时重传机制 TCP 的超时重传机制在设计上也非常巧妙,它为了保证消息在任何环境中,都能高效的通讯,所以 TCP 采用的是“动态时间”的超时重传机制。...如果传递的数据多了,出现了大量的丢包,那么 TCP 会将发送的数据量调小,然后再尝试慢慢的增加发送的数据量,通过这种动态发送数据包的形式,来实现适合当前网速的数据传递,这就是 TCP 拥塞控制的具体实现

24630

为什么TCP 协议是可靠的?

TCP 协议是 TCP/IP 协议栈中的传输层的协议,TCP协议又叫传输控制协议(Transport Control Protocal)。众所周知,它是一个可靠协议。...那 TCP 协议如何保证不丢包呢?这个是本文重点讲述的内容。 1 TCP 协议的作用 ISO(国际标准化组织)曾提出一个 OSI 七层模型。...后来技术人员在 TCP/IP 等协议集问世之后,提出 TCP/IP 协议栈。该模型很贴近实际场景,所以被广泛的应用。TCP/IP 协议栈一共分为 4 个层次。...所以TCP是采用“流”通信。 但是传输层的下一层是网络层。即 TCP 协议的下一层协议是 IP 层。这就意味着 TCP 协议最终还是由 IP 协议规定的形式传输数据。而IP 协议是以数据包方式传送。...针对这问题,TCP 协议为了确保数据到达的顺序与文本流顺序相同。TCP 协议将每个 TCP 片段中分为头部(header)和数据(payload)两部分。每个头部中带有一个序号。

4.2K21
领券