问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

TCP三次握手原理

发布网友 发布时间:2022-09-10 04:54

我来回答

2个回答

热心网友 时间:2024-11-04 02:14

本文主要内容

1、TCP数据包格式

TCP数据包格式如下:

注意到中间还有几个标志位:

数据包格式当中,最重要的是理解序号和确认序号。TCP为什么是稳定可靠的,与序号与确认序号这套机制紧密相关,这也是TCP的精髓。

2、TCP的三次握手

众所周知,TCP协议是可靠的,而UDP协议是不可靠的。在一些场景中必须用TCP,比如说用户登录,必须给出明确答复是否登录成功等。而有些场景中,用户是否接收到数据则不那么关键,比如网络游戏当中,玩家射出一颗子弹,另外的玩家是否看到,完全取决于当前网络环境,如果网络卡顿,就会有玩家已经被射杀,但界面仍然刷新不出来的情况。这种情形适合UDP。

为了保证TCP协议可靠,在建立连接之时就要得到保证。

最初两端的TCP进程都处于CLOSED关闭状态,A主动打开连接,而B被动打开连接。(A、B关闭状态CLOSED——B收听状态LISTEN——A同步已发送状态SYN-SENT——B同步收到状态SYN-RCVD——A、B连接已建立状态ESTABLISHED)

B服务器进程就处于LISTEN(收听)状态,等待客户的连接请求。若有,则作出响应。

3、TCP的传输和确认

TCP 传输的可靠性,可以用一句话归结:每收到对方数据,就发送 ACK 进行确定,发送方发送后没有收到 ACK 就隔一段时间重发。

就是 A 向 B 发送消息(下面将 TCP 的报文直接看做是消息,消息一词跟 TCP 报文混用),B 收到消息后需要向 A 发送 ACK。这个 ACK 相当于返回结果,没有返回结果,A 就重新发送消息。

归纳起来,A 有 3 种消息需要确认。

另外 A 也可以发送 RST 消息,代表出错了。出错消息不需要确认。RST 也可以当成返回接口,替代正常的 ACK。返回 ACK,表示消息发送并处理成功,返回 RST 表示消息处理失败。因为通过网络传输,还有第三种结果,就是不确定成功失败。这样归纳起来。就有三种返回结果。

这两种具体情况,A 根本识别不了,都只能重发。

4、TCP的序号和确认序号

A 向 B 发送消息,假如同时发送 a、b、c、d 消息,因为通过网络,这些消息的顺序并非固定的。而 B 返回 ACK 结果,这样就有一个问题,这个结果到底对应了哪个消息?另外当 A 超时重发后,原来的消息延时一段时候,又重新到达了 B,这样 B 就收到两条相同的消息,那么 B 怎么确定这两条消息是相同的呢?

为了解决这个对应问题,每一条消息都需要有一个编号,返回结果也应该有一个编号。TCP 的序号可以看成是发送消息的编号,确认序号可以看成是返回结果的编号。有了编号,重复的消息才可以忽略,返回结果(ACK)才可以跟消息对应起来。

当建立连接的时候,TCP 选定一个初始序号,之后每发送一个数据包(消息),就将序号递增,保证每发送不同的数据包,数据包的序号都是不同的。TCP 是这样处理的:

SYN、FIN 也需要递增序号。不然 A 向 B 重发多个 SYN 或者 FIN, B 根本判断不了 SYN 是否相同,这样就不可以忽略重复的数据包了。

当 TCP 发送 ACK 时,相当于返回结果,需要带有确认序号,以便跟发送的消息对应起来。

当发送包编号为 a,递增长度为 len。其中 SYN 和 FIN 可以看成是递增长度为 1。这条消息可以这样表示为:

现在来回顾三次握手过程。 A 发送序列号x给 B , B 回复 A 确认号 x+ 1,同时发送序列号 y, A 接收到 B 的回复后,再回复确认号 y+1,同时发送序列号 x+1。给对方的回复一定是接收到的序号加1(或者是数据长度),这样对方才能知道我已经收到了,这样才能保证TCP是可靠的。

热心网友 时间:2024-11-04 02:14

一、TCP三次握手的过程
TCP三次握手过程涉及客户端和服务器之间的三次报文交换。以下是具体的步骤:
第一次握手:
客户端向服务器发送一个SYN报文段,并将SYN标志位设置为1。同时,客户端会随机生成一个初始序列号,并将其放在TCP首部的序列号字段中。此时,客户端的TCP连接状态变为SYN_SENT。
报文示例:客户端 -> 服务器 [SYN, seq=x]
第二次握手:
服务器收到客户端的SYN报文段后,会对其进行确认。确认的方式是在响应的报文段中设置ACK标志位为1,并将确认号字段设置为收到的序列号加1。同时,服务器也会随机生成一个自己的初始序列号,并将其放在响应报文段的序列号字段中,并发送一个SYN报文段,即SYN+ACK报文段。此时,服务器的TCP连接状态变为SYN_RCVD。
报文示例:服务器 -> 客户端 [SYN, ACK, seq=y, ack=x+1]
第三次握手:
客户端收到服务器的SYN+ACK报文段后,会对其进行确认。确认的方式是发送一个ACK报文段,将ACK标志位设置为1,并将确认号字段设置为收到的服务器序列号加1。此时,客户端的TCP连接状态变为ESTABLISHED,表示连接已经成功建立。
报文示例:客户端 -> 服务器 [ACK, seq=x+1, ack=y+1]
服务器收到客户端的ACK报文段后,其TCP连接状态也变为ESTABLISHED,此时双方可以开始传输数据。
二、TCP三次握手的原理
TCP三次握手的原理主要基于以下几个关键点:
同步序列号:通过SYN报文段,客户端和服务器能够协商并确定各自的初始序列号,这是为了确保数据传输的有序性和可靠性。
确认机制:通过ACK报文段,双方能够确认对方已经准备好接收数据,并且已经成功接收到了对方的序列号。这种确认机制是TCP可靠性保障的重要组成部分。
防止已失效的连接请求报文段突然又传送到了服务端:由于网络的不稳定性,已经失效的连接请求报文段可能会在网络中滞留并突然传送至服务端。三次握手机制能够确保服务端不会错误地接受这些失效的请求,从而避免了不必要的资源消耗和潜在的安全风险。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何分别真金和仿金首饰 怎样区分真金和仿金首饰呢 小学生新年晚会主持人的串词!!(不要太多)急 大大后天就需要了!!!_百度... 周年晚会策划公司 奥格瑞玛传送门大厅在哪 奥格瑞玛传送门大厅怎么走 锻炼颈椎的几个动作 水多久能结冰 冰能在多长时间内形成 请问水低于0度会结冰吗? 如何防止脱发严重 嘴唇上有黑印用蜜蜡和棉线去除了胡须 一文搞懂TCP的三次握手和四次挥手 我要改pp密码怎样弄才能改掉 高二下期世界地理自学预习方法 高二地理世界地理地图怎么记 高中怎样学习世界地理?现在高二了,上课听不明白 地理高二怎么学?世界地理,关于文科学习方法? PS如何给照片制作夜景效果 在广东买什么特产送给女朋友,吃的用的都可以!麻烦大家帮帮忙啊!_百 ... 微信怎么查银行卡绑定了几个 哺乳假一天2小时吗? 哺乳期假是每天一小时还是两小时 探探如何设置打招呼礼物 哺乳假每天2个小时 过年前从昆明到宜昌怎么走比较方便和划算? 昆明市离江岸小区最近的汽车票代售点 有人知道百达汇信用评估公司旗下的信用使者是干嘛的吗?看到好多人有很... 法定哺乳假每天两小时 属鸡出生年份表 几月最好 1969年属鸡几月命苦 69年属鸡人命苦月份 毛毛虫儿童摄影的服务怎么样的? 简述TCP协议的三次握手过程,以及序列号和确认号的作用 TCP协议为什么需要三次握手? pp怎么改密码 手机卡突然失效的原因 如何直接修改pp密码 pp密码和密保忘记了怎么办 用手机怎么改 pp密码 有大神用过TP-LINK的TL-EP530光猫的么 一辈子必打卡一次的国内景点 带孩子游北京,哪些景点必去? 微信群消息怎么屏蔽 如何不接群消息 如何屏蔽不接群里的消息 去4s店买车需要注意什么细节 surface go3什么时候出 形容爱看热闹的成语 什么成语表示看热闹 看上阿维塔和蔚来了,11和ES7哪个配置好,性价比高? 都是新上的中大型SUV,阿维塔11和蔚来ES7该如何选? 苹果验证失败连接服务器出现问题怎么回事 形容看热闹的成语‘