TCP 三次握手与四次挥手 看了你必懂

最近在思考一个问题,当我们在浏览器中输入URL按下回车键后,他的详细流程是怎样的;以前刚用springMVC的时候弄懂了一个请求的流程,好几个月以为那就是我想要的答案了,最近这段时间熟悉了好多东西,准备新写一个从  输入URL到页面展示的 细节系列,想必写完自己也收获颇丰~ 今天先写一篇三次握手与四次挥手来开个头;

先说说什么是TCP协议,TCP协议是一个面向连接的协议,在运用此协议进行数据传输前都会进行连接的建立工作(三次握手);当数据传输完毕,连接的双方都会通知对方要释放这次连接(四次挥手);

分析三次握手和四次回收前先认识一下TCP的标志位:

TCP标志位有6种标示:

SYN(synchronous    建立联机)

ACK(acknowledgement    确认)

PSH(push  传送)

FIN(finish  结束)

RST(reset  重置)

URG(urgent  紧急)

先看三次握手

首先Client端发送连接请求报文,Server段接受连接后回复ACK报文(回一个包过去),并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。

通俗的解释:

第一次握手:客户端对服务端说:服务端你好,我现在想跟你建立一次TCP连接;

第二次握手:服务端对客户端说:客户端你好,我收到你想跟我建立连接的消息了,我马上就去为我们的连接做准备(分配资源),我现在也发个消息(ACK)给你,你看看你可以收到我发的消息吗?

第三次握手:客户端对服务端说:收到了收到了,我收到了你给我的消息(ACK)了,看来我们连接是没问题的,我们来建立连接吧~

客户端先尝试跟服务端建立连接,服务端收到连接的请求后告诉客户端我可以收到你发给我的消息,双方确认都能收到对方的消息后,才开始的连接;为什么是三次握手,而不是两次呢? 因为如果没有第三次握手,服务端第二次握手后就会为建立连接做准备,等待的连接过程是相当消耗资源的,如果第三次客户端不想跟服务端握手了呢(或者说超时)?  服务端就会关闭这次连接,close掉资源;三次握手可以保证建立连接的同事不会浪费掉资源;

四次挥手;

三次握手大多数朋友还都是比较清楚的,四次挥手貌似还记得的人就不太多了;

这里我直接大白话解释了~

因为tcp连接是双向的,所以,关闭也是双向的~

第一次握手:客户端告诉服务端:我的数据已经都发送完了,我准备断开连接了哈;

第二次握手:服务端告诉客户端:好的,我收到了你准备断开连接的请求了,但是我还有数据没有发送完,你再等等哈,我发完了会告诉你的;

第三次握手:服务端告诉客户端:好的,我所以数据都发完了,我也准备跟你断开连接了;你再给我挥次手我就知道你断开了连接,我也就马上断开;此时服务端会给自己设置一个定时器~(这里有个定时器是重点!)

第四次握手:客户端告诉服务端:好的,我断开连接了~,   服务端收到客户端断开连接的消息后服务端自己也断开了连接;

客官你稍等,还有一个重点没讲完;这里还需要详细的补充一下第四次握手~

客户端告诉服务端他要断开连接的时,客户端怕服务端因为网络或者其他原因不知道他真的断开了连接;客户端发完通知后会把自己设置成为TIME_WAIT状态,当第三次握手完后,服务端在定时器规定的范围内没有收到客户端传来的第四次挥手消息,那么服务端会重复的和客户端进行第三次握手,如果服务端在两倍报文时间内内没有给客户端发消息,那么客户端就默认服务端已经断开了~

这就是三次握手和四次挥手~ 

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python

TCP协议三次握手与四次挥手通俗解析

 TCP/IP协议三次握手与四次握手流程解析 一、TCP报文格式 TCP/IP协议的详细信息参看《TCP/IP协议详解》三卷本。下面是TCP报文格式图: ? 图...

2407
来自专栏Linyb极客之路

网络编程之你应该这么理解TCP的三次握手和四次挥手

网络传输层负责最底层的底层链路连接。两台主机之间进行互联,基于网线的物理硬件上的协议。在这个侧面,主机与主机之间只认得硬件mac编码。并不认识IP。

1152
来自专栏栗霖积跬步之旅

第一章计算机网络和因特网-day02

1.互联网中的时延:处理时延、排队时延、传输时延、传播时延。   处理时延:检查分组首部和决定该分组导向何处的时间。   排队时延:分组在链路上等待传输的时延。...

3056
来自专栏武培轩的专栏

TCP和UDP的区别

TCP TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。 ...

2975
来自专栏Golang语言社区

Golang语言--UDP实现

UDP IN GO Go语言对UDP的支持并没有像TCP那样被众多的博客和论坛关注。UDP作为一个重要的传输层协议,是构成很多应用层软件协议的基础。 net包支...

4148
来自专栏JetpropelledSnake

Python Web学习笔记之TCP的3次握手与4次挥手过程

前言 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务。TCP提供一种面向连接的、可靠的字节流服务。 面向连接意味...

39110
来自专栏Janti

基础巩固——你应该这么理解TCP的三次握手和四次挥手

网络传输层负责最底层的底层链路连接。两台主机之间进行互联,基于网线的物理硬件上的协议。在这个侧面,主机与主机之间只认得硬件mac编码。并不认识IP。

662
来自专栏猿人谷

Linux下TCP连接过程总结

一、Linux服务器上11种网络连接状态: ?       图:TCP的状态机 通常情况下,一个正常的TCP连接,都会有三个阶段:1、TCP三次握手; 2、数...

2805
来自专栏武军超python专栏

2018年8月16日TCP中三次握手和四次挥手详解

 上图中有几个字段需要重点介绍下:         (1)序号:Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。...

832
来自专栏武培轩的专栏

TCP三次握手和四次挥手

TCP三次握手 所谓三次握手(Three-Way Handshake)即建立TCP连接,就是指建立一个TCP连接时,需要客户端和服务端总共发送3个包以确认连接的...

3264

扫码关注云+社区

领取腾讯云代金券