面试题:谈谈你对TCP的认识

一 TCP

1. 简介
首先,TCP是一个传输层协议,提供进程到进程之间的可靠性数据传输服务,还提供流量控制差错控制等机制。
其次,TCP是面向连接的,其通信模式是全双工的;面向连接是指:

  • 在发送数据之前必须建立连接;
  • 连接状态只在两端维护,沿途节点不维护;

连接建立需要进行三次握手,关闭连接需要进行四次挥手
接下来面试官会问可靠性数据传输的原理、流量控制、差错控制、三次握手和四次挥手等;

二 TCP的可靠性传输

1. TCP的可靠性传输原理

  • 流水线机制;
  • 累计确认;
  • TCP使用单一重传定时器,当超时或收到重复的ACK会触发重传事件;
  • 其它的还有使用序列号对TCP报文段进行排序和丢掉重复的报文段;使用校验和检查错误的报文段;

2. 流水线机制
流水线机制,允许发送方在收到ACK之前,可以连续的发送多个分组,发送方和接收方需要更大的存储空间以缓存分组。
3. 累计确认
接收方收到序列号1、2、3、4和5的包,不必每个都确认,只需确认第5个就行,当发送方收到接收方对5的确认ACK后,就明白接收方前5个都已经正确接收。
4. 超时重传和快速重传
超时重传:发送端发送报文后,由于长时间没有收到ACK(该分组还在路上或者丢失),所以会重传当前分组;同时定时器RTO(Retransmission Timeout)会加倍。如果再次超时,定时器会再次加倍。
快速重传:如果发生超时,TCP的定时器的时间会设置到很大,重发丢失分组之前要等很长时间。因此需要通过重复的ACK检测分组丢失,如果发送方收到同一个数据的3个ACK,则会假定该分组已经丢失,会立即重传。

三 流量控制和拥塞控制

流量控制是接收方和发送方的问题,而拥塞控制是整个网络的问题。
1. 流量控制
在TCP的报头中,有一个receive window的字段,接收方会通过设置该字段存储自己缓冲区的可用空间。这样发送方将会限制自己已发送但还未收到ACK的数据不超过接收方的可用空间。当RecvWindow为0时,为了避免死锁,发送方还是会发送很小的数据段。
2. 拥塞控制
通过限制发送发的发送速率来进行拥塞控制:

LastByteSent-LastByteAcked <= CongWin

CongWin(congest window)被称作拥塞窗口,最后一个发送的字节减去最后一个被确认过的字节序列号,要小于等于CongWin。发送速率:

rate≈CongWin/RTT (Bytes/sec)

动态调整CongWin以改变发送速率。
这里写图片描述
注:在早期版本,当发生拥塞后直接将CongWin置为1,现在是将其置为原来的一半;
如何动态调整发送速率,可以总结为:
**加性增-乘性减;
慢启动;**
慢启动并不是指增长速度慢,而是指初始速率低,初始速率为1,然后每收到一个ACK,就将CongWin翻倍,直到达到阈值的一半;
加性增是指到达阈值的一半后,每次让CongWin增加1,而乘性减是当发生loss事件后,将CongWin减为原来的一半(也可能置为1);
lose事件:收到3个重复的ACK或者超时;
总结:
当CongWin低于阈值的时候,发送者处于慢启动阶段,CongWin指数增长;
当CongWin高于阈值,发送者处于拥塞避免阶段,CongWin线性增长;
当收到3个重复的ACK,阈值设置为CongWin的一半,CongWin设置为阈值,然后进行线性增长;
当超时发生,阈值设置为CongWin的一半,CongWin设置为1,然后进行指数增长;

最后三次握手和四次挥手请参考:https://blog.csdn.net/qq_38038480/article/details/80569651

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/549114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WCF Data Services 基础

把最近使用的WCF Data Service和WCF RIA Service的使用例子发布在站点http://dskit.codeplex.com &#xff0c; 本系列文章就把WCF Data Service和WCF RIA Service涉及的主要方面描述一下&#xff0c;希望通过这些内容&#xff0c;可以比较顺畅的把这些框架使用起来&#xff0c…

面试题:MySQL的innodb和myisam

一 Innodb 1. 简介 索引是一种排好序的用于快速查找的数据结构。 **根据官网手册InnoDB支持B-tree索引、聚簇索引(Clustered indexes)、全文索引(Full-text search indexes)、不支持hash索引&#xff08;InnoDB在内部利用哈希索引来实现其自适应哈希索引功能&#xff09…

用Markup Validation Service进行网页的W3C标准语法验证(c#)

W3C提供免费的Markup Validation Service&#xff0c;这是一个可以验证Html/XHtml文档的语法规范的公共服务。在某种程度上&#xff0c;有了它&#xff0c;我们再也不用为不能全面及时检测众多浏览器和五花八门的js/css不兼容性而痛不欲生了。^-^。 使用方法很简单&#xff0c;…

为什么MySQL索引更适合B+树而不是二叉树、B树

一 数据库为什么使用B树 1. 与二叉树相比 二叉树相比于顺序查找的确减少了查找次数&#xff0c;但是在最坏情况下&#xff0c;二叉树有可能退化为顺序查找。而且就二叉树本身来说&#xff0c;当数据库的数据量特别大时&#xff0c;其层数也将特别大。二叉树的高度一般是log_2…

SIP 電話

下載转载于:https://www.cnblogs.com/kevinsun/archive/2010/10/18/1854021.html

【数据安全案例】交警计算机系统再遭***,交通违法记录随意删除

根据新浪报道&#xff0c;据新华社10月14日电 利用当网管的机会&#xff0c;破解密码&#xff0c;非法进入交警计算机系统为他人删除车辆交通违法记录牟利。辽宁省鞍山市铁西区检察院透露&#xff0c;当地某公司员工程尚军因涉嫌破坏计算机信息系统罪&#xff0c;已于10月初被依…

将Java应用程序本地编译为EXE的几种方法

将Java应用程序本地编译为EXE的几种方法(推荐使用JOVE和JET)  1. 从[url]www.towerj.com[/url]获得一个TowerJ编译器&#xff0c;该编译器可以将你的CLASS文件  编译成EXE文件。  2. 利用微软的SDK-Java 4.0所提供的jexegen.exe创建EXE文件&#xff0c;这个软件可以  从微软…

MDOP套装之app-v安装使用及功能说明

最近尝试了瑞友天翼的虚拟化产品&#xff0c;感觉还不错&#xff0c;正好手上又下载了个mdop套装&#xff0c;顺手做了个app-v实验&#xff0c;其他实验教程后期继续推出。 一、服务端的安装 二、排序工具的安装 三、客户端的安装 四、使用排序工具虚拟化一个程序 五、发布虚…

奇虎360大战腾讯QQ 高潮迭起用户受伤

原文地址&#xff1a;奇虎360大战腾讯QQ 高潮迭起用户受伤 虽然我也是不可避免的QQ用户&#xff0c;但是自从360开始揭露腾讯QQ涉及扫描用户隐私引发的这场高潮迭起的比拼谁更淫荡谁更无耻的战争中&#xff0c;我心中的一碗水一直端的很平&#xff0c;就像对待小泽和空姐的作品…

容器技术之Dockerk8s知识笔记

本文带你快速了解Kubernetes与Docker 让你对容器与虚拟机的区别、Docker与k8s有一个快速的了解 目录 演变史容器与虚拟机的区别K8S与Docker概念DockerK8S演变史 传统部署时代&#xff1a; 早期&#xff0c;将单一的应用服务运行在物理服务器上&#xff0c;无法给服务器的应用…

容器技术之kubectl常用命令

kubectl用于运行Kubernetes集群命令的管理工具。本文概述涵盖了kubectl语法&#xff0c;对命令操作的描述&#xff0c;并列举了常用命令。 Kubectl命令详细列表请查看&#xff1a;Kubernetes kubectl 命令表 语法 $ kubectl [command] [TYPE] [NAME] [flags] command&#x…

Container.ItemIndex 获取reapeater行号

<div class"<%# (Container.ItemIndex)4?"class3":"class4"%>"></div>取到第五行的行号&#xff0c;用一个三元运算符来判断div的样式。 图中container.itemindex(container.ItemIndex-5)是不对的&#xff0c;最上面的代码才…

容器技术之快速了解K8S各抽象资源及组件架构

带你快速了解Kubernetes主要概念和组件架构。 Kubernetes的组件和架构比较多&#xff0c;功能也比较多。 如果详细探讨&#xff0c;每个Kubernetes组件都可以单独写篇博客详细讲解。 我们这里是快速了解&#xff0c;就写的相对比较简单一些。 主要是针对不熟悉Kubernetes的…

《活法》中一个故事--令托尔斯泰也折服的人性寓言

某个深秋的日子里&#xff0c;在枯树残枝任萧瑟秋风吹袭的景色中&#xff0c;有位旅人正在赶路回家&#xff0c;突然间&#xff0c;他发现脚边有一堆白白的东西&#xff0c;定睛一看&#xff0c;竟然是人骨。这种地方怎么会有人骨头?他觉得浑身不对劲却又想不透&#xff0c;可…

Python可视化神器之pyecharts

目录 概述安装参数实例 柱状图-Bar饼图-Pie折线图-Line散点图-scatter3D 柱状图-Bar3D仪表盘-Gauge雷达图-Radar词云图-WordCloud地理坐标系-Geo地图-Map概述 Pyecharts是一款将python与echarts结合的强大的数据可视化工具。使用 pyecharts 可以生成独立的网页&#xff0c;也…

我就不文明了

不是 我就的 我咋就这么笨呢 妈了个逼的 本来就没有基础 本来就英文不好 本来就找不到入门的方向 怎们所有人 都在打击我 怎么所有人 都说我不可能成功 我他吗的就不信了 我就学 我就盲目的寻找 我就不信 我实现不了自己的梦转载于:https://blog.51cto.com/100000372/422302

计算机基础之IP地址、子网掩码、网络号、主机号、主机数、网络地址、广播地址

相关概念&#xff1a;IP地址、子网掩码、网络号、主机号、主机数、网络地址、广播地址 IP地址&#xff1a;由4字节/32位表示&#xff0c;通常用点分十进制表示法&#xff0c;例如192.168.1.1&#xff0c;对应的二进制就是11000000 10101000 00000001 00000001 IP地址通常有下…

Qt 4.7.1 和 Mobility 1.1.0 已发布

Qt 的升级版本 Qt 4.7.1 以及 Qt Mobility 1.1.0 最终版本已于今日发布。现二者均可下载。 Qt 4.7.1 Qt 4.7.1是一个修补版本&#xff0c;解决了在 Qt 4.7.0 中出现的一些小问题&#xff0c;同时引入了 OpenGL 对 Symbian 的支持。 要下载此版本&#xff0c;请访问 http://get.…

寄存器(内存访问)07 - 零基础入门学习汇编语言19

第三章&#xff1a;寄存器&#xff08;内存访问&#xff09;07 让编程改变世界 Change the world by program 栈段 前面讲过&#xff0c;对于8086PC机&#xff0c;在编程时&#xff0c;我们可以根据需要 &#xff0c;将一组内存单元定义为一个段。 我们可以将长度为 N&…

大型网站架构设计系列总结

大型网站架构设计系列-我的总结如下&#xff1a; 1、 数据结构和产品架构设计&#xff0c;这是基础&#xff01; 2、 角色分开&#xff0c;各司其职&#xff08;web服务器&#xff0c;缓存服务器&#xff0c;负载平衡&#xff0c;数据库等&#xff09; 3、 HTML静态化&#xff…