为什么 TCP 连接的建立需要三次握手
TCP 的通讯双方需要发送 3 个包(即:三次握手)才能建立连接,本文将通过 3 副图来解释为什么需要 3 次握手才能建立连接。
TCP 连接的建立过程本质是通信双方确认自己和对方都具有通信能力的过程。TCP 通信双方都需要发送数据和接收数据,通信能力包括:客户端发送数据能力,客户端接收数据能力,服务端发送数据能力,服务端接收数据能力。完成了这些能力的确认,连接才算成功建立。
第一次握手,客户端发送 SYN 包给服务端之后。服务端收到了来自客户端的包,服务端可以确定:服务端具有接收能力,客户端具有发送能力。而客户端则什么也不能确定,不知道发送的包是否到达了服务端。
.st2 {fill:#000000;font-family:Times New Roman;font-size:9pt}
.st1 {fill:#191919;font-family:Times New Roman;font-size:12pt;font-weight:bold}
.st3 {fill:#191919;font-family:Times New Roman;font-size:12pt}
服务端客户端SYN客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端视角服务端视角
第二次握手,服务端发送 SYN/ACK 包给客户端之后。客户端知道了服务端成功接收了自己发送的 SYN 包,并且自己成功接收了来自服务端的 ACK/SYN 包,所以客户端可以确定:客户端具有发送能力,服务端具有接收能力,服务端具有发送能力,客户端具有接收能力,客户端完成了能力确认。而服务端并不知道更多的信息。
.st2 {fill:#000000;font-family:Times New Roman;font-size:9pt}
.st1 {fill:#191919;font-family:Times New Roman;font-size:12pt;font-weight:bold}
.st3 {fill:#191919;font-family:Times New Roman;font-size:12pt}
服务端客户端ACK/SYN客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端视角服务端视角
第三次握手,客户端发送 ACK 包给服务端。服务端知道了自己发送的 SYN/ACK 被客户端成功接收了,服务端可以知道更多信息:客户端具有接收能力,服务端具有发送能力。
.st2 {fill:#000000;font-family:Times New Roman;font-size:9pt}
.st1 {fill:#191919;font-family:Times New Roman;font-size:12pt;font-weight:bold}
.st3 {fill:#191919;font-family:Times New Roman;font-size:12pt}
服务端客户端ACK客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端发送能力客户端接收能力服务端发送能力服务端接收能力客户端视角服务端视角
基于 TCP 通信的双方进行握手连接的过程是从双方视角确认通信能力的过程。而通信能力的确立需要至少发送 3 个数据包,所以说 TCP 连接的建立需要三次握手。当然,在 SYN 包丢失的情况下重传机制会重新发送 SYN 包,连接过程中实际发送包的数量也有可能超过 3 个。
为什么 TCP 连接的建立需要三次握手的更多相关文章
- TCP连接的建立(三次握手和四次挥手)
写到最后发现我描述的挺水的,这个老哥的用语比较专业一点https://blog.csdn.net/qq_38950316/article/details/81087809 (老哥这篇有些许错别字 大 ...
- tcp连接过程中的三次握手和四次挥手
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手握手建立连接 @第一次握手: 建立连接是,客户端A发送SYN包到服务器B,并进入SYN_SEND状态,等待B确认. @第二次握手: 服务 ...
- [TCP/IP]TCP连接的建立和终止
TCP 是支持全双工通信的传输层协议,为了开发出更好的网络通信应用,清楚了解其中的交互过程是非常必要的. 下面用比较直白的话来描述&理解一下这个过程: TCP 连接建立:三次握手 服务器依次调 ...
- 简述TCP连接的建立与释放(三次握手、四次挥手)
在介绍TCP连接的建立与释放之前,先回顾一下相关知识. TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,H ...
- TCP连接的建立与释放(三次握手与四次挥手)
TCP连接的建立与释放(三次握手与四次挥手) TCP是面向连接的运输层协议,它提供可靠交付的.全双工的.面向字节流的点对点服务.HTTP协议便是基于TCP协议实现的.(虽然作为应用层协议,HTTP协议 ...
- 第三次作业:使用Packet Tracer分析TCP连接的建立与释放过程
0 个人信息 张樱姿 201821121038 计算1812 1 实验目的 使用路由器连接不同的网络 使用命令行操作路由器 通过抓取HTTP报文,分析TCP连接建立的过程 2 实验内容 使用Packe ...
- TCP连接的建立和终止
TCP的简要要说明 标签(空格分隔): TCP 网络编程 Linux 面试 在此输入正文 一.TCP是什么 TCP全称传输控制协议(Transmission Control Protocol).TCP ...
- 计算机网络(11)-----TCP连接的建立和释放
TCP连接的建立和释放 概述 TCP运输连接的建立和释放是每一次面向连接的通信中必不可少的过程,运输连接有三个阶段:连接建立,数据传送和连接释放. TCP连接的建立 如图所示,假定A主机是客户端程序, ...
- TCP/IP详解学习笔记(13)-- TCP连接的建立与终止
1.TCP连接的建立 设主机B运行一个服务器进程,它先发出一个被动打开命令,告诉它的TCP要准备接收客户进程的连续请求,然后服务进程就处于听的状态.不断检测是否有客户进程发起连续 ...
随机推荐
- 关于Lombok框架子类继承时EqualsAndHashCode注解的callSuper取值的思考
先看例子(原始用例来源于这篇文章): TV类 @Getter @Setter //@EqualsAndHashCode @AllArgsConstructor @NoArgsConstructor p ...
- 突破JAVA万人面试,懂多线程者得天下
突破JAVA万人面试,懂多线程者得天下 在面试中,求职者会遇到很多棘手的问题,其中关于"线程安全"."线程同步"."线程死锁"等方面的面 ...
- sql server如何把退款总金额拆分到尽量少的多个订单中
一.问题 原来有三个充值订单,现在要退款450元,如何分配才能让本次退款涉及的充值订单数量最少?具体数据参考下图: 二.解决方案 Step 1:对可退金额进行降序排列,以便优先使用可退金额比较大的订单 ...
- Linux命令-1.远程登录
原网站:http://www.runoob.com/linux/linux-remote-login.html Linux一般作为服务器使用,而服务器一般放在机房,你不可能在机房操作你的Linux服务 ...
- mini-web框架-WSGI-mini-web框架-多进程,面向对象的服务器(5.1.1)
@ 目录 1.说明 2.代码 关于作者 1.说明 使用多进程 积极主动python多进程是复制资源,线程是共享变量 所以这个的socket要关两次,因为复制文件的时候,是把文件的fd给复制过去(fil ...
- Docker 笔记学习
文章目录 概述 CentOS7 Docker 安装 启动 Docker 后台服务 镜像加速 Docker常用命令 如何创建一个镜像 存储和载入镜像 上传镜像 容器的基本操作 创建容器 终止容器 如何进 ...
- 轻松理解HTTP缓存策略
上一篇文章我写了koa-static的源码解析,其中用到了HTTP的缓存策略,给返回的静态文件设置了一些缓存的头,比如Cache-Control之类的.于是我就跟朋友讨论了一下HTTP的缓存策略: 朋 ...
- 十行 Python 代码就提取了韦小宝的身份证信息
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 记得以前有个广告词叫:"学好数理化,走遍天下都不怕",感觉应该再加一句:&quo ...
- python之解压序列并赋值给变量
N个数量的序列(可迭代对象),赋值给N个变量. 字符串: 1 #!usr/bin/env python3 2 # -*- Coding=utf-8 -*- 3 4 ''' 5 解压序列(或者任何可迭代 ...
- Ubuntu使用Nginx 部署你的静态网页
首先使用Putty 登录填写名称 unbutu 然后获取管理员权限 sudo -i 首先更新APT库sudo apt-get updatesudo apt-get upgrade 安装 git,su ...