IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> TCP的三次握手和四次挥手 -> 正文阅读

[网络协议]TCP的三次握手和四次挥手

TCP的三次握手和四次挥手

一、问题引入

还记得上次面试,被问到这个问题。尴尬的是早就忘得七七八八了,当时只是为了准备考试背的,所以很显然没回答出来。恰好面试的人又问到了这个问题,所以就像仔细写写。

面试官:“你知道TCP协议吗?”

我:“学过”

面试官:“那你说说TCP的四次握手”

我:“???”

我也是比较纳闷的,怎么就成了四次握手。

我:“不是三次握手吗?”

面试官:“不不不,是四次握手,来,这是我前两天上网上看的,来,你看看”

好家伙,这货原来也是半吊子,还是网上搜的文章。

二、概念描述

在这里插入图片描述

TCP是属于网络分层中的传输层,有的也叫做运输层。有的书上也会写OSI七层协议。这里为了做简单描述,就先分为四层。

三、TCP三次握手简述

1、为什么要进行三次握手

三次握手的目的是为了能够建立可靠的通信通道。通俗的讲,就是A和B现在要进行通话,但是通话之前得确认身份,确认过后才能进行数据传输。说到通讯,简单来说就是数据的发送和接收,而三次握手最主要的目的就是双方确认自己和对方的发送和接收是正常的。

A:“0101,收到请回答”

B:“01收到,01收到。02输入暗号”

A:“天王盖地虎”

B:“宝塔镇河妖”

A:“Hello World”

2、建立一个TCP连接"三次握手",缺一不可

  • 一次握手:客户端发送带有 SYN(SEQ=x) 标志的数据包 -> 服务端,然后客户端进入 SYN_SEND 状态,等待服务器的确认;
  • 二次握手:服务端发送带有 SYN+ACK(SEQ=y,ACK=x+1) 标志的数据包 –> 客户端,然后服务端进入 SYN_RECV 状态
  • 三次握手:客户端发送带有带有 ACK(ACK=y+1) 标志的数据包 –> 服务端,然后客户端和服务器端都进入ESTABLISHED 状态,完成TCP三次握手。

建立三次握手之后,客户端和服务端就可以传输数据了

在这里插入图片描述

问:第二次握手传回了ACK,为什么还要传回SYN

接收端传回ACK是为了告诉发送端,我确实是接收到了你所发送的信号了,说明单向的通讯是正常的。好比,前面的例子。B确认了A是要交接的人,butA不知道B是不是正确的。

而回传SYN则是为了建立并确认两端都能够正常通讯。

四、断开连接的四次挥手

1、why进行四次挥手

举个栗子!

A和B进行通话,通话即将结束的时候

1、第一次挥手:A:“我没啥可说的了”

2、第二次挥手:B:“好的,我知道了” but B还有话要交代,A为了顾及情面,不能单方面挂断电话,所以继续通话

3、第三次挥手:于是B又说了半天,然后B:“我说完了”

4、第四次挥手:A:“好的,我知道了”

这样才算通话完毕

TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了 TCP 连接。
在这里插入图片描述

问:为什么不能把发送的ACK和FIN合并起来,变成三次挥手

因为服务器收到客户端断开连接的请求时,可能还有一些数据没有发完,这时先回复 ACK,表示接收到了断开连接的请求。等到数据发完之后再发 FIN,断开服务器到客户端的数据传送。

如果第二次挥手时,服务端的ACK没有到达客户端会怎么样

客户端没有收到 ACK 确认,会重新发送 FIN 请求。

文章相关参考:《计算机网络(第 7 版)》

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-09-13 11:52:32  更:2022-09-13 11:56:00 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 11:12:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码