热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

计算机网络:这是一份全面&详细的TCP协议攻略

前言计算机网络基础该是程序猿需掌握的知识,但往往会被忽略今天,我将详细讲解计算机网络中最重要的TCP协议,含其特点、三次握手、四次挥手、无差错传输等知识,希望你们会喜欢。阅读本文前

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》

前言
  • 计算机网络基础 该是程序猿需掌握的知识,但往往会被忽略
  • 今天,我将详细讲解计算机网络中最重要的TCP协议,含其特点、三次握手、四次挥手、无差错传输等知识,希望你们会喜欢。

阅读本文前,请先了解计算机网络基础知识:献上一份全面 & 详细的计算机网络基础 学习指南

目录

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

1. 定义

Transmission Control Protocol,即 传输控制协议

  1. 属于 传输层通信协议
  2. 基于TCP的应用层协议有HTTPSMTPFTPTelnetPOP3
2 特点
  • 面向连接、面向字节流、全双工通信、可靠
  • 具体介绍如下:

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

3. 优缺点
  • 优点:数据传输可靠
  • 缺点:效率慢(因需建立连接、发送确认包等)
4. 应用场景(对应的应用层协议)

要求通信数据可靠时,即 数据要准确无误地传递给对方

如:传输文件:HTTP、HTTPS、FTP等协议;传输邮件:POP、SMTP等协议

  • 万维网:HTTP协议
  • 文件传输:FTP协议
  • 电子邮件:SMTP协议
  • 远程终端接入:TELNET协议
5. 报文段格式
  • TCP虽面向字节流,但传送的数据单元 = 报文段
  • 报文段 = 首部 + 数据 2部分
  • TCP的全部功能体现在它首部中各字段的作用,故下面主要讲解TCP报文段的首部
  1. 首部前20个字符固定、后面有4n个字节是根据需而增加的选项
  2. 故 TCP首部最小长度 = 20字节

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图
《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

6. 建立连接过程
  • TCP建立连接需 三次握手
  • 具体介绍如下

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图
《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图
《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

成功进行TCP的三次握手后,就建立起一条TCP连接,即可传送应用层数据

  1. TCP提供的是全双工通信,故通信双方的应用进程在任何时候都能发送数据
  2. 三次握手期间,任何1次未收到对面的回复,则都会重发

特别说明:为什么TCP建立连接需三次握手?

  • 结论
    防止服务器端因接收了早已失效的连接请求报文,从而一直等待客户端请求,最终导致形成死锁、浪费资源

  • 具体描述

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 具体描述

SYN洪泛攻击:

  • 从上可看出:服务端的TCP资源分配时刻 = 完成第二次握手时;而客户端的TCP资源分配时刻 = 完成第三次握手时
  • 这就使得服务器易于受到SYN洪泛攻击,即同时多个客户端发起连接请求,从而需进行多个请求的TCP连接资源分配
7. 释放连接过程
  • 在通信结束后,双方都可以释放连接,共需 四次挥手
  • 具体如下

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图
《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图
《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

特别说明:为什么TCP释放连接需四次挥手?

  • 结论
    为了保证通信双方都能通知对方 需释放 & 断开连接

即释放连接后,都无法接收 / 发送消息给对方

  • 具体描述

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

延伸疑问:为什么客户端关闭连接前要等待2MSL时间?

  1. TIME - WAIT 状态的作用是什么;
  2. MSL = 最长报文段寿命(Maximum Segment Lifetime
  • 原因1:为了保证客户端发送的最后1个连接释放确认报文 能到达服务器,从而使得服务器能正常释放连接

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 原因2:防止 上文提到的早已失效的连接请求报文 出现在本连接中
    客户端发送了最后1个连接释放请求确认报文后,再经过2MSL时间,则可使本连接持续时间内所产生的所有报文段都从网络中消失。

即 在下1个新的连接中就不会出现早已失效的连接请求报文

8. 无差错传输
  • 对比于UDPTCP的传输是可靠的、无差错的
  • 那么,为什么TCP的传输为什么是可靠的、无差错的呢?
  • 下面,我将详细讲解TCP协议的无差错传输

8.1 含义

  • 无差错:即 传输信道不出差错
  • 发送 & 接收效率匹配:即 无论发送方以多快的速度发送数据,接收方总来得及处理收到的数据

8.2 基础:滑动窗口 协议

  • 先理解2个基础概念:发送窗口、接收窗口

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 工作原理
    对于发送端:
  1. 每收到一个确认帧,发送窗口就向前滑动一个帧的距离
  2. 当发送窗口内无可发送的帧时(即窗口内的帧全部是已发送但未收到确认的帧),发送方就会停止发送,直到收到接收方发送的确认帧使窗口移动,窗口内有可以发送的帧,之后才开始继续发送
    具体如下图:

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

对于接收端:当收到数据帧后,将窗口向前移动一个位置,并发回确认帧,若收到的数据帧落在接收窗口之外,则一律丢弃。

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

滑动窗口 协议的重要特性

  • 只有接收窗口向前滑动、接收方发送了确认帧时,发送窗口才有可能(只有发送方收到确认帧才是一定)向前滑动
  • 停止-等待协议、后退N帧协议 & 选择重传协议只是在发送窗口大小和接收窗口大小上有所差别:
  1. 停止等待协议:发送窗口大小=1,接收窗口大小=1;即 单帧滑动窗口 等于 停止-等待协议
  2. 后退N帧协议:发送窗口大小>1,接收窗口大小=1。
  3. 选择重传协议:发送窗口大小>1,接收窗口大小>1。
  • 当接收窗口的大小为1时,可保证帧有序接收。
  • 数据链路层的滑动窗口协议中,窗口的大小在传输过程中是固定的(注意要与TCP的滑动窗口协议区别)

8.3 实现无差错传输的解决方案

核心思想:采用一些可靠传输协议,使得

  1. 出现差错时,让发送方重传差错数据:即 出错重传
  2. 当接收方来不及接收收到的数据时,可通知发送方降低发送数据的效率:即 速度匹配
  • 针对上述2个问题,分别采用的解决方案是:自动重传协议 和 流量控制 & 拥塞控制协议

解决方案1:自动重传请求协议ARQ(针对 出错重传)

  • 定义
    Auto Repeat reQuest,具体介绍如下:

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 类型

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

下面,将主要讲解 上述3类协议

类型1:停等式ARQ(Stop-and-Wait)

  • 原理:(单帧滑动窗口)停止 – 等待协议 + 超时重传

即 :发送窗口大小=1、接收窗口大小=1

  • 停止 – 等待协议的协议原理如下:
  1. 发送方每发送一帧,要等到接收方的应答信号后才能发送下一帧
  2. 接收方每接收一帧,都要反馈一个应答信号,表示可接下一帧
  3. 若接收方不反馈应答信号,则发送方必须一直等待

类型2:后退N帧协议

也称:连续ARQ协议

  • 原理
    多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传

即 :发送窗口大小>1、接收窗口大小=1

  • 具体描述
    a. 发送方:采用多帧滑动窗口的原理,可连续发送多个数据帧 而不需等待对方确认
    b. 接收方:采用 累计确认 & 后退N帧的原理,只允许按顺序接收帧。具体原理如下:

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

示例讲解

本示例 = 源站 向 目的站 发送数据帧。具体示例如下:

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

类型3:选择重传ARQ(Selective Repeat)

  • 原理
    多帧滑动窗口 + 累计确认 + 后退N帧 + 超时重传

即 :发送窗口大小>1、接收窗口大小>1

类似于类型2(后退N帧协议),此处仅仅是接收窗口大小的区别,故此处不作过多描述

  • 特点
    a. 优:因连续发送数据帧而提高了信道的利用率
    b. 缺:重传时又必须把原来已经传送正确的数据帧进行重传(仅因为这些数据帧前面有一个数据帧出了错),将导致传送效率降低

由此可见,若信道传输质量很差,导致误码率较大时,后退N帧协议不一定优于停止-等待协议

解决方案2:流量控制 & 拥塞控制(针对 速度匹配)

措施1:流量控制

  • 简介

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 示例

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 特别注意:死锁问题

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

措施2:拥塞控制

  • 定义
    防止过多的数据注入到网络中,使得网络中的路由器 & 链路不致于过载

拥塞:对网络中的资源需求 > 该资源所能提供的部分

  • 与 “流量控制”的区别

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 具体解决方案
    共分为2个解决方案:慢开始 & 拥塞避免、快重传 & 快恢复

其中,涉及4种算法,即 慢开始 & 拥塞避免、快重传 & 快恢复

具体介绍如下

解决方案1:慢开始 & 拥塞避免

1.1 储备知识:拥塞窗口、慢开始算法、拥塞避免算法

a. 拥塞窗口

  • 发送方维持一个状态变量:拥塞窗口(cwnd, congestion window ),具体介绍如下

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

b. 慢开始算法

  • 原理
    当主机开始发送数据时,由小到大逐渐增大 拥塞窗口数值(即 发送窗口数值),从而 由小到大逐渐增大发送报文段

  • 目的
    开始传输时,试探网络的拥塞情况

  • 具体措施

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 示意图

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 特别注意
    慢开始的“慢”指:一开始发送报文段时拥塞窗口(cwnd)设置得较小(为1),使得发送方在开始时只发送一个报文段(目的是试探一下网络的拥塞情况)

并不是指拥塞窗口(cwnd)的增长速率慢

c. 拥塞避免 算法

  • 原理
    使得拥塞窗口(cwnd)按线性规律 缓慢增长:每经过一个往返时间RTT,发送方的拥塞窗口(cwnd)加1
  1. 拥塞避免 并不可避免拥塞,只是将拥塞窗口按现行规律缓慢增长,使得网络比较不容易出现拥塞
  2. 相比慢开始算法的加倍,拥塞窗口增长速率缓慢得多
  • 示意图

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

1.2 解决方案描述(慢开始 & 拥塞避免)

  • 为了防止拥塞窗口(cwnd)增长过大而引起网络拥塞,采用慢开始 & 拥塞避免 2种算法,具体规则如下

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 实例说明

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

解决方案2:快重传 & 快恢复

快重传 & 快恢复的解决方案 是对慢开始 & 拥塞避免算法的改进

2.1 储备知识:快重传算法、快恢复算法

a. 快重传算法

  • 原理

    1. 接收方 每收到一个失序的报文段后 就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方),而不要等到自己发送数据时才进行捎带确认
    2. 发送方只要一连收到3个重复确认就立即重传对方尚未收到的报文段,而不必 继续等待设置的重传计时器到期
  • 作用
    由于发送方尽早重传未被确认的报文段,因此采用快重传后可以使整个网络吞吐量提高约20%

  • 示意图

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

b. 快恢复

当发送方连续收到3个重复确认后,就:

  1. 执行 乘法减小 算法:把 慢开始门限(ssthresh)设置为 出现拥塞时发送方窗口值的一半 = 拥塞窗口的1半
  2. 将拥塞窗口(cwnd)值设置为 慢开始门限ssthresh减半后的数值 = 拥塞窗口的1半
  3. 执行 加法增大 算法:执行拥塞避免算法,使拥塞窗口缓慢地线性增大。

注:

  1. 由于跳过了拥塞窗口(cwnd)从1起始的慢开始过程,所以称为:快恢复
  2. 此处网络不会发生网络拥塞,因若拥塞,则不会收到多个重复确认报文

2.2 解决方案描述(快重传 & 快恢复)

  • 原理
    为了优化慢开始 & 拥塞避免的解决方案,在上述方案中加入快重传 & 快恢复 2种算法,具体规则如下

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

  • 示意图

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

至此,关于TCP无差错传输的知识讲解完毕。

9. 与UDP协议的区别

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》 示意图

10. 总结
  • 本文全面讲解了 计算机网络中最重要的TCP协议,含其特点、三次握手、四次挥手、无差错传输等知识,相信你们对TCP协议已经非常了解

  • 下面我将继续讲解 编程开发的基础知识,感兴趣的同学可以继续关注本人运营的Wechat Public Account

  • 我想给你们介绍一个与众不同的Android微信公众号(福利回赠)

  • 我想邀请您和我一起写Android(福利回赠)

请点赞!因为你的鼓励是我写作的最大动力!

相关文章阅读
Android开发:最全面、最易懂的Android屏幕适配解决方案
Android事件分发机制详解:史上最全面、最易懂
Android开发:史上最全的Android消息推送解决方案
Android开发:最全面、最易懂的Webview详解
Android开发:JSON简介及最全面解析方法!

Android四大组件:Service服务史上最全面解析
Android四大组件:BroadcastReceiver史上最全面解析

欢迎关注Carson_Ho的简书!

不定期分享关于安卓开发的干货,追求短、平、快,但却不缺深度

《计算机网络:这是一份全面 & 详细 的TCP协议攻略》


推荐阅读
  • 西北工业大学作为陕西省三所985和211高校之一,虽然在农业和林业领域不如某些顶尖院校,但在航空航天领域的实力尤为突出。该校的计算机科学专业在科研和教学方面也具有显著优势,是考研的理想选择。 ... [详细]
  • 网站访问全流程解析
    本文详细介绍了从用户在浏览器中输入一个域名(如www.yy.com)到页面完全展示的整个过程,包括DNS解析、TCP连接、请求响应等多个步骤。 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • 2016-2017学年《网络安全实战》第三次作业
    2016-2017学年《网络安全实战》第三次作业总结了教材中关于网络信息收集技术的内容。本章主要探讨了网络踩点、网络扫描和网络查点三个关键步骤。其中,网络踩点旨在通过公开渠道收集目标信息,为后续的安全测试奠定基础,而不涉及实际的入侵行为。 ... [详细]
  • 掌握PHP框架开发与应用的核心知识点:构建高效PHP框架所需的技术与能力综述
    掌握PHP框架开发与应用的核心知识点对于构建高效PHP框架至关重要。本文综述了开发PHP框架所需的关键技术和能力,包括但不限于对PHP语言的深入理解、设计模式的应用、数据库操作、安全性措施以及性能优化等方面。对于初学者而言,熟悉主流框架如Laravel、Symfony等的实际应用场景,有助于更好地理解和掌握自定义框架开发的精髓。 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • 本文详细介绍了如何安全地手动卸载Exchange Server 2003,以确保系统的稳定性和数据的完整性。根据微软官方支持文档(https://support.microsoft.com/kb833396/zh-cn),在进行卸载操作前,需要特别注意备份重要数据,并遵循一系列严格的步骤,以避免对现有网络环境造成不利影响。此外,文章还提供了详细的故障排除指南,帮助管理员在遇到问题时能够迅速解决,确保整个卸载过程顺利进行。 ... [详细]
  • 本文作为探讨PHP依赖注入容器系列文章的开篇,将首先通过具体示例详细阐述依赖注入的基本概念及其重要性,为后续深入解析容器的实现奠定基础。 ... [详细]
  • 在CentOS上部署并使用FFmpeg多媒体处理工具
    最近在进行音频处理时需要用到FFmpeg,本文将详细介绍如何在CentOS系统上部署并使用这一强大的多媒体处理工具。首先,从官方网站下载FFmpeg的最新版本,然后通过Xftp工具将下载的压缩包(如ffmpeg-4.3.1.tar.xz)传输到服务器上。接下来,解压文件并按照官方文档进行编译安装。安装完成后,可以通过命令行工具验证FFmpeg是否成功安装,并开始进行多媒体文件的转换和处理。此外,文章还将介绍一些常用的FFmpeg命令和参数,帮助用户快速上手。 ... [详细]
  • STAR: 转录组数据分析中的高效比对工具介绍
    欢迎关注“生信修炼手册”!STAR 是一款专为 RNA-seq 数据设计的高效比对工具,以其卓越的速度和高灵敏度著称。该软件在处理大规模转录组数据时表现出色,能够显著提高比对效率和准确性。此外,GATK 推荐使用 STAR 进行预处理步骤,以确保后续分析的可靠性。 ... [详细]
  • 解决SWFUpload在本地测试成功但服务器上出现404或500错误的方法
    在使用SWFUpload进行图片批量上传时,尽管本地测试一切正常,但在部署到服务器后却遇到了404和500错误。经过详细排查,发现404错误的原因在于`flash_url`和`upload_url`需要配置为绝对路径。此外,500错误可能是由于服务器端的权限设置或脚本错误导致,建议检查服务器日志以获取更多调试信息。通过这些调整,最终成功解决了问题。 ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 深入解析Wget CVE-2016-4971漏洞的利用方法与安全防范措施
    ### 摘要Wget 是一个广泛使用的命令行工具,用于从 Web 服务器下载文件。CVE-2016-4971 漏洞涉及 Wget 在处理特定 HTTP 响应头时的缺陷,可能导致远程代码执行。本文详细分析了该漏洞的成因、利用方法以及相应的安全防范措施,包括更新 Wget 版本、配置防火墙规则和使用安全的 HTTP 头。通过这些措施,可以有效防止潜在的安全威胁。 ... [详细]
author-avatar
会说话de狗尾草
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有