一 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

面试题:谈谈你对TCP的认识相关推荐

  1. 从一道面试题谈谈一线大厂码农应该具备的基本能力

    作者:Yura Shevchenko 来源:skypixel.com 关于一线码农的面试,我想说 求职面试在绝大部分人来说都是必不可少的,自己作为求职者也参与了不少面试(无论成功或者失败),作为技术面 ...

  2. 2017年搜狐内推 面试题——谈谈面试中的算法

    转自:2017年搜狐内推 面试题--谈谈面试中的算法,保存在此以学习. 第一题:给你一个数组,其中有一个元素的个数大于数组总个数的一半,求出这个元素. 该同学的给出了方法一:先对数组排序,然后找到中间 ...

  3. 谈谈重要的TCP、UDP

    文章目录 一.TCP是什么? 二.TCP头部有哪些信息 三.常见TCP的连接状态有哪些? 四. TCP三次握手 五. TCP四次挥手 六.TCP粘包和拆包 粘包的原因 如何处理粘包.拆包 七.TCP短 ...

  4. 集合面试题(谈谈你对集合的理解?)

    目录 1.Collection 与Collections的区别 2.Collection下的接口: 1. List 元素有序,可重复. 实现类的区别如下: 1.ArrayList 2.LinkedLi ...

  5. 每天一道面试题-谈谈对面向对象思想的理解

    这个问题,通常会让很多人有点不知所措,感觉我一直在编码,但是说到思想很难去阐述. 下面,我说说自己的想法, 首先,谈谈"面向过程"vs"面向对象" 我觉得这两者 ...

  6. 从 Google 的一道面试题谈谈数学基础的重要性

    编程能力是剑法,而数学基础是内功.只会剑法而不会内功,在实战中一定会鼻青脸肿. 2004 年,在硅谷的交通动脉 101 公路上出现了一块巨大的广告牌,上面是道数学题:{ e 的连续数字中最先出现的 1 ...

  7. 闭包 python_根据面试题谈谈 Python 闭包

    题目: 1.什么是闭包?闭包的定义? 2.手写一个简单的闭包 3.变量作用域规则与 nonlocal 关键字? 4.闭包的应用 答案要点: 1.首先,我们要了解变量作用域,上代码:# 示例一 def ...

  8. 面试题-谈谈你对JVM的理解

    首先问一个问题,jvm.jdk.jre三者的区别?再去谈其他的 JVM(Java  Virtual  Machine):虚拟机  ,源文件.java在虚拟机中通过编译器编译成字节码文件.class,是 ...

  9. 面试题——谈谈指针和引用的区别

    一.指针和引用的定义和性质区别: (1) 指针:指针是一个变量,只不过这个变量存储的是一个地址,指向内存的一个存储单元,即指针是一个实体:而引用跟原来的变量实质上是同一个东西,只不过是原变量的一个别名 ...

最新文章

  1. 如何安装树莓派摄像头
  2. 芯片史上最大收购案!「博通」拟斥资1000亿美元收购「高通」
  3. 作者:唐华(1973-),男,华南师范大学软件学院院长助理、副教授。
  4. jquery版瀑布流
  5. [原创]RCP项目:邮件客户端
  6. 使用python读取mid/mif文件
  7. 逆向基础(一) | WooYun知识库
  8. cubieboard服务器系统,Cubieboard 1搭建服务器安装Linux/Debian系统并移至内置Nand中
  9. 【lua/aviutl】游戏对话框效果
  10. 《设计模式》之策略模式
  11. 联想拯救者安装Ubuntu 16.04 系统时显示WiFi无法连接被禁用
  12. [dpdk] SDK编译配置
  13. 【epoll函数】epoll_create、epoll_ctl、epoll_wait
  14. 世界空战史上的头号王牌空中杀手
  15. Python:计算电费
  16. Package ‘zipp’ requires a different Python:3.5.2 not in ‘ 大于等于3.6’
  17. 计算机人离开后保护,设置屏幕保护密码防止他人在自己离开时偷窥
  18. XMind中的鱼骨图
  19. 假期无聊,我又发现一个刷题神器
  20. 智慧园区建设新方案:人脸识别智能门禁+手机梯控+访客管理系统

热门文章

  1. php yii多表查询
  2. android的消息队列机制
  3. 关于《详解》第12.1节按键驱动的进一步阐述
  4. python和java后期发展_Python与java的发展前景谁最大
  5. Hivesql里的limit使用误区
  6. Android 多选列表
  7. exists sql用法_干货!SQL性能优化,书写高质量SQL语句
  8. python自带的编辑器怎么换行_Python3基础 print 自带换行功能
  9. mysql使用技巧_MySQL使用不得不看的几个小技巧
  10. [转载] JAVA数组实现学生成绩统计