计算机网络:传输控制协议(Transmission Control Protocol-TCP协议

计算机网络:传输控制协议(Transmission Control Protocol-TCP协议)

  • 本文目的
  • 前置知识点
  • TCP协议简介
  • 主要特性
  • 通信流程
    • 1. 建立连接的过程(三次握手,243)
      • 1.1 为什么要三次握手,两次不行吗?
    • 2. 释放连接的过程(四次挥手,3343)
      • 2.1 TIME-WAIT时间等待状态是做什么的?
  • 参考文献

本文目的

介绍TCP协议的内容,三次握手和四次挥手的必要性和原因

前置知识点

  1. 计算机网络基本知识。

TCP协议简介

全称Transmission Control Protocol,传输控制协议,运输层协议。

主要特性

参考《计算机网络》传输层协议TCP概述p211

  1. 面向连接的运输层协议,传输前需要简历TCP连接
  2. 每一条TCP协议都是点对点通信的
  3. 提供可靠交付的数据,通过TCP连接传输的数据无差错,不丢失,不重复
  4. 全双工通信
  5. 面向字节流

通信流程

1. 建立连接的过程(三次握手,243)

需要阐明为什么每次交互会有这些标志位。

图解如下
在这里插入图片描述

  1. 最开始客户端和服务器都处于关闭状态
  2. 服务器创建传输控制块(TCB,Transmit Control Block),进入绑定自己的ip和端口进入监听(listen)状态
  3. 客户端创建TCB,已知服务器的ip和端口,向服务器发出连接请求报文,包括以下内容:(发送后进入同步已发送SYN_SENT状态
    • SYN(SYNchronization)同步序号置1,表示这是一个连接请求报文
    • seq初始序号x,该报文不携带数据但是需要消耗一个初始序号,也是服务器应答的依据(服务器需要应答x+1这样客户端才知道刚刚那条报文发过去了)
  4. 服务器收到连接请求报文之后,如同意连接,返回确认报文段,包含以下内容:(发送后进入同步收到SYN_RCVD状态
    • SYN同步序号置1,表示这是一个连接接受报文段。
    • seq初始序号y,同样的需要小号一个初始序号,也是客户端应答的依据。
    • 确认ACK = 1,ACK= 1的时候确认号字段(ack)才有效,建立连接后所有的报文段都要把ACK置1。
    • 确认号ack = x + 1,期望对方下一个报文段第一个字节的序号,表示x之前的数据都收到了。
  5. 客户端收到连接确认报文之后,还要再给B发出确认,包含以下内容:(同时客户端已进入连接建立ESTABLISHED状态
    • ACK = 1,seq = x + 1, ack = y + 1。
    • 可以包含数据,如果不包含则不消耗x + 1这个序列号。
  6. 服务器收到之后进入连接建立ESTABLISHED状态,三次握手建立成功。

1.1 为什么要三次握手,两次不行吗?

参考《计算机网络》5.9 TCP的运输连接管理p239

两次握手可以避免已失效的连接请求报文段,客户端发送给服务器但是延迟送达,对于客户端来说早已失效(过期了),而且失效之后客户端没有再重发请求,但是服务器响应并且发回确认报文段,如果两次握手,服务器此时就开始建立连接,而客户端根本不会相应确认报文段,所以没连接,服务器就会干等消耗资源

其他情况理论上都可以被三次握手解决。试图举反例举不出来。

2. 释放连接的过程(四次挥手,3343)

在这里插入图片描述

  1. 最开始客户端和服务器都处于ESTABLISHED状态
  2. 客户端发完要发的消息之后,需要释放连接,发出连接释放报文,包含以下内容:(同时进入终止等待1-FIN-WAIT-1状态
    • FIN = 1,表示是一个连接释放报文
    • seq = u,释放报文需要消耗一个序号。
    • ACK = 1,理由同连接的时候一致。
  3. 服务器收到连接释放报文之后需要立刻应答,表示收到了连接释放报文,包含以下内容:(同时进入关闭等待-CLOSE-WAIT状态
    • ACK = 1
    • ack = u + 1
    • seq = v,需要消耗一个序号
  4. 客户端收到之后进入终止等待2-FIN-WAIT-2状态,可能服务器还有一些消息要发,这个阶段如果服务器发消息,客户端也要接着收。这个时候TCP称之为半关闭状态。
  5. 服务器也发完消息之后,发送连接释放报文,包含以下数据:(同时进入最后确认-LAST-ACK状态
    • FIN = 1,表示释放连接报文
    • seq = w,因为因为可能半关闭期间发了些消息,所以不是v + 1。
    • ack = u + 1不变,因为客户端没发过消息了。
    • ACK = 1。
  6. 客户端收到之后,发送最后确认,包含以下内容:(然后进入时间等待-TIME-WAIT状态
    • ACK = 1
    • ack = w + 1
    • seq = u + 1
  7. 服务器收到之后就可以关闭连接了
  8. 客户端TIME-WAIT结束后也会断开连接。

2.1 TIME-WAIT时间等待状态是做什么的?

参考《计算机网络》5.9.2 TCP的连接释放p240

避免最后一个客户端发出的ACK报文丢失带来的问题。

时间等待计时器TIME-WAIT timer 是2MSL(Maximum Segment Lifetime)最长报文段寿命

  1. 当最后一个报文丢失(超过了MSL)的时候,服务器收不到会卡在最后确认-LAST-WAIT状态,这个时候服务器可能会重新发送连接释放报文,客户端需要保证能收到,才有可能再次发送最后确认的报文。一来一回刚好是两倍的MSL。
  2. 保证本次通信的所有报文都消失(2MSL之后肯定都消失了),防止旧的包干扰下一次连接
    • 个人理解不一定对:假设第一次发了两次连接请求,但是有一个卡在路上了,然后关闭了,然后卡在路上的那个又到服务器了,其实服务器是可以不用理的

参考文献

《计算机网络》传输层协议TCP概述p211
《计算机网络》5.9 TCP的运输连接管理p239
《计算机网络》5.9.2 TCP的连接释放p240

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

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

相关文章

2023全国高质量发展园区Top50榜单发布:产业升级引领新发展

[引言] 园区作为推动地方经济高质量发展的重要引擎,在全国范围内发挥着举足轻重的作用。为表彰在园区建设和运营方面取得卓越成就的园区,中国企业网和《中国周刊》联合举办了2023全国高质量发展园区Top50评选活动,由中国品牌峰会组委会参与评…

垃圾回收机制--GC 垃圾收集器--JVM调优-面试题

1.触发垃圾回收的条件 新生代 Eden区域满了,触发young gc (ygc)老年代区域满了,触发full gc (fgc)通过ygc后进入老年代的平均大小大于老年代的可用内存,触发full gc(fgc).程序中主动调用的System.gc()强制执行gc,是full gc,但是不必然执行。…

【考研数学】汤家凤《1800》做的慢,拖进度,怎么办?

哭了... 过来人表示深有同感!🥹 我21年一战数学83,总分没过线,22年二战143,逆袭上岸211!一战就1800660,当时刷1800的情况简直跟你一毛一样! 不过不用慌!这并不是说明咱们…

AcWing 2816. 判断子序列(双指针)

—>原题链接 思路: 1.首先定义两个指针 i 和 j 分别指向x和y的起始位置 2.开始循环遍历x和y数组,如果 x[i] y[j] 那么i,否则j,遍历到最后in那么就说明x是y的子序列 图解 上代码: #include <iostream> using namespace std;const int N 111111;int n,m,x[N],y[N]…

脱敏技术!!!

什么是数据脱敏&#xff1f;&#xff1f;&#xff1f; 数据脱敏&#xff08;Data Masking&#xff09;是一种数据安全技术&#xff0c;旨在通过预先设定的规则和算法&#xff0c;对原始数据中包含的敏感信息进行变形处理&#xff0c;使得这些信息在非生产环境&#xff08;例如…

OpenHarmony实战开发-从0到1实现购物应用页面

概述 OpenHarmony ArkUI框架提供了丰富的动画组件和接口&#xff0c;开发者可以根据实际场景和开发需求&#xff0c;选用丰富的动画组件和接口来实现不同的动画效果。 本Codelab中&#xff0c;我们会构建一个简易的购物应用。应用包含两级页面&#xff0c;分别是主页&#xf…

【正点原子FreeRTOS学习笔记】————(7)任务调度

这里写目录标题 一、开启任务调度器&#xff08;熟悉&#xff09;二、启动第一个任务&#xff08;熟悉&#xff09;2.1&#xff0c;prvStartFirstTask () /* 开启第一个任务 */2.2&#xff0c;vPortSVCHandler () /* SVC中断服务函数 */ 三、任务切换&#xff08;掌握&#xff…

【元胞自动机】MATLAB界面聚合的元胞自动机模拟完整实现运行

文末有完整代码分享链接 文件介绍 automain 为元胞自动机主函数 choosedirection 选择方向函数&#xff0c;主函数调用 judgedirection 判断位置函数&#xff0c;主函数调用 neighbor 求每个元胞的邻居函数&#xff0c;主函数调用 surfaceness 求表面粗糙度 porosity 求孔隙率…

开源AI引擎|信息抽取与文本分类项目案例:提升12345政务投诉处理效率

一、实际案例介绍 采集员案件上报流程是城市管理和问题解决的关键环节&#xff0c;涉及对案件类别的选择、案件来源的记录、详细案件描述的填写以及现场图片的上传。这一流程要求采集员准确、详细地提供案件信息&#xff0c;以便系统能够自动解析关键数据并填写相关内容&#…

Python读取PDF文字转txt,解决分栏识别问题,能读两栏

搜索了一下&#xff0c;大致有这些库能将PDF转txt 1. PyPDF/PyPDF2&#xff08;截止2024.03.28这两个已经合并成了一个&#xff09;pypdf PyPI 2. pdfplumber GitHub - jsvine/pdfplumber: Plumb a PDF for detailed information about each char, rectangle, line, et cete…

VSCode 如何同步显示网页在手机或者平板上

首先要确保 ①电脑上安装了VsCode ②VsCode安装插件LiveServer 安装成功之后 连续按住 Alt L 、Alt O 会跳转到对应的html页面上 http://127.0.0.1:5500/....... 是这个开头的 然后打开网络 如果桌面有网上邻居的可以直接点桌面的网上邻居 进来找到WLAN这个…

spark核心概念

DAG 所谓DAG就是有向无环图&#xff0c;其实就是个无环的流程&#xff0c;Spark的核心是根据RDD来实现的&#xff0c;Spark Scheduler!则为Spark核心实现的重要一环&#xff0c;其作用就是任务调度。Spark的任务调度就是如何组织任务去处理RDD中每个分区的数据&#xff0c;根据…

AI智能分析网关V4如何使用GB28181注册到EasyCVR平台?具体步骤是什么?

旭帆科技的智能分析网关V4内含近40种智能分析算法&#xff0c;包括人体、车辆、消防、环境卫生、异常检测等等&#xff0c;在消防安全、生产安全、行为检测等场景应用十分广泛。如常见的智慧工地、智慧校园、智慧景区、智慧城管等等&#xff0c;还支持抓拍、记录、告警、语音对…

JavaScript基础练习题之计算数组元素的和与平均值

一、如何使用JavaScript计算数组元素的和与平均值&#xff1f; 二、正确的源程序 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>计算数组元素的和与平均值</title></head><body><h1>计算数组元…

HarmonyOS 应用开发之AbilityStage组件容器

AbilityStage是一个 Module 级别的组件容器&#xff0c;应用的HAP在首次加载时会创建一个AbilityStage实例&#xff0c;可以对该Module进行初始化等操作。 AbilityStage与Module一一对应&#xff0c;即一个Module拥有一个AbilityStage。 DevEco Studio默认工程中未自动生成Ab…

Linux常见指令解析一

Linux常见指令解析一 常见指令1. ls 指令2.pwd 命令3.cd 命令4.touch 命令5.mkdir 命令6.rmdir指令 && rm 指令7.man 指令8.cp 指令9.cat 命令 && tac 命令10.mv 指令11.more 指令12.less 指令13.head 指令14.tail 指令15.cal 指令 常见指令 1. ls 指令 语法…

包含具有多种类型信息的3D模型

1982年&#xff0c;Gbor Bojr开始使用类似于1975年的建筑描述系统技术来开发建筑信息软件。随后&#xff0c;1984年Bojr发布了用于Apple Lisa操作系统的Graphisoft的Radar CH。该软件技术被称为ArchiCAD于1987年重新推出&#xff0c;这是第一个能够在个人计算机上运行的建筑信息…

【源码分析】一文看透集合容器

一文看透集合容器 一、Mapa. HashMapb.ConcurrentHashMapc.HashTabled. TreeMap 二、Collectiona. ListArrayListLinkedListVectorCopyOnWriteArrayList对比和自身思考思考&#xff1a;为什么都拒绝使用Vector啊&#xff1f;它线程安全诶 b. SetHashSetTreeSetCopyOnWriteArray…

2024年【烟花爆竹产品涉药】免费试题及烟花爆竹产品涉药考试技巧

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【烟花爆竹产品涉药】免费试题及烟花爆竹产品涉药考试技巧&#xff0c;包含烟花爆竹产品涉药免费试题答案和解析及烟花爆竹产品涉药考试技巧练习。安全生产模拟考试一点通结合国家烟花爆竹产品涉药考试最新大纲…

135.分发糖果

javapublic class Solution {public int candy(int[] ratings) {// 获取孩子人数int len ratings.length;// 初始化一个数组存储每个孩子的糖果数&#xff0c;默认第一个孩子有1颗糖果int[] candyVec new int[len];candyVec[0] 1;// 阶段1&#xff1a;从左到右遍历for (int …