TCP协议相关知识汇总

目录

  • TCP协议相关知识汇总
  • 一、TCP/IP协议:
    • 1、TCP三次握手
    • 2、TCP四次挥手
  • 二、TPC滑动窗口机制:
  • 三、TCP/UDP区别:

一、TCP/IP协议:

TCP/IP: 是互联网相关的各类协议族的总称,比如:TCP,UDP,IP,FTP,HTTP,ICMP,SMTP 等都属于 TCP/IP 族内的协议。

  • TCP负责发现传输中的问题,一有问题就发出信号,要求重新传输,直到所有数据安全正确地传输到目的地。TCP是一个端到端的面向连接的协议。所以HTTP在开始传输之前,首先需要建立TCP连接,而TCP连接的过程需要所谓的“三次握手”。
  • IP是给因特网的每一台联网设备规定一个地址。

1、TCP三次握手

所谓的三次握手即TCP连接的建立。这个连接必须是一方主动打开,另一方被动打开的。首先TCP报文格式简介如图:

重要字段解释:

  • 序号(Seq):用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

  • 确认号(ack):只有ACK标志位为1时,确认序号字段才有效,ack=Seq+1。

  • ACK标志位:确认序号有效。

  • SYN标志位:发起一个新连接。

  • FIN标志位:释放一个连接。

以下为客户端主动发起连接的图解:

  • 第一次握手: 客户端主动发起连接请求:发送SYN=1, Seq=x(x一般为1,表示发送了一个序列号为x的数据)。
  • 第二次握手: 服务器端此时结束监听,接收到客户端的连接请求并同意连接:发送SYN=1,ACK=1(表示服务器端收到客户端想要连接的请求),Seq=y,ack=x+1(表示是在收到客户端报文的基础上,将其序号Seq值加1作为本段报文确认号Ack的值)。
  • 第三次握手: 客户端结束SYN-SENT阶段,进入ESTAB-LISHED阶段,并发送报文给服务器端:ACK=1,表示客户端收到服务器端确认收到自己发送连接的请求,Seq=x+1(收到服务器端确认号ack,并将其作为自己的序号值),ack=y+1(收到服务器的Seq,将Seq+1作为自己的ack)。

2、TCP四次挥手

  • 第一次挥手: 客户端想要释放连接,向服务器端发送一段TCP报文,其中:FIN=1,Seq=U;随后客户端进入FIN-WAIT-1阶段,即半关闭阶段。并且停止在客户端到服务器端方向上发送数据,但是客户端仍然能接收从服务器端传输过来的数据。
    PS:客户端仍然能发送ACK确认报文。

  • 第二次挥手: 服务器端确认客户端想要释放连接,随后服务器端结束ESTABLISHED阶段,进入CLOSE-WAIT阶段(半关闭状态)并返回一段TCP报文:ACK=1(表示服务器端收到客户端想要释放连接的信号),Seq=V,确认号为ack=U+1;随后服务器端开始准备释放服务器端到客户端方向上的连接。客户端收到从服务器端发出的TCP报文之后,确认了服务器收到了客户端发出的释放连接请求,随后客户端结束FIN-WAIT-1阶段,进入FIN-WAIT-2阶段。
    前"两次挥手"既让服务器端知道了客户端想要释放连接,也让客户端知道了服务器端了解了自己想要释放连接的请求。于是,可以确认关闭客户端到服务器端方向上的连接了

  • 第三次挥手: 服务器端自从发出ACK确认报文之后,经过CLOSED-WAIT阶段,做好了释放服务器端到客户端方向上的连接准备,再次向客户端发出一段TCP报文:标记位为FIN,ACK,表示“已经准备好释放连接了”,Seq=W,确认号为ack=U+1;随后服务器端结束CLOSE-WAIT阶段,进入LAST-ACK阶段。并且停止在服务器端到客户端的方向上发送数据,但是服务器端仍然能够接收从客户端传输过来的数据(ACK确认报文)。

  • 第四次挥手: 客户端收到从服务器端发出的TCP报文,确认了服务器端已做好释放连接的准备,结束FIN-WAIT-2阶段,进入TIME-WAIT阶段,并向服务器端发送一段报文:标记位为ACK,表示“接收到服务器准备好释放连接的信号”;序号为Seq=U+1,确认号为Ack=W+1。随后客户端开始在TIME-WAIT阶段等待2MSL。

几点思考:

  • Q:客户端在发送完ACK确认报文之后,为什么会设置一个时长为2MSL的计时器?
    A:当客户端发出最后的ACK确认报文时,并不能确定服务器端能够收到该报文,因此需要等一段时间。MSL指的是Maximum Segment Lifetime:一段TCP报文在传输过程中的最大生命周期。2MSL即是服务器端发出为FIN报文和客户端发出的ACK确认报文所能保持有效的最大时长。服务器端在1MSL内没有收到客户端发出的ACK确认报文,就会再次向客户端发出FIN报文;

  • Q:为什么是四次挥手,不是三次?
    A:因为服务端在LISTEN状态下,收到客户端发送的断开连接的FIN报文后,可能会有数据未发送完成,需要继续发送,因此不能将确认消息和请求关闭消息同时发送,而是会先关闭接收服务回复确认消息,然后继续发送未完消息到客户端,直到发送结束,再发送请求关闭消息。

二、TPC滑动窗口机制:

滑动窗口协议的基本原理就是在任意时刻,发送方都维持了一个连续的允许发送的帧的序号,称为发送窗口;同时,接收方也维持了一个连续的允许接收的帧的序号,称为接收窗口。发送窗口和接收窗口的序号的上下界不一定要一样,甚至大小也可以不同。不同的滑动窗口协议窗口大小一般不同。发送方窗口内的序列号代表了那些已经被发送,但是还没有被确认的帧,或者是那些可以被发送的帧。下面举一个例子(假设发送窗口尺寸为2,接收窗口尺寸为1):

① 初始态,发送方没有帧发出,发送窗口前后沿相重合。接收方0号窗口打开,等待接收0号帧;
② 发送方打开0号窗口,表示已发出0帧但尚确认返回信息。此时接收窗口状态不变;
③ 发送方打开0、1号窗口,表示0、1号帧均在等待确认之列。至此,发送方打开的窗口数已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧。接收窗口此时状态仍未变;
④ 接收方已收到0号帧,0号窗口关闭,1号窗口打开,表示准备接收1号帧。此时发送窗口状态不变;
⑤ 发送方收到接收方发来的0号帧确认返回信息,关闭0号窗口,表示从重发表中删除0号帧。此时接收窗口状态仍不变;
⑥发送方继续发送2号帧,2号窗口打开,表示2号帧也纳入待确认之列。至此,发送方打开的窗口又已达规定限度,在未收到新的确认返回帧之前,发送方将暂停发送新的数据帧,此时接收窗口状态仍不变;
⑦接收方已收到1号帧,1号窗口关闭,2号窗口打开,表示准备接收2号帧。此时发送窗口状态不变;
⑧发送方收到接收方发来的1号帧收毕的确认信息,关闭1号窗口,表示从重发表中删除1号帧。此时接收窗口状态仍不变。

三、TCP/UDP区别:

UDP协议全称是用户数据报协议,在网络中它与TCP协议一样用于处理数据包。UDP在某些实时性要求高的场景(比如电话会议)较为常用。

  1. 面向无连接: UDP 是不需要和 TCP一样在发送数据前进行三次握手建立连接的,想发数据就可以开始发送了。并且UDP不会对数据报文进行任何拆分和拼接操作。
  2. 有单播,多播,广播的功能:UDP 不止支持一对一的传输方式,同样支持一对多,多对多,多对一的方式,也就是说 UDP 提供了单播,多播,广播的功能。
  3. UDP是面向报文的:发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。因此,应用程序必须选择合适大小的报文。
  4. 不可靠性:首先不可靠性体现在无连接上,通信都不需要建立连接,想发就发,这样的情况肯定不可靠。并且收到什么数据就传递什么数据,并且也不会备份数据,发送数据也不会关心对方是否已经正确接收到数据了。再者网络环境时好时坏,但是 UDP 因为没有拥塞控制,一直会以恒定的速度发送数据。即使网络条件不好,也不会对发送速率进行调整。这样实现的弊端就是在网络条件不好的情况下可能会导致丢包,但是优点也很明显,在某些实时性要求高的场景(比如电话会议)就需要使用 UDP 而不是 TCP。
  5. 头部开销小,传输数据报文时高效:UDP 的头部开销小,只有八字节,相比 TCP 的至少二十字节要少得多,在传输数据报文时是很高效的。

关于TPC协议知识汇总相关推荐

  1. web前端之浏览器篇——http协议知识汇总

    Accept-Charset:浏览器可接受的字符集 User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本 Content-Type:例如:Content-Type: ap ...

  2. 【LWIP】LWIP协议|相关知识汇总|LWIP学习笔记

    这里作为一个汇总帖把,把以前写过的LWIP相关的博客文章汇总到一起,方便自己这边查找一些资料. 收录于: [LWIP]LWIP协议|相关知识汇总|LWIP学习笔记 LWIP协议 [LWIP]LWIP网 ...

  3. java并发核心知识体系精讲_JAVA核心知识汇总

    双非同学如何逆袭大厂? 在互联网行业,入行的第一份工作很大程度上决定了以后职业发展的高度.有些双非的同学认为自己校招进不了大厂以后还会有社招,这种想法很危险.大厂的社招,大多数都只招大厂的员工.什么意 ...

  4. 计算机网络把许多什么连接在一起,计算机网络技术基础知识汇总习题

    计算机网络技术基础知识汇总习题 1.21世纪要实现信息化,就必须依靠完善的网络,这里的网络是指,向用户提供不同服务的 电信网络,有线电视网络和计算机网络三种网络.(电信网络,有线电视网络,计算机网络) ...

  5. 网络基础知识汇总学习

    一.网线(双绞线)连接线的制作 双绞线制作有 568A 和 568B 两个标准,日常以 568B 标准较常用. 568B 标准按颜色排序为: 1- 橙白. 2- 橙.3- 绿白.4- 蓝. 5- 蓝白 ...

  6. Serdes基础知识汇总

    Serdes基础知识汇总 从知乎https://zhuanlan.zhihu.com/p/423321485转载 在开始了解高速接口的时候,必然会涉及到SerDes.serdes的知识点实际上非常多, ...

  7. (转)视觉工程师笔试知识汇总

    视觉工程师笔试知识汇总 2017年03月28日 20:32:06 NodYoung 阅读数:12978 版权声明:转载请注明出处,谢谢. https://blog.csdn.net/NNNNNNNNN ...

  8. 三万字,100题!Linux知识汇总!

    这篇文章主要介绍了三万字,100题!Linux知识汇总!以及相关的经验技巧,文章约160077字,浏览量243,点赞数7,值得参考! 导读:本文整理了最新的Linux面试题,近3万字,约100道题,分 ...

  9. 常见堡垒机小知识汇总-行云管家

    为了保障企业IT资产安全,越来越多的企业选择购买堡垒机,但他们对于堡垒机相关知识不清楚,今天我们小编就给大家汇总了部分,希望可以帮到大家. 常见堡垒机小知识汇总 堡垒机是硬件还是软件? 目前市面上堡垒 ...

最新文章

  1. 计算机基础及应用教案,计算机应用基础教案:数制的概念及转换(中职教育)
  2. 网络营销前夕怎样确定网站定位?这是网络营销开展的基础!
  3. 判断ipv6地址_#网络工程师#5分钟教你搞懂IPV6如何发现邻居
  4. 全球及中国微生物气溶胶采样器行业十四五”发展规划及运营前景研究报告2021年版
  5. NumPy 生成全0矩阵,全1矩阵,随机矩阵,求平均数,求方差的方法
  6. sql脚本导入sql_学习SQL:SQL脚本
  7. pytorch RNN原理实现词性判别以及预测下一个词
  8. HowNet介绍及相关API的使用方法
  9. 交大网络教育计算机自测选择题,交大网络计算机组成与系统结构单元自测题.doc...
  10. 土地日度交易数据2000-2022
  11. IE中对于本地地址不使用代理服务器的选项
  12. while循环CPU占用率高问题深入分析与解决方案
  13. php mcv,swolle http mcv设计问题
  14. js中判断数据类型的方法
  15. Dbus启动问题 Failed to get D-Bus connection: Operation not permitted
  16. Unity和AndroidStudio交互制作SDK并和其他的SDK合并(微信APP支付)
  17. 很漂亮实用的jQuery实例123个
  18. Focal Loss与GHM 理解与使用
  19. OGRE 引擎官方基础教程 (一)
  20. RGB颜色转HEX进制与单位换算

热门文章

  1. 循环神经网络-高级篇RNN Classifier
  2. 《安富莱嵌入式周报》第268期:2022.05.30--2022.06.05
  3. web客户端页面连接MQTT服务
  4. mongdb 下载慢,解决
  5. 大唐杯比赛辅导,国一选手
  6. 21秋期末考试工程项目管理10324k2 (2)
  7. 数据库子查询 含义-分类-语句
  8. 手机内核是什么要怎么刷,小白必看的手机内核刷机命令
  9. 芯准TTE“宏时隙”调度机制 ——策略与参数
  10. Burpsuite抓包夜神模拟器