热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

如何获取握手包_浅谈三次握手原则

在了解三次握手原则之前,我们先来了解一下UDP和TCP协议之间的关联和关系和区别;在网络数据传输协议中,可划分为三个层次,分
7380c097cfb588b504dc040c22574e38.png

在了解三次握手原则之前,我们先来了解一下UDP和TCP协议之间的关联和关系和区别;

在网络数据传输协议中,可划分为三个层次,分别是:网络层、传输层、应用层。

在传输层中,就有TCP和UDP协议,而HTTP则位于应用层,除此之外,应用层还有FTP、TELNET、SMTP、DNS等协议。

这三种协议在日常生活中的应用较为广泛,比如无线广播就是使用的UDP协议,其特点就是传输效率高,但是UDP协议传输数据不安全,容易出现数据丢失的问题并且没有重发机制。UDP不可靠,不保证消息送达。

而TCP协议相对于UDP而言就安全多了,TCP 可靠保证消息送达,有重发机制。TCP是面向连接的,也就是每次通信之前,都需要先建立好连接,然后再进行通信。

52d60fd5b1dd04d878b4f55b38cbe0c0.png

上面讲到,TCP是需要建立连接的,那么,这个连接是如何建立起来的呢?我们一起来看看。

TCP的连接是需要进行三次握手从而建立起连接的,那么,这个三次握手是如何建立的呢?为何必须是三次握手呢?

第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;

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

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

我们通过一组图来看一下TCP三次握手的过程:

392e655ca5a200256a4a922d02e1da40.png

如图所示,甲和乙两个人通过三次交流从而建立起连接。那么,可能就会有小伙伴会问了,从这里,好像也没有看出三次握手的特别性啊。我们接着往下面看。

首先,TCP建立连接前,需要先进行三次握手从而建立连接。为什么必须是三次握手呢,还是以上面的图为例;

假设,甲给乙发消息:你瞅啥

情况一:假如乙没有收到甲发送的消息,可能是由于网络原因之类的一些不确定因素导致数据传输失败,那么发送出去的消息乙并没有接收到。显而易见,连接建立失败了;

情况二:假如乙成功收到了甲发送过来的数据,然后也积极的给甲回复了一条信息:瞅你肿么啦; 这个时候,如果乙给甲发送数据的时候,由于一些不确定的因素,导致数据丢失,甲没有收到乙发送过来的消息,那么,本次连接还是建立失败了。

情况三:假如乙成功的收到了甲发送过来的数据,然后乙发送给甲的数据甲也成功的收到了。这个时候,甲再回一句:你再瞅试试; 这个时候,数据发送失败,乙没有收到甲的消息,此时,连接还是建立失败了。

所以必须先建立连接双方才能有效通信。那么,上面的例子,为什么当三次握手时数据丢失即连接失败呢?

我们一起来分析一下:

首先,甲给乙发消息,那么,甲如何能够得知自己的消息乙成功接收到了呢?这个时候,乙再给甲回一个消息,当甲成功收到消息时,这个时候甲就能够确定,首先,自己这边发送消息功能正常,并且接收消息功能正常,然后再再给乙回一个消息。

这个时候再来看看乙。首先,乙刚刚收到了甲发过来的:”你瞅啥”;乙这个时候能够确认自己的接收功能正常,然后乙给甲回了一个”瞅你肿么了”;但是乙并不能确定自己的发送功能是否正常,甲是否能够接收到自己发送的消息,所以,需要第三次握手,也就是甲给乙再回一句:”你再瞅试试”;当乙成功收到甲发送过来的消息时,这个时候,乙就能肯定,自己的发送功能和接收功能都是正常的。可以开始建立通信了。

是不是感觉有点神奇。

当甲和乙三次握手建立成功时,这个时候TCP连接就建立成功了,此时就建立起了一个连接。

而HTTP协议则是建立在TCP协议之上的,所以HTTP协议也是一种安全可靠的协议并且是一种无状态的协议。

关于HTTP协议,我会在后面的文章中陆续学习和记录。



推荐阅读
  • 三小时掌握计算机网络基础(通俗易懂)
    目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARPRARP协议6.路由选择协议7.TCPIP协议8.UDP协议 9.DNS协议 ... [详细]
  • c# java socketn 字节流_C#Socket编程详解(一)TCP与UDP简介
    一、TCP与UDP(转载)1、TCP1.1定义TCP(TransmissionControlProtocol)传输控制协议。是一种可靠的、面向连接的协议(eg:打电话)、传输效率低 ... [详细]
  • HTTP协议相关的网络经典五层模型
    网络通信相关概念的讲解–网络协议分层(经典五层模型)在我们了解HTTP相关内容之前我们先来了解一下“网络协议分层”相关内容,因为这个是我们了解HTTP相关内容的前提条件;大家有一 ... [详细]
  • TCP/IP详解 卷1 第一章概述
    第一章概述1.2分层网络编程通常分不同层次进行开发,每一层负责不同的通信功能。一个协议族比如TCPIP,通常是一组不同层次上多个协议的组合。一般可以认为 ... [详细]
  • Linux一键安装web环境全攻略
    摘自阿里云服务器官网,此处一键安装包下载:点此下载安装须知1、此安装包可在阿里云所有Linux系统上部署安装,此安装包包含的软件及版本为& ... [详细]
  • POCOCLibraies属于功能广泛、轻量级别的开源框架库,它拥有媲美Boost库的功能以及较小的体积广泛应用在物联网平台、工业自动化等领域。POCOCLibrai ... [详细]
  • 实例详解ISA防火墙策略元素
    我们在前面的工作中已经实现了ISA2006的代理服务器功能,接下来我们要实现ISA的访问控制功能。很多公司都有控制员工访问外网的需求,例如有的公司不允许 ... [详细]
  • 引言随着企业安全意识的增强以及现代化管理水平的提高,对设备的远程监控在工业控制系统中得到了越来越广泛的应用。近年来,Web技术广泛普及,把 ... [详细]
  • OSI七层模型、TCP/IP五层模型
    OSI网络互连的七层框架:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层;应用层OSI参考模型中最靠近用户的一层,是为计算机用户提供应用接口,为用户直接提供各种网 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • 开发笔记:计网局域网:NAT 是如何工作的?
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了计网-局域网:NAT是如何工作的?相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • LVS实现负载均衡的原理LVS负载均衡负载均衡集群是LoadBalance集群。是一种将网络上的访问流量分布于各个节点,以降低服务器压力,更好的向客户端 ... [详细]
  • SVN 功能说明(简版)
    Subversion(SVN)是什么?SVN是一种版本管理系统,是开源软件的基石。即使在沟通充分的情况下,多人维护同一份源代码的一定也会 ... [详细]
author-avatar
LYJ189_163
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有