【TCP】三次握手(建立连接)

图片

前言

在网络通信的世界里,可靠传输协议(TCP)扮演着重要的角色,它保证了数据包能够按顺序、完整地从发送端传送到接收端。TCP协议中有一个至关重要的机制——三次握手。这一过程确保了两个TCP设备在开始数据传输之前建立起一个稳定的连接。

握手之前的准备工作 

在TCP协议下,客户端与服务端之间的通信前,两者都需要进行一系列的初始化工作。客户端需要配置自己的IP地址和端口号,同时获知服务器的IP地址和监听端口。服务端则需设置好自己的IP地址和端口号,并启动监听进程,以便响应客户端的连接请求。这些准备工作是后续握手流程顺利进行的基础。

图片

第一次握手:SYN

第一次握手由客户端发起,它向服务端发送一个带有SYN(同步序列编号)标志的数据包,以表示希望建立连接。这个数据包还包含一个随机的序列号X,用于后续的数据同步。此时,客户端进入SYN_SENT状态。

第二次握手:SYN-ACK

服务端收到客户端的SYN包后,会确认客户端的请求,并回送一个带有SYN和ACK(确认)标志的数据包。这个数据包不仅确认收到了客户端的请求,而且包含了服务端的初始序列号Y,同时也携带一个确认号X+1,表示已经准备好接收客户端接下来的数据。此时,服务端进入SYN_RECEIVED状态。

第三次握手:ACK

最后,客户端收到服务端的SYN-ACK包后,会发送一个仅带有ACK标志的数据包作为应答,其中的确认号为Y+1,表明已经准备好接收服务端的数据。当服务端收到这个ACK包后,双方便完成了连接的建立,进入了ESTABLISHED状态,可以开始正式的数据传输。

TCP三次握手的步骤

图片

  1. 客户端发送SYN包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认。

  2. 服务器收到SYN包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态。

  3. 客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。

完成三次握手后,客户端与服务器开始传送数据。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。

以下是一个简单的Java代码示例,使用Socket类模拟TCP三次握手(建立连接)的过程:

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;public class TcpHandshakeDemo {public static void main(String[] args) {// 服务器端try (ServerSocket serverSocket = new ServerSocket(8080)) {System.out.println("服务器端等待客户端连接...");Socket socket = serverSocket.accept(); // 等待客户端连接System.out.println("客户端已连接");} catch (IOException e) {e.printStackTrace();}// 客户端try (Socket socket = new Socket("localhost", 8080)) {System.out.println("客户端已连接到服务器");} catch (IOException e) {e.printStackTrace();}}
}

TCP为什么需要三次握手

TCP需要三次握手的主要原因是防止旧的重复连接引起连接混乱问题,以及同步初始化序列号。在网络状况比较复杂或者网络状况比较差的情况下,发送方可能会连续发送多次建立连接的请求。如果TCP握手的次数只有两次,那么接收方只能选择接受请求或者拒绝接受请求,但它并不清楚这次的请求是正常的请求,还是由于网络环境问题而导致的过期请求,如果是过期请求的话就会造成错误的连接。三次握手可以实现TCP初始化序列号的确认工作,TCP需要初始化一个序列号来保证消息的顺序。如果是两次握手则不能确认序列号是否正常,如果是四次握手的话会浪费系统的资源,因此TCP三次握手是最优的解决方案。

TCP头结构

TCP头结构是TCP数据包的重要组成部分,包含了TCP通信所需的各种信息。TCP头结构包括以下字段:

  • 序号(Sequence Number):用于标识TCP段中的字节流。

  • 确认号(Acknowledgment Number):用于确认收到对方的数据段。

  • 数据偏移(Data Offset):指示数据段中的TCP头长度。

  • 保留(Reserved):保留字段供将来使用。

  • 标志位(Flags):包括URG、ACK、PSH、RST、SYN和FIN等标志。

  • 窗口大小(Window Size):用于流量控制和拥塞控制。

  • 校验和(Checksum):用于检测数据传输过程中的错误。

  • 紧急指针(Urgent Pointer):用于指示紧急数据的位置。

  • TCP选项(TCP Options):可选字段,包括最大段大小、窗口缩放因子等。

图片

SYN的基本原理

SYN的基本原理涉及到TCP协议中的连接建立过程,即三次握手机制。在这个过程中,SYN(同步序列编号)标志位发挥着至关重要的作用。

首先,SYN标志位用于同步序号,在TCP连接建立的第一次握手中,客户端会向服务端发送一个SYN包,该包包含随机生成的序列号X,表明客户端希望开始建立连接。服务端收到后,会确认客户端的SYN(第二次握手),并回送一个SYN-ACK包,其中也包含服务端的初始序列号Y,同时携带一个确认号X+1,表示已经准备好接收客户端接下来的数据。最后,客户端发送ACK包作为应答(第三次握手),其中的确认号为Y+1,表明已经准备好接收服务端的数据。完成这三次握手后,双方便建立了连接,可以开始数据传输。

其次,SYN还与网络安全中的SYN攻击有关。SYN攻击是一种拒绝服务攻击(DoS攻击),攻击者通过发送大量的SYN包来耗尽目标服务器的资源,导致正常的服务请求无法得到响应。为了防止这种攻击,一些系统采用了SYN Cookie技术,即在收到SYN包时,服务器不立即分配资源,而是先发送一个带有特定Cookie值的SYN-ACK包。真实的客户端会回应一个ACK包,其中的确认号是Cookie值加1,这时服务器才会分配资源,从而有效抵御伪造的SYN包攻击。

总的来说,SYN标志位是TCP协议中确保数据同步和连接建立的关键要素,同时也是网络安全防护中需要特别注意的部分。通过理解SYN的工作原理,我们可以更好地把握网络通信的安全性和稳定性。

结语 

TCP三次握手是一个精心设计的机制,它不仅确保了网络连接的稳定性和可靠性,也避免了因过时或重复的连接请求而导致的资源浪费。了解三次握手的原理和TCP头的结构,有助于深入理解网络协议的工作方式,对于网络工程师而言,这是掌握网络通信基础的关键一步。

图片

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

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

相关文章

内衣洗衣机有必要买吗?最好用的迷你洗衣机推荐

随着内衣洗衣机的流行,很多小伙伴在纠结该不该入手一款内衣洗衣机,专门来洗一些贴身衣物,答案是非常有必要的,因为我们现在市面上的大型洗衣机只能做清洁,无法对我们的贴身衣物进行一个高强度的清洁,而小小…

手写分布式存储系统v0.1版本

引言 这是手写分布式存储系统v0.1版本,只有一个目标就是支持通过tcp接收数据并落地到磁盘文件(单机模式),那接下来就开始吧 设计 实现一个系统,设计是最过瘾的过程没有之一,类似你搭积木前在脑海设计构建一副大致的“雏形”&am…

力扣hot100 最小路径和 多维DP 滚动数组 一题多解

Problem: 64. 最小路径和 文章目录 思路💖 朴素版💖 空间优化版 思路 👨‍🏫 路飞 💖 朴素版 ⏰ 时间复杂度: O ( n m ) O(nm) O(nm) 🌎 空间复杂度: O ( n m ) O(nm) O(nm) class Solution {public …

查看Windows 所有账户方法

目标 了解Windows查看所有账户的方法 方法 方法1:本地和用户组 按下Win X键,选择“计算机管理”。在计算机管理界面的左侧面板中,展开“系统工具” -> “本地用户和组” -> “用户”。在右侧窗口中,查看列出的所有用户账…

数据结构+算法(第01篇):走下神坛吧!算法

作者简介:大家好,我是smart哥,前中兴通讯、美团架构师,现某互联网公司CTO 联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬 学习必须往深处挖&…

科技云报道:新趋势下,国产数据库或“春山可望”

科技云报道原创。 从540亿元到1286亿元——这是中国通信标准化协会大数据技术标准推进委员会针对中国数据库行业给出的一份预测报告。 报告指出,未来五年,中国数据库行业将从百亿级市场跨越成为千亿级市场。 最近两年,中国的数据库行业似乎…

Docker核心教程

1. 概述 官网:https://docs.docker.com/ Docker Hub 网站:https://hub.docker.com/ 容器较为官方的解释: 一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。 容器镜像是轻量的、可执行的独立…

leetcode—跳跃游戏—贪心算法

1 跳跃游戏1 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1&a…

Codeforces Round 922 (Div. 2)补题

Brick Wall(Problem - A - Codeforces) 题目大意:规定砖的大小为1*k(k>2),现在有一面n*m的砖墙,n是墙高,m是墙宽,砖在砖墙中有两种放法,水平放置和竖直放置&#xff…

注册亚马逊店铺用动态IP可以吗?

注册亚马逊店铺可以用动态IP,只要是独立且干净的网线就没问题,亚马逊规则要求一个IP地址只能出现一个亚马逊店铺,若使用不当会导致关联账户。 固定ip可以给我们的账户带来更多的安全,要知道关联问题是亚马逊上的一个大问题&#…

《动手学深度学习(PyTorch版)》笔记4.8

注:书中对代码的讲解并不详细,本文对很多细节做了详细注释。另外,书上的源代码是在Jupyter Notebook上运行的,较为分散,本文将代码集中起来,并加以完善,全部用vscode在python 3.9.18下测试通过。…

人工智能基础-Numpy.array基本操作

基本属性 查看维度 x.ndim查看维度(元组形式) x.shape元素个数 x.size数据访问 子矩阵 内容同步修改 加是copy()则不同步修改 Reshape 修改维度 参数为-1时自动识别个数 合并 np.concatenate([x, y])沿着列合并 np.co…

第十四届蓝桥杯大赛软件赛省赛(C/C++ 大学B组)题解

尝试再做一次,我记得还是有点难,我会尽量多写一点解析,尽量让基础比较弱的友友也能看懂,希望能给你带来帮助 目录 1. 日期统计 题目描述 解题思路 具体代码 2. 01 串的熵 题目描述 解题思路 具体代码 3. 冶炼金属 题目…

如何编写具有完备性的测试用例 ? 具体思路是什么 ? 全套解决方案打包呈现给你 。

设计测试用例应该算是测试人员最为主要的工作之一 ,好的测试用例往往具有覆盖性强 ,扩展性高以及复用性好等特点 。该如何设计出好的测试用例 ?是我们每一位测试人员需要重点思考的问题 ,下面是我对设计测试用例设计的思考 &#…

#RAG|NLP|Jieba|PDF2WORD# pdf转word-换行问题

文档在生成PDF时,文宁都发生了什么。本文讲解了配置对象、resources对象和content对象的作用,以及字体、宇号、坐标、文本摆放等过程。同时,还解释了为什么PDF转word或转文字都是一行一行的以及为什么页眉页脚的问题会加大识别难度。最后提到了文本的编码和PDF中缺少文档结构标…

如何输入手机验证码才能查询?确保本人查询!

易查分的手机验证码功能可以通过预留手机号,让用户查询时输入验证码,确保是本人进行查询。本次就来介绍如何开启【手机验证码功能】。 📌使用教程 01准备电子表格 在准备表格时,建立查询时,查询条件必须设置两个或者两…

ElementUI 组件:Container 布局容器实例

ElementUI安装与使用指南 Container 布局容器 点击下载learnelementuispringboot项目源码 效果图 项目里el-container-example.vue代码 <script> export default {name: el_container_example,data() {const item {date: 2024-01-31,name: 国龙,address: 上海市某区…

Mac 终端可以使用yarn,但是vscode里面报错segmentation fault

Mac 终端可以使用yarn 但是vscode里面报错segmentation fault 查阅官网https://www.yarnpkg.cn/getting-started/install 在vscode运行corepack enable即可解决该问题

网络异常案例五_SYN被丢弃

问题现象 公司同事使用的时候&#xff0c;反馈系统不稳定&#xff0c;访问的时候&#xff0c;有时候会出现白屏&#xff08;连接超时&#xff09;&#xff0c;或者系统页面点击没有响应&#xff0c;过一会之后刷新系统又可以正常展示了。之前未收到过类似反馈&#xff0c;一直…

20240131在WIN10下配置whisper

20240131在WIN10下配置whisper 2024/1/31 18:25 首先你要有一张NVIDIA的显卡&#xff0c;比如我用的PDD拼多多的二手GTX1080显卡。【并且极其可能是矿卡&#xff01;】800&#xffe5; 2、请正确安装好NVIDIA最新的545版本的驱动程序和CUDA。 2、安装Torch 3、配置whisper http…