TCP协议的重点知识点

在这里插入图片描述

TCP协议的重点知识点

TCP(传输控制协议)是一种面向连接、可靠的数据传输协议,工作在传输层,提供可靠的字节流服务。它是互联网协议栈中最重要、最复杂的协议之一,也是面试中常被问到的知识点。本文将详细介绍TCP协议的各个重要概念。

TCP基本特性

TCP主要具有以下基本特性:

  • 面向连接:在传输数据前必须先建立连接,形成数据通道。

  • 可靠传输:TCP确保数据完整可靠地到达,如果丢包会重新传输。

  • 流量控制:发送方和接收方都有数据缓冲,通过滑动窗口机制控制传输流量,防止拥塞。

  • 拥塞控制:TCP会监控网络拥塞状况,并根据具体算法调整发送速率。

  • 顺序传输:TCP确保按序发送,接收端也按序接收和交付应用数据。

  • 面向字节:TCP以字节流的形式发送数据,没有记录边界。

TCP三次握手

TCP在传输数据前,必须先通过三次握手建立连接。主要步骤如下:

  1. 客户端向服务器端发起连接,发送SYN数据包,syn=1,随机产生一个初始序号seq=x。

  2. 服务器收到SYN包,需要对这个连接请求进行确认,回传ACK包,ack=x+1,同时也发送一个SYN包,syn=1,初始序号seq=y。

  3. 客户端再回复确认,ack=y+1,此时连接建立,可以开始传输数据。

通过三次握手,客户端和服务器都确认了对方发回的ACK,连接可靠地建立,也同步了序号初始值。

TCP四次挥手

当需要关闭连接时,TCP通过四次挥手完成连接断开:

  1. 客户端发送FIN包,标志位fin=1,序列号为x。

  2. 服务器收到FIN后,发回ACK确认,ack=x+1。但是服务器还可以发送数据,此时称为半关闭。

  3. 服务器处理完毕后,发送FIN包,fin=1,序列号y。

  4. 客户端回复ACK,确认服务器端关闭,ack=y+1。

经过四次挥手,可以确保双方都交付完数据,然后同时关闭各自方向的连接。

TCP流量控制

TCP为了防止拥塞,使用了滑动窗口机制进行流量控制,主要原理是:

  1. 接收方会维护一个窗口大小rwnd,告知发送方自己还有多大缓存。

  2. 发送方根据rwnd调整实际发送量swnd,进行流控。

  3. 接收方根据网络和自身情况动态调整rwnd。

这样通过rwnd和swnd的配合就实现了可变化的流量控制。

TCP拥塞控制

TCP主要使用了四种算法处理网络拥塞:

  1. 慢开始:初始化时先使用较小的窗口,然后指数级增大窗口,快速探测网络。

  2. 拥塞避免:设置ssthresh阈值,超过时线性增大窗口,否则指数增大。

  3. 快重传、快恢复:接收方收到乱序包时,立即冲减ACK通知发送方,进入快恢复模式。

  4. 超时重传:连续重传超时还失败,则降低传输速率。

通过上述四种算法协同运作,TCP可以动态检测并调整传输速度,避免拥塞。

TCP与UDP的区别

TCP与UDP都是工作在传输层的协议,两者有明显区别:

  • TCP面向连接,UDP是无连接的。

  • TCP提供可靠传输,会处理确认、重传、流控等;UDP不可靠。

  • TCP面向字节流,没有边界;UDP面向报文包。

  • TCP有拥塞控制,UDP没有。

  • TCP的连接建立有消耗,UDP简单高效。

  • TCP用于对可靠性要求高的场景,如文件传输;UDP用于对实时性要求高的情况。

总结

TCP通过多种机制实现了可靠、高效的数据传输,是互联网协议栈中最重要的协议之一。理解TCP的原理对网络研发问题的分析至关重要。本文概括了TCP的核心知识点,希望可以帮助大家提高TCP协议方面的理解与应用。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何用 QGIS 下载高清天地图影像机,同时解决下载质量差的问题!

使用 QGIS 我们可以获得下面这种图像,既有大范围,又有更高的细节(地图级别),基本上把整个苏州市中心城区的建筑物都囊括进去了。 还可以下载大范围、高清晰度的各种在线卫星底图服务的影像,比如大面积的哨兵2影像,但国外的服务器一般都很烂,不可能是电信、移动的问题,…

python爬虫12:实战4

python爬虫12:实战4 前言 ​ python实现网络爬虫非常简单,只需要掌握一定的基础知识和一定的库使用技巧即可。本系列目标旨在梳理相关知识点,方便以后复习。 申明 ​ 本系列所涉及的代码仅用于个人研究与讨论,并不会对网站产生不好…

QGIS 如何添加天地图

相信很多小伙伴在 QGIS 里面添加天地图的时候一定感觉很困惑,按照官网的操作申请 Key 之后,添加相对应的服务地址之后看不到地图或者地图不正常显示,今天我们就来解决这个问题 以下所有操作基于 QGIS 3.22 版本 申请 Key 1. 添加天地图的第一步需要申请 Key,首先要注册天…

Git基础教程-常用命令整理:学会Git使用方法和错误解决

目录 一、了解Git的基本概念 二、Git的安装和配置 Git的安装 Git的配置 用户信息 文本编辑器 差异分析工具 查看配置信息 三、Git的基本操作 基本原理 基本操作命令 基本操作示例 场景一:创建新仓库 场景二:拉取并编辑远程仓库 四、常见问…

MySQL之事务与引擎

目录 一、事物 1、事务的概念 2、事务的ACID特点 3、事务之间的相互影响 4、Mysql及事务隔离级别(四种) 5、演示 1、查询会话事务隔离级别 2、查询会话事务隔离级别 3、设置全局事务隔离级别 4、设置会话事务隔离级别 6、事务控制语句 7、演示 1、测试提交事务 2、测试事…

countDown+react+hook

道阻且长,行而不辍,未来可期 知识点一: new Date().getTime()可以得到得到1970年01月1日0点零分以来的毫秒数。单位是毫秒 new Date().getTime()/1000获取秒数1分钟60秒,1小时60分钟1hour:60*60>单位是秒 60*60*1000>单位…

Java的成员类可以被private修饰

说明 Java的成员类可以被private修饰,但外部类、局部类不能被private修饰。 示例 成员类用private修饰—允许 下面代码中的成员类Class2 被private修饰,是允许的: package com.thb;public class Parent {public class Class1 { }private…

ChatGPT Prompting开发实战(一)

一、关于ChatGPT Prompting概述 当我们使用ChatGPT或者调用OpenAI的API时,就是在使用prompt进行交互,用户在对话过程中输入的一切信息都是prompt(提示词),当然工业级的prompt与人们通常理解的prompt可能不太一样。下面…

基于java swing和mysql实现的仓库商品管理系统(源码+数据库+运行指导视频)

一、项目简介 本项目是一套基于java swing和mysql实现的仓库商品管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、项目文档、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经…

新SDK平台下载开源全志V853的SDK

获取SDK SDK 使用 Repo 工具管理,拉取 SDK 需要配置安装 Repo 工具。 Repo is a tool built on top of Git. Repo helps manage many Git repositories, does the uploads to revision control systems, and automates parts of the development workflow. Repo is…

若依vue打印的简单方法

像我们后端程序员做前端的话,有时候真不需要知道什么原理,直接塞就好了 我们选用基于hiprint 的vue-plugin-hiprint来打印 目的是为了实现点击某些行的数据,然后点击某个按钮直接弹出下面的打印 此链接 大佬是原创,我拿来总结梳理一下 插件进阶功能请移步: 链接 插件模板制作页…

Leetcode每日一题:1267. 统计参与通信的服务器(2023.8.24 C++)

目录 1267. 统计参与通信的服务器 题目描述: 实现代码与解析: 写法一:两次遍历 hash 原理思路: 写法二:三次遍历 原理思路: 1267. 统计参与通信的服务器 题目描述: 这里有一幅服务器分…

三维模型OBJ格式轻量化压缩并行计算处理方法浅析

三维模型OBJ格式轻量化压缩并行计算处理方法浅析 三维模型的轻量化是指通过一系列技术和算法来减小三维模型的文件大小,以提高模型在计算机中的加载、渲染和传输效率。并行计算是利用多个计算单元同时执行任务,以加速计算过程的一种技术。在三维模型的O…

基于Spring Boot的软件缺陷追踪系统的设计与实现(Java+spring boot+MySQL)

获取源码或者论文请私信博主 演示视频: 基于Spring Boot的软件缺陷追踪系统的设计与实现(Javaspring bootMySQL) 使用技术: 前端:html css javascript jQuery ajax thymeleaf 微信小程序 后端:Java spri…

【数据分析】统计量

1. 均值、众数描述数据的集中趋势度量,四分位差、极差描述数据的离散程度。 2. 标准差、四分位差、异众比率度量离散程度,协方差是度量相关性。 期望值分别为E[X]与E[Y]的两个实随机变量X与Y之间的协方差Cov(X,Y)定义为: 从直观上来看&…

ppt转pdf免费的工具哪个好用?ppt在线转pdf的方法分享

在工作和学习中,将PPT文件转换为PDF格式具有重要意义。PDF文件的大小较小,适用于各种平台和设备,保持了原始文件的内容和格式,具有广泛的可读性和兼容性。那么小编就来为大家详细地说一说“ppt转pdf免费的工具哪个好用?ppt在线转…

US-DAS1、US-P2A单路及双路插头式比例放大器

US-P1、US-P2A、US-P2F插头式安装比例放大器控制不带电反馈的双路比例电磁铁的比例阀,如直动式或先导式比例方向阀的驱动控制。 工作电源24VDC标准; 兼容指令10V、4-20mA、0~10V、0~5V(电位器控制); 输出电流0~2A; …

JavaScript—面向对象、作用域

C#:从类继承 js:从对象继承 什么叫继承? 模板(类) 原型继承(实体) 有一个对象存在,构造函数设置原型为这个对象 创建出来的对象就继承与这个对象(从对象那里继承&am…

作业人员护目镜佩戴自动识别

作业人员护目镜佩戴自动识别通过pythonyolo深度学习算法模型,作业人员护目镜佩戴自动识别利用布设摄像头并结合图像算法能够实时监测作业人员是否佩戴护目镜。一旦发现未佩戴的情况立即发出警告,并及时记录异常情况。在YOLOv1提出之前,R-CNN系…

【Python Flask+Nginx】实现HTTP、WS (两步实现,简单易懂)

目录 一、创建Flask应用 二、部署Nginx 2.1 下载Nginx 2.2 修改Nginx配置文件 2.3 启动Nginx 三、测试 一、创建Flask应用 首先我写了如下一个基于Flask的Demo,该Demo包含两个接口一个是HTTP接口(http://127.0.0.1:5000)&#xff0c…