TCP详解

news2024/12/23 14:34:11

2.1TCP

由IETF的RFC793定义的传输控制协议(Transmission Control Protocol,TCP)是一种基于字节流的传输层通信协议。在传输数据前需要在发送与接收者之间建立连接,通过相应机制保证其建立连接的可靠性。

TCP协议具备以下特性:

  • 面向连接协议
  • 多路复用
  • 全双工模式
  • 数据错误校验
  • 数据分段
  • 窗口机制
  • 可靠性机制

2.1.1 TCP协议的报文

TCP的报文格式如图2-1所示:

图2-1 TCP报文格式

 TCP的报文字段解析如下:

  • Source Port:源端口,标识哪个应用程序发送。长度为16比特。
  • Destination Port:目的端口,标识哪个应用程序接收。长度为16比特。
  • Sequence Number:序号字段。TCP链接中传输的数据流每个字节都编上一个序号。序号字段的值指的是本报文段所发送数据的第一个字节的序号。长度为32比特。
  • Acknowledgment Number:确认序列号,是期望收到对方下一个报文段数据的第1个字节的序号,即上次已成功接收到的数据段的最后一个字节数据的序号加1。只有Ack标识为1,此字段有效。长度为32比特。
  • Header Length:头部长度,指出TCP报文头部长度,以32比特(4字节)为计算单位。若无选项内容,则该字段为5,即头部为20字节。
  • Reserved:保留,必须填0。长度为6比特。
  • Control bits:控制位,包含FIN、ACK、SYN等标志位,代表不同状态下的TCP数据段。
  • Window:窗口TCP的流量控制,这个值表明当前接收端可接受的最大的数据总数(以字节为单位)。窗口最大为65535字节。长度为16比特。
  • Checksum:校验字段,是一个强制性的字段,由发端计算和存储,并由收端进行验证。在计算检验和时,要包括TCP头部和TCP数据,同时在TCP报文段的前面加上12字节的伪头部。长度为16比特。
  • Urgent:紧急指针,只有当URG标志置1时紧急指针才有效。TCP的紧急方式是发送端向另一端发送紧急数据的一种方式。紧急指针指出在本报文段中紧急数据共有多少个字节(紧急数据放在本报文段数据的最前面)。长度为16比特。
  • Options:选项字段(可选),长度为0-40字节

在文章最后加作者VX:可以免费领取以下资料

2.1.2 TCP会话的建立和终止

  1. TCP的建立

任何基于TCP的应用,在发送数据之前,都需要由TCP进行“三次握手”建立连接。三次握手如图2-2所示:

图2-2 TCP三次握手

TCP连接建立的详细过程如下:

  1. 由TCP连接发起方(图中PC1),发送第一个SYN位置1的TCP报文。初始序列号a为一个随机生成的数字,因为没收到过来自PC2的任何报文,所以确认序列号为0 ;
  2. 接收方(图中PC2)接收到合法的SYN报文之后,回复一个SYN和ACK置1的TCP报文。初始序列号b为一个随机生成的数字,同时因为此报文是回复给PC1的报文,所以确认序列号为a+1;
  3. PC1接收到PC2发送的SYN和ACK置位的TCP报文后,回复一个ACK置位的报文,此时序列号为a+1,确认序列号为b+1。PC2收到之后,TCP双向连接建立。

  1. TCP的序列号与确认序列号

TCP使用序列号和确认序列号字段实现数据的可靠和有序传输,如图2-3所示

                                                      图2-3 TCP的序列号与确认序列号

假设PC1要给PC2发送一段数据,传输过程如下:

  1. PC1将全部待TCP发送的数据按照字节为单位编上号。假设第一个字节的编号为“a+1”,第二个字节的序号为“a+2”,依次类推。
  2. PC1会把每一段数据的第一个字节的编号作为序列号(Sequence  number),然后将TCP报文发送出去。
  3. PC2在收到PC1发送来的TCP报文后,需要给予确认同时请求下一段数据,如何确定下一段数据呢?序列号( a+1 )+载荷长度=下一段数据的第一个字节的序号(a+1+12)
  4. PC1在收到PC2发送的TCP报文之后,发现确认序列号为“a+1+12” ,说明“a+1”到“a+12”这一段的数据已经被接受,需要从“a+1+12”开始发送。

在文章最后加作者VX:可以免费领取以下资料

  1. TCP的窗口滑动机制

TCP通过滑动窗口机制来控制数据的传输速率,如图2-4所示:

                                                      图2-4 TCP窗口滑动机制

TCP通过滑动窗口机制来控制数据的传输速率流程如下:

    1. 在TCP三次握手建立连接时,双方都会通过Window字段告诉对方本端最大能够接受的字节数(也就是缓冲区大小)。
    2. 连接建立成功之后,发送方会根据接受方宣告的Window大小发送相应字节数的数据。
    3. 接受方接受到数据之后会放在缓冲区内,等待上层应用来取走缓冲的数据。若数据被上层取走,则相应的缓冲空间将被释放。
    4. 接收方根据自身的缓存空间大小通告当前的可以接受的数据大小( Window )。
    5. 发送方根据接收方当前的Window大小发送相应数量的数据。
  1. TCP的关闭

当数据传输完成,TCP需要通过“四次挥手”机制断开TCP连接,释放系统资源,TCP的四次挥手如图2-5所示:

                                                        图2-5  TCP的四次挥手

TCP支持全双工模式传输数据,这意味着同一时刻两个方向都可以进行数据的传输。在传输数据之前,TCP通过三次握手建立的实际上是两个方向的连接,因此在传输完毕后,两个方向的连接必须都关闭。流程如下:

  1. 由PC1发出一个FIN字段置”1 ”的不带数据的TCP段;
  2. PC2收到PC1发来的FIN置位的TCP报文后,会回复一个ACK置位的TCP报文。
  3. 若PC2也没有需要发送的数据,则直接发送FIN置位的TCP报文。假设此时PC2还有数据要发送,那么当PC2发送完这些数据之后会发送一个FIN置位的TCP报文去关闭连接。
  4. PC1收到FIN置位的TCP报文,回复ACK报文,TCP双向连接断开。

在文章最后加作者VX:可以免费领取以下资料

  1. 应用端口

在描述TCP报文结构的时候,我们提到了源目端口和目的端口;这里所提到的端口是区别于物理端口的一种抽象端口,被称为”应用端口(Application Port)”。应用端口的作用是标识所载荷数据对应了哪个应用层模块。应用端口分为两类:知名端口(范围0-1023)和非知名端口(范围1024-6553);所谓知名端口就是已经分配给一些特定应用层模块,部分TCP知名端口见表2-1

表2-1 知名TCP端口号示例

本文出自作者的《HCIA Datacom学习指南》
https://item.jd.com/14032255.html

标题

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

信息化工作人员必备常识8——DNS缓存【查看缓存与清理dns缓存】

信息化工作人员必备常识8——DNS缓存【查看缓存与清理dns缓存】 前言信息化人员必备常识回顾(不想看回顾的直接往下滑哦~)pingtelnetnslookup命令ipconfig命令域名DNS DNS缓存主机上解析DNS的优先级 清理DNS缓存查看当前电脑有哪些DNS缓存 前言 信息化相…

【超详细保姆教程】手把手教你如何修改el-tab的默认样式,把el-tab的label变成我们想要的

目录 前言实现效果官方的样式修改后的结果 步骤1、去掉分割线和下划线去掉前去掉后 2、设置插槽,自定义label的内容,加上border等结果 3、为选中的tab修改高亮结果 前言 做前端实习也有一段时间了,昨天晚上在学校上项目工程管理这门课的时候…

Edge浏览器下载文件提示 “无法安全下载” 的解决方法

提示如下: 虽然我们可以通过 "保留" 进行下载,但是每次需要选择,比较麻烦 解决方法: 1、打开注册表 HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft 2、创建2个 "项" Edge\InsecureContentAllowedForUrls…

数据链路层(计算机网络,待完善)

0、前言 本文大多数图片都来自于 B站UP主:湖科大教书匠 的教学视频,对高军老师及其团队制作出这么优质的课程表示感谢。文章增加了部分个人理解,内容并不是对视频的静态化翻译。 1、概述 1.1、数据链路层在计算机网络体系中的位置 1.2、对…

手机照片删除了怎么恢复?教你3个招!

我们使用手机的时间在变长,手机里储存的数据也会越来越多,所以一旦手机卡顿,我们往往会选择清理垃圾的方式来释放内存。如果不小心把照片清理了怎么办呢?手机照片删除了怎么恢复呢?别着急,这个问题小编会&a…

泰坦尼克号乘客生存预测 中

背景描述 泰坦尼克号轮船的沉没是历史上最为人熟知的海难事件之一。1912年4月15日,在她的处女航中,泰坦尼克号在与冰山相撞后沉没,在船上的 2224 名乘客和机组人员中,共造成 1502 人死亡。这场耸人听闻的悲剧震惊了国际社会&…

js 连接快手打印组件并实现打印

快手打印组件文档: https://docs.qingque.cn/d/home/eZQA41D2h9LGUFaD26bC07e–?identityIdEmukFTnlEF#sectionh.kgnfm4rjc89m 快手打印组件下载: https://docs.qingque.cn/d/home/eZQBMOMSj4mJ5D7Xplofq-p4Y?identityIdEmukFTnlEF 快手打印数据格式&…

Android 13 Layer数据结构

Layer::State state的定义 State mDrawingState; 一个mDrawingState的变量struct State {Geometry active_legacy;Geometry requested_legacy;int32_t z;ui::LayerStack layerStack;#endifuint32_t flags;uint8_t reserved[2];int32_t sequence; // changes when visible regi…

opencv图片绘制图形-------c++

绘制图形 #include <opencv2/opencv.hpp> #include <opencv2/core.hpp> #include <filesystem>bool opencvTool::drawPolygon(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xf…

QT从入门到实战x篇_22_番外1_Qt事件系统

文章目录 1. Qt事件系统简介1.1 事件的来源和传递1.2 事件循环和事件分发1.2.1 QT消息/事件循环机制1.2.1.1 机制解释1.2.1.2 两个问题 1.2.2 事件分发 2. 事件过滤基础2.1 什么是事件过滤器&#xff08;Event Filter&#xff09;&#xff1f;2.2 如何安装事件过滤器 3. 事件过…

深入探讨回流焊技术:电子制造业的核心工艺

在现代电子制造领域&#xff0c;回流焊技术被广泛认为是实现高效率和高质量电子组件装配的关键工艺之一。本文将针对回流焊的基本原理、设备构成、过程细节以及过程优化进行全面解析&#xff0c;为电子制造业的技术人员提供实用的参考和指导。 1. 回流焊基本原理解析 回流焊主…

【Redis 开发】(长篇学习)掌握Redis的用法,各种客户端下的操作

Redis 前言RedisRedis的安装Redis启动Redis客户端 Redis常见命令Redis的java客户端jedis学习简单的jedis 入门流程Jedis连接池 SpringDataRedisSpringDataRedis快速入门 前言 我们在作者之前的文章: 快速掌握Redis安装与基本语法的基础上进行系统的学习&#xff0c;学习自黑马…

Pytorch 之torch.nn初探 池化--Pooling Layers

任务描述 本关任务&#xff1a;本关提供了一个Variable 类型的变量x&#xff0c;要求按照条件创建一个Conv2d变量conv&#xff0c;一个MaxPool2d变量pool&#xff0c;对x应用卷积和最大池化操作并赋值给变量outpout_pool&#xff0c;并输出outpout_pool 的大小。 相关知识 P…

k8s日常动手实践 ~~ pod访问 pod请求 k8s api ~ 含新版带curl的busybox镜像

前言&#xff1a; 可以使用 Kubernetes API 获取集群信息。使用 Service Account&#xff08;SA&#xff09;进行身份验证&#xff0c;可以以安全的方式访问 Kubernetes API&#xff0c;而无需在 Pod 中使用明文凭据。 以下是一个使用 Service Account 访问 Kubernetes API 获…

XV6源码阅读——进程地址空间

文章目录 前言页表实际情况 前言 一个本硕双非的小菜鸡&#xff0c;备战24年秋招。打算尝试6.S081&#xff0c;将它的Lab逐一实现&#xff0c;并记录期间心酸历程。 代码下载 官方网站&#xff1a;6.S081官方网站 页表 每个进程都有一个单独的页表&#xff0c;当xv6在进程之…

数据库变更时,OceanBase如何自动生成回滚 SQL

背景 在开发中&#xff0c;数据的变更与维护工作一般较频繁。当我们执行数据库的DML操作时&#xff0c;必须谨慎考虑变更对数据可能产生的后果&#xff0c;以及变更是否能够顺利执行。若出现意外数据丢失、操作失误或语法错误等情况&#xff0c;我们必须迅速将数据库恢复到变更…

2024王鹍申论重难点:材料的概括与处理

2024王鹍申论重难点&#xff1a;材料的概括与处理&#xff0c;是备考公务员申论考试的关键一环。王鹍老师以其深厚的理论功底和丰富的实践经验&#xff0c;深入剖析了申论材料的特点和概括方法&#xff0c;同时传授了有效的材料处理技巧。通过王鹍老师的讲解&#xff0c;考生们…

Winseeing汇信外贸软件行业版,助力面辅料外贸公司实现降本增效

面辅料外贸出口&#xff0c;一直是国民经济发展中的重要组成部分。在当前全球贸易环境动荡不安的背景下&#xff0c;面辅料外贸出口面临着诸多挑战和机遇。亚洲是我面料出口的主要市场&#xff0c;据海关数据统计显示&#xff0c;2024年1-2月我对亚洲国家累计出口面料69.3亿美元…

leetcode多个测试用例之间相互影响导致提交失败

背景 在做一道easy题&#xff0c;二叉树的中序遍历&#xff0c;我提交的代码如下 from typing import (Optional,List )# Definition for a binary tree node. class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right right…

利用FCL实现更加精准的碰撞检测

一&#xff0c;需求 利用OSG结合FCL实现实现精准的碰撞检测。 二&#xff0c;效果 看这里 利用FCL实现更加精准的碰撞检测 – Qt hello 三&#xff0c;分析 我们看如下这张图&#xff0c;碰撞的逻辑就是&#xff0c;在一个三维场景中&#xff0c;构造一个实体&#xff0c;…