【项目 计网6】 4.17 TCP三次握手 4.18滑动窗口 4.19TCP四次挥手

文章目录

    • 4.17 TCP三次握手
    • 4.18滑动窗口
    • 4.19TCP四次挥手


4.17 TCP三次握手

TCP 是一种面向连接的单播协议,在发送数据前,通信双方必须在彼此间建立一条连接。所谓的“连接”,其实是客户端和服务器的内存里保存的一份关于对方的信息,如 IP 地址、端口号等。

TCP 可以看成是一种字节流,它会处理 IP 层或以下的层的丢包、重复以及错误问题。在连接的建立过程中,双方需要交换一些连接的参数。这些参数可以放在 TCP 头部。

TCP 提供了一种可靠、面向连接、字节流、传输层的服务,采用三次握手建立一个连接。采用四次挥手来关闭一个连接。
在这里插入图片描述

  • 16 位端口号(port number):告知主机报文段是来自哪里(源端口)以及传给哪个上层协议或应用程序(目的端口)的。进行 TCP 通信时,客户端通常使用系统自动选择的临时端口号。
  • 32 位序号(sequence number):一次 TCP 通信(从 TCP 连接建立到断开)过程中某一个传输方向上的字节流的每个字节的编号。假设主机 A 和主机 B 进行 TCP 通信,A 发送给 B 的第一个TCP 报文段中,序号值被系统初始化为某个随机值 ISN(Initial Sequence Number,初始序号值)。那么在该传输方向上(从 A 到 B),后续的 TCP 报文段中序号值将被系统设置成 ISN 加上该报文段所携带数据的第一个字节在整个字节流中的偏移。例如,某个 TCP 报文段传送的数据是字节流中的第 1025 ~ 2048 字节,那么该报文段的序号值就是 ISN + 1025。另外一个传输方向(从B 到 A)的 TCP 报文段的序号值也具有相同的含义。
  • 32 位确认号(acknowledgement number):用作对另一方发送来的 TCP 报文段的响应。其值是收到的 TCP 报文段的序号值 + 标志位长度(SYN,FIN) + 数据长度 。假设主机 A 和主机 B 进行TCP 通信,那么 A 发送出的 TCP 报文段不仅携带自己的序号,而且包含对 B 发送来的 TCP 报文段的确认号。反之,B 发送出的 TCP 报文段也同样携带自己的序号和对 A 发送来的报文段的确认序号。
  • 4 位头部长度(head length):标识该 TCP 头部有多少个 32 bit(4 字节)。因为 4 位最大能表示15,所以 TCP 头部最长是60 字节。
  • 6 位标志位包含如下几项:
    URG 标志,表示紧急指针(urgent pointer)是否有效。
    ACK 标志表示确认号是否有效。我们称携带 ACK 标志的 TCP 报文段为确认报文段。(Acknowledge character)
    PSH 标志,提示接收端应用程序应该立即从 TCP 接收缓冲区中读走数据,为接收后续数据腾出空间(如果应用程序不将接收到的数据读走,它们就会一直停留在 TCP 接收缓冲区中)。
    RST 标志,表示要求对方重新建立连接。我们称携带 RST 标志的 TCP 报文段为复位报文段。
    SYN 标志表示请求建立一个连接。我们称携带 SYN 标志的 TCP 报文段为同步报文段。(Synchronize Sequence Numbers)
    FIN 标志表示通知对方本端要关闭连接了。我们称携带 FIN 标志的 TCP 报文段为结束报文段。(Finished)
    16 位窗口大小(window size):是 TCP 流量控制的一个手段。这里说的窗口,指的是接收通告窗口(Receiver Window,RWND)。它告诉对方本端的 TCP 接收缓冲区还能容纳多少字节的数据,这样对方就可以控制发送数据的速度。
    16 位校验和(TCP checksum):由发送端填充,接收端对 TCP 报文段执行 CRC 算法以校验TCP 报文段在传输过程中是否损坏。注意,这个校验不仅包括 TCP 头部,也包括数据部分。这也是 TCP 可靠传输的一个重要保障。
    16 位紧急指针(urgent pointer):是一个正的偏移量。它和序号字段的值相加表示最后一个紧急数据的下一个字节的序号。因此,确切地说,这个字段是紧急指针相对当前序号的偏移,不妨称之为紧急偏移。TCP 的紧急指针是发送端向接收端发送紧急数据的方法。

时序图
在这里插入图片描述
三次握手的目的是保证双方互相之间建立了连接。
双方都要确认四个信息:自己的首发和对方的收发。
三次握手发生在客户端连接的时候,当调用connect(),底层会通过TCP协议进行三次握手。
第一次握手:
1、客户端将SYN标志位置为1
2、生成一个随机的32位的序号seq=J,这个序号后边是可以携带数据(数据的大小)
第二次握手:
1、服务端接收客户端的连接:ACK=1
2、服务端会发出一个确认序号ack=客户端的序号+数据长度+SYN/FIN(按一个字节算)
3、服务端会向客户端发起连接请求:SYN=1
4、服务端会生成一个随机序号:seq=K
第三次握手:
1、客户端应答服务器的连接请求:ACK=1
2、客户端回复收到了客户端的数据:ack=服务端的序号+数据长度+SYN/FIN(按一个字节算)

前两次握手是带不了数据的,最后一次握手其实是可以携带数据的。

在这里插入图片描述

seq:sequence 序号
sseq:server sequence
cseq:client sequence
ack:acknowledge 确认号
只有当接收到报文段里面的SYN或者FIN置1的时候,确认方Ack=发起方Req+1
在初始三次握手的时候cseq和sseq都是按照一定规律的随机数。

以第一次发送数据为例:
此时的cseq = 上一轮的sack 也就是1001,(100)表示这一次要发送100字节。
服务器收到以后,就返回一个sack = 上一个cseq+数据大小 = 1001+100 = 1101。
每一个数据包都会被分配一个序号,这样32位序号和32位确认号就保证了数据报的顺序和完整性。

4.18滑动窗口

滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包。接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。
滑动窗口(滑动窗口)是一种流量控制技术.早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据.由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题.滑动窗口协议是用来改善吞吐量的一种技术,即容许发送方在接收任何应答之前传送附加的包.(接收方告诉发送方在某一时刻能送多少包(称窗口尺寸)。

TCP中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为0时,发送方一般不能再发送数据报。
Tcp中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据.当滑动窗口为0时,发送方一般不能再发送数据报.

滑动窗口是TCP中实现诸如ack确认、流量控制、拥塞控制的承载结构.

窗口理解为缓冲区的大小
滑动窗口的大小会随着发送数据和接收数据而变化。
通信双方都有发送缓冲区和接收数据的缓冲区
服务器:
发送缓冲区(发送缓冲区的窗口)
接收缓冲区(接收缓冲区的窗口)
客户端
发送缓冲区(发送缓冲区的窗口)
接收缓冲区(接收缓冲区的窗口)
在这里插入图片描述
上图中:
发送方的缓冲区:
白色格子:空闲的空间
灰色格子:数据已经被发送出去,但是还没有被接收
紫色格子:还没有发送出去的数据

接收方的缓冲区:
白色格子:空闲的空间
紫色格子:已经接收到的数据

在这里插入图片描述
MSS:Maxmiun segment size:一条数据的最大数据量
win:滑动窗口大小(window)
1、第一次握手,客户端向服务端发起连接,客户端的滑动窗口是4096,一次发送的最大数据量是1460
2、第二次握手,服务端接收连接情况,告诉客户端服务器窗口大小是6144,一次发送的最大数据量是024
3、第三次握手
4、4-9连续给服务器发送了6K的数据,每次发送1K
5、第10次,服务端告诉客户端:发送的6K数据已经收到,存储在缓冲区,缓冲区已经处理了2K,窗口大小是2K
6、第11次,服务端告诉客户端:发送的6K数据已经收到,存储在缓冲区,缓冲区已经处理了4K,窗口大小是4K
7、第12次,客户端给服务端发送了1K的数据
8、第一次挥手:第13次,客户端主动请求和服务端断开连接,并且给服务器发送了1K的数据
9、第二次挥手:第14次,服务端回复ACK:8194(7169+1024+1 这个1表示收到了客户端发来的FIN),同意断开连接的请求,告诉客户端已经接收到方才发送的2K数据,滑动窗口2K
10、第15、16次,通知客户端滑动窗口的大小
11、第17次:第三次挥手,服务端向客户端发送FIN,请求断开连接
12、第18从,第四次挥手,客户端同意了服务端的断开请求

4.19TCP四次挥手

四次挥手,在程序中,当调用close()会使用TCP协议进行四次挥手。
客户端和服务端都可以主动发起断开连接,谁先调用close()谁就发起。
因为在TCP连接的时候,采用三次握手建立的连接是双向的,在断开的时候需要双向断开。
在这里插入图片描述

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

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

相关文章

线性代数的学习和整理7:各种特殊效果矩阵汇总

目录 1 矩阵 1.1 1维的矩阵 1.2 2维的矩阵 1.3 没有3维的矩阵---3维的是3阶张量 1.4 下面本文总结的都是各种特殊效果矩阵特例 2 方阵: 正方形矩阵 3 单位矩阵 3.1 单位矩阵的定义 3.2 单位矩阵的特性 3.3 为什么单位矩阵I是 [1,0;0,1] 而不是[0,1;1,0] 或[1,1;1,1]…

docker基于已有容器和通过Dockerfile进行制作镜像配置介绍

目录 一.制作镜像的两种方式 1.在已有容器中更新并提交这个镜像 2.使用Dockerfile来制作 二.基于容器制作镜像 1.格式 (1)主要格式 (2)可选参数 2.案例 基于容器创建镜像设置标签并进行验证是否可用 (1&…

vue若依导出word文件,简单的实现

首先前端导包,注意exportDocx的导包位置要修改成你自己的 import {exportDocx} from /utils/docUtil/docutil.js; import {addDays} from date-fns; import {listGongyi} from "/api/system/detail";然后新建一个测试按钮 <el-col :span"1.5"><…

守护进程(精灵进程)

目录 前言 1.如何理解前台进程和后台进程 2.守护进程的概念 3.为什么会存在守护进程 4.如何实现守护进程 5.测试 总结 前言 今天我们要介绍的是关于守护进程如何实现&#xff0c;可能有小伙伴第一次听到守护进程这个概念&#xff0c;感觉很懵&#xff0c;知道进程的概念&…

无分布式锁的ID生成

起因 TEAM GARDEN 本来ID是自增的&#xff0c;后面发现自增ID比较麻烦&#xff0c;有问题&#xff1a; 不可控的间隔&#xff1a; 如果你在插入数据时&#xff0c;中途删除了一些行&#xff0c;导致自增的ID出现间隔&#xff0c;那么新插入的行会填充这些间隔&#xff0c;可能…

17.3 【Linux】systemctl 针对 service 类型的配置文件

17.3.1 systemctl 配置文件相关目录简介 服务的管理是通过 systemd&#xff0c;而 systemd 的配置文件大部分放置于/usr/lib/systemd/system/ 目录内。但是 Red Hat 官方文件指出&#xff0c; 该目录的文件主要是原本软件所提供的设置&#xff0c;建议不要修改&#xff01;而要…

C++信息学奥赛1138:将字符串中的小写字母转换成大写字母

#include<bits/stdc.h> using namespace std; int main() {string arr;// 输入一行字符串getline(cin, arr);for(int i0;i<arr.length();i){if(arr[i]>97 and arr[i]<122){char aarr[i]-32; // 将小写字母转换为大写字母cout<<a; // 输出转换后的字符}els…

linux+c+qt杂记

虚拟机网络选择&#xff1b; 桥接模式&#xff1a;设置window宿主机的IP/dns,把虚拟机设置为桥接即可。 切换到终端&#xff1a;我的是 ctrlaltFnF1&#xff1f; 问题解决&#xff1a; Ubuntu系统下载&#xff08;清华大学开源软件镜像站&#xff09;&#xff08;ubuntu-20.…

vue问题相关记录

1. vue的 nextTick的原理 首先vue实现响应式并不是数据发生变化后dom立即更新&#xff0c;而是按照一定的策略 异步执行dom更新的。 vue在修改数据后&#xff0c;试图不会立即进行更新&#xff0c;而是要等同一事件循环机制内所有数据变化完成之后&#xff0c;在统一更新 next…

使用代理突破浏览器IP限制

一、实验目的: 主要时了解代理服务器的概念&#xff0c;同时如何突破浏览器IP限制 二、预备知识&#xff1a; 代理服务器英文全称是Proxy Server&#xff0c;其功能就是代理网络用户去取得网络信息。形象的说&#xff1a;它是网络信息的中转站&#xff0c;特别是它具有一个cac…

通过终端命令实现本地文件与远程Git仓库的上传与拉取!

上传 要将本地文件上传到Git仓库&#xff0c;需要遵循以下步骤&#xff1a; 1. **初始化仓库&#xff08;如果尚未初始化&#xff09;&#xff1a;** 导航到包含你的项目文件的文件夹&#xff0c;打开命令行(windows)或终端(git) git终端下载&#xff1a;Git的下载与安装教…

【Unity学习笔记】DOTween(1)基础介绍

本文中大部分内容学习来自DOTween官方文档 文章目录 什么是DOTween&#xff1f;DOSetOnTweenerSequenceTweenNested tween 初始化使用方式 什么是DOTween&#xff1f; DOTween是一个动画插件&#xff0c;Tween是补间的意思。这个插件以下简称DOT&#xff0c;DOT很方便使用&…

浅谈容器网络

1.什么是容器网络 容器网络是一种新兴的应用程序沙箱机制&#xff0c;用于家庭桌面和网络规模的 企业网络 解决方案&#xff0c;其概念与虚拟机类似。容器内部与主机和所有其他容器隔离的是一个功能齐全的 Linux 环境&#xff0c;具有自己的用户、文件系统、进程和网络堆栈。容…

标题:探索对称二叉树的奥秘

二叉树 题目连接 在计算机科学领域&#xff0c;二叉树是一种常见的数据结构&#xff0c;其灵活性和广泛的应用使得研究不断深入。其中&#xff0c;LeetCode 题目 "101. 对称二叉树" 提供了一个非常有趣且具有挑战性的问题&#xff0c;涉及到二叉树的对称性判断。通…

汽车制造业外发文件时 如何阻断泄密风险?

汽车制造业是我国国民经济发展的支柱产业之一&#xff0c;具有产业链长、关联度高、就业面广、消费拉动大等特性。汽车制造行业景气度与宏观经济、居民收入水平和固定资产投资密切相关。 汽车制造业产业链长&#xff0c;关联度高&#xff0c;汽车制造上游行业主要为钢铁、化工…

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书&#xff1a;lighthttpd 配置文件位置&#xff1a;/opt/vmware/etc/lighttpd/lighttpd.conf &#xff08;配置文件的最底部 G快速来到底部&#xff09; 方案一&#xff1a;阿里云申请免费的证书 这里公司内网环境没有配置域名&#xff0c;可以创建一个临时域名&…

MySQL 触发器

目录 一、触发器概述 二、触发器操作 1、创建触发器 2、查看触发器 3、删除触发器 三、触发器应用 一、触发器概述 MySQL的触发器和存储过程一样&#xff0c;都是嵌入到MySQL的一段程序。触发器是由时间来触发某个操作&#xff0c;这些时间包括INSERT、UPDATE和DELETE语…

IDEA启动Tomcat两个端口的方式 使用nginx进行反向代理 JMeter测试分布式情况下synchronized锁失效

目录 引出IDEA启动Tomcat两个端口的方式1.编辑配置2.添加新的端口-Dserver.port80833.service里面管理4.启动后进行测试 使用nginx进行反向代理反向代理多个端口运行日志查看启动关闭重启 分布式情况下synchronized失效synchronized锁代码启动tomcat两个端口nginx反向代理JMete…

木叶飞舞之【机器人ROS2】篇章_第二节、turtlebot3安装

没有真实小车的情况下&#xff0c;利用gazebo的仿真&#xff0c;操作小乌龟来学习ros2。废话不多说&#xff0c;直接上命令。 Install Gazebo sudo apt install ros-humble-gazebo-*Install Cartographer 假如前一节未安装源码版本的cartographer&#xff0c;那就安装apt版本…

5.8 汇编语言:汇编高效除法运算

通常情况下计算除法会使用div/idiv这两条指令&#xff0c;该指令分别用于计算无符号和有符号除法运算&#xff0c;但除法运算所需要耗费的时间非常多&#xff0c;大概需要比乘法运算多消耗10倍的CPU时钟&#xff0c;在Debug模式下&#xff0c;除法运算不会被优化&#xff0c;但…