为什么TCP是三次握手

TCP 三次握手

首先简单介绍一下TCP三次握手 
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器 进入SYN_RECV状态; 
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入 ESTABLISHED状态,完成三次握手。 
通过这样的三次握手,客户端与服务端建立起可靠的双工的连接,开始传送数据。 
三次握手的最主要目的是保证连接是双工的,可靠更多的是通过重传机制来保证的。 


TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:
1. 客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。
2. 服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。
3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。
TCP 使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收
TCP Client
Flags
TCP Server
1 Send SYN (seq=x)
----SYN--->
SYN Received
2 SYN/ACK Received 
<---SYN/ACK----
Send SYN (seq=y), ACK (x+1) 
3 Send ACK (y+1)
----ACK--->
ACK Received, Connection Established 
w: ISN (Initial Sequence Number) of the Client
x: ISN of the Server

1. TCP的三次握手最主要是防止已过期的连接再次传到被连接的主机。

如果采用两次的话,会出现下面这种情况。
比如是A机要连到B机,结果发送的连接信息由于某种原因没有到达B机;
于是,A机又发了一次,结果这次B收到了,于是就发信息回来,两机就连接。
传完东西后,断开。

结果这时候,原先没有到达的连接信息突然又传到了B机,于是B机发信息给A,然后B机就以为和A连上

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

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

相关文章

线程安全

package com.ajax; //线程安全 public class Example07 {public static void main(String[] args){SaleThread saleThreadnew SaleThread();new Thread(saleThread,"线程一").start();new Thread(saleThread,"线程二").start();new Thread(saleThread,&quo…

CDH 配置YARN动态资源池的计划模式,根据时间划分资源,不同时间不同队列使用不同资源

公平调度配置可参考&#xff1a;http://datamining.blog.csdn.net/article/details/94554469 目录 计划模式设置 队列资源抢占分配 计划模式设置 1.创建计划规则 2.设置白天配置&#xff0c;可以根据业务选择具体配置计划&#xff0c;调整资源&#xff0c;选择每天&#xff…

java集合类总结

Collection&#xff1a;单列集合类的跟接口&#xff0c;用于存储一系列符合某种规则的元素&#xff0c;它有两个重要的子接口&#xff0c;分别时List和Set还有Queue。其中List的特点时元素有序&#xff0c;元素可重复&#xff0c;Set的特点时元素无序且不可重复&#xff0c;Que…

c++ 获取数据类型最大值或最小值

范例&#xff1a; double min_dist numeric_limits<double>::max(); double max_dist numeric_limits<double>::min();

TCP为什么是四次挥手

TCP 3次握手 客户端向服务器发送一个SYN&#xff08;包含了SYN&#xff0c;SEQ&#xff09;。 当服务器接收到客户端发过来的SYN时&#xff0c;会向客户端发送一个SYNACK的数据包&#xff0c;其实ACK的ack等于上一次发送SYN数据包的&#xff08;SYNSEQ&#xff09;。 当客户…

Kudu 基本操作,详细操作讲解

kudu与Apache Impala紧密集成&#xff0c;允许您使用Impala使用Impala的SQL语法从Kudu平板中插入、查询、更新和删除数据&#xff0c;以替代使用Kudu API来构建自定义的Kudu应用程序。此外&#xff0c;您还可以使用JDBC或ODBC将使用任何语言、框架或商业智能工具编写的现有或新…

c++ 随机分布

uniform_distribution 模板定义了可以产生随机浮点值的分布对象类型&#xff0c;默认是 double 类型。默认构造函数创建的是标准正态分布&#xff0c;因此期望是 0&#xff0c;方差是 1.0: normal_distribution<double> disX(0, 1.0); uniform_real_distribution 类模板…

TCP的三次握手和四次挥手详解

为什么需要“三次握手” 在谢希仁著《计算机网络》第四版中讲“三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端&#xff0c;因而产生错误”。在另一部经典的《计算机网络》一书中讲“三次握手”的目的是为了解决“网络中存在延迟的重复分组”的问题。…

NameNode所需配置,NameNode内存配置计算,NameNode与block关系

NameNode 所需大小&#xff0c;与Block大小&#xff0c;HDFS副本数均有关&#xff0c;计算方式如下&#xff1a; 例&#xff1a;bolck为256M,副本为3个&#xff0c;10台机器&#xff0c;每台4TB数据&#xff0c; Namenode需要的内存为&#xff1a; 10 * 4 * 1024 * 1024 MB …

Debug和Realease版本的区别

vs中的程序有debug和release两个版本&#xff0c;Debug通常称为调试版本&#xff0c;通过一系列编译选项的配合&#xff0c;编译的结果通常包含调试信息&#xff0c;而且不做任何优化&#xff0c;以为开发 人员提供强大的应用程序调试能力。而Release通常称为发布版本&#xff…

zabbix server is not running the information displayed may not be current

页面报错如下 查看日志提示 30037:20190710:193016.878 cannot start alert manager service: Cannot bind socket to "/var/run/zabbix/zabbix_server_alerter.sock": [13] Permission denied.30039:20190710:193016.879 server #30 started [preprocessing manage…

Arrays 工具类

package com.ajax;import java.util.*;public class Example10 {public static void main(String[] args){int[] arr{1,3,2,5,4};System.out.println("排序前:");printArray(arr);Arrays.sort(arr);System.out.println("排序后:");printArray(arr);int ind…

Ubuntu系统opencv4.4 opencv_contribute安装常见问题

安装 下载opencv4.0.1及contribute模块 https://github.com/opencv/opencv/releases/tag/4.0.1 https://github.com/opencv/opencv_contrib/releases/tag/4.0.1 更换国内源 使用 ubuntu 原生源下载速度&#xff0c;可替换为国内源&#xff0c;提升下载速度 备份 ubuntu 原生…

VS2010项目配置详解

首先看一下项目设置中可以使用的宏&#xff08;环境变量&#xff09;&#xff0c;常用的有&#xff1a; ConfigurationName 配置名字&#xff0c;通常是Debug或者Release IntDir 编译器使用的中间目录&#xff0c;产出obj文件 OutDir 链接器使用的输出目录 ProjectDir 项目目录…

Centos7 下 zabbix服务安装与部署,linux监控服务

客户端安装参考&#xff1a;https://mp.csdn.net/postedit/95475740 安装Zabbix 关闭 SeLinux 临时关闭 setenforce 0 永久关闭 vi /etc/selinux/config 关闭防火墙 临时关闭 systemctl stop firewalld.service 永久关闭 systemctl disable firewalld.service安装基础环…

qt安装

sudo apt-get update sudo apt-get install qt4* sudo apt-get install qtcreator

Zabbix 安装agent

服务端安装参考&#xff1a;https://datamining.blog.csdn.net/article/details/95362947 安装前首先添加对应的yum repository rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm yum install -y zabbix-agent 修改配置文件 …

Bootstrap 导入js文件,浏览器找不到文件问题

html导入文件是用href属性来导入&#xff0c;js利用src属性导入&#xff0c;都可以用相对路径来导入文件&#xff0c;只要确保相对路径正确不会找不到。 绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形如C:\windo绝对路径&#xff1a;是从盘符开始的路径&#xff0c;形…

c/c++ 英语专业词汇表

运算符与表达式&#xff1a; 1.constant 常量 2. variable 变量 3. identify 标识符 4. keywords 关键字 5. sign 符号 6. operator 运算符 7. statement语句 8. syntax 语法 9. expression 表达式 10. initialition 初始化 11. number format 数据格式 12 declara…

ubuntu之间传文件

在文件电脑上操作如下 sftp 用户名ip地址 put 路径/文件名 另一台电脑的home文件夹就用这个文件了