通俗点说:

三次握手:

A:发送连接请求

B:收到请求后,B知道自己的接收端是好的,返回给A请求的应答,并询问A是否收到自己的本次应答。

A:收到B的应答。A知道自己的发送端和接收端都是好的。然后发送应答以回应B的询问。

当B接收到A的应答时,B知道自己的在第二次握手发出去的询问A收到了,证明B的发送端也是好的,这样就建立起了稳定的连接(到目前为止)。

四次挥手:

先明确几个问题。

单工:发送端和接收端都是固定的,角色不可变。即只能A——>B,不能逆过来,一经设定,A永远是发送端。

双工:发送端和接收端角色可变。可以A——>B,也可以B——>A。其中又分半双工与全双工。

半双工:在同一时间,信息只能单向传输。即,在同一时间,只能单独发生A——>B,或者B——>A,而不能同时反生。例如,对讲机。

全双工:在同一时间内,一端可以同时发送和接收信息,同一时间,信息可双向传输。A——>B与B——>A可同时发生。

而,在网络中,不论client或者server,都采用全双工。即,client在向server发送数据的同时,也接收来自server的数据。同理于server。

在此基础上,有半关闭概念:client关闭发送数据,但保留接收数据。同理于server。

所以,client与server的关闭是彼此独立的,分别关闭。如果同时满足“没有数据发送”和“没有数据接收”两个条件,就关闭。(不考虑网络延迟)

C(client):没有数据需要发送了,或者说在发送数据的最后添加一个end的标志,给S(server),告诉S我发送结束。此时,C还在接收数据。

S(server):一直在接收数据,直到接收到C的结束信息(或者C的关闭请求,或者理解为含有end标志的数据),S知道C数据发送结束了。S向C发回应答,说我知道你发送结束了。此时,S保持接收数据和发送数据。S还有可能在向C发送数据。(为什么需要这次握手呢?如果S不发回应答,则说明S还在接收来自C的数据。)C接收到S的应答,确定S收到自己发的end的信息(暂且理解为end)。C开启半关闭状态,即,关闭数据发送,保持数据接收。

S:S发送数据结束,告诉C。

C:接收到S的发送数据结束的通知,发回应答给S。S接收到C的应答,知道C已经知道S结束数据发送,S关闭。(全关闭)

C不会立即关闭数据接收,要等一段时间(2MSL),确保S收到了自己上一步发送的应答。因为如果由于网络等原因,S没有收到C的应答的话, S不会擅自关闭,而会持续发送结束的信息给C,所以,C要保留半关闭状态一段时间,默认这段时间内足够接收S的再一次发送结束信息。

所以,把client和server理解成两个需要独立关闭,就好理解四次挥手了。每端都需要发出一次发送数据结束请求和一次收到对方结束请求的应答(用来让对方关闭)。

自己的一些语言叙述方面的理解,具体的TCP/socket技术上的实现需要进一步的学习。

TCP三四次握手的更多相关文章

  1. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  2. wireshark抓包工具简介以及tcp三次握手的一些含义

    wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示网络封包的详细信息.使用wireshark的人必须了解网络协议,否则就看不懂wireshark了.为了安全考虑, ...

  3. TCP三次握手四次挥手

    看到一篇总结很好的TCP三次握手,学习一下,原文链接. 建立TCP需要三次握手才能建立,而断开连接则需要四次握手.整个过程如下图所示: 先来看看如何建立连接的. 首先Client端发送连接请求报文,S ...

  4. TCP ,UDP概念和TCP三次握手连接 的知识点总结

    OSI 计算机网络7层模型 TCP/IP四层网络模型 传输层提供应用间的逻辑通信(端到端),网络层提供的是主机到主机的通信,传输层提供的是可靠服务. TCP 中常说的握手指的是:连接的定义和连接的建立 ...

  5. TCP三次握手和四次挥手状态变迁解析

    TCP是TCP/IP的传输层控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 首先需要了解几个名词:tcp标志位,有6种分别为:SYN(synchronous建立联机) .ACK(ackn ...

  6. Wireshark基本介绍和学习TCP三次握手

    wireshark介绍 wireshark的官方下载网站: http://www.wireshark.org/ wireshark是非常流行的网络封包分析软件,功能十分强大.可以截取各种网络封包,显示 ...

  7. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

  8. iOS 开发:TCP三次握手连接

    在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接. 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认: 第二次握 ...

  9. 用tcpdump分析tcp三次握手,四次挥手

    1.tcpdump 简介 tcpdump是一个对网络上的数据包进行截获的包分析工具,一般linux系统以命令的形式使用 2.tcp三次握手 建立一个tcp连接会发生下面三个过程: 1.服务器必须准备好 ...

随机推荐

  1. c 对某个整数做因式分解

    1 #include <stdio.h> int main(void) { int n,i; scanf("%d",&n); printf("%d=& ...

  2. CheckBox控件实现选项的选中

    1:设置控件属性 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xml ...

  3. Xcode之外的文档浏览工具--Dash (在iOS代码库中浏览本帖)

    链接地址:http://www.cocoachina.com/bbs/read.php?tid=273479 Xcode之外的文档浏览工具--Dash    (在iOS代码库中浏览本帖)       ...

  4. JavaSE学习总结第24天_多线程2

      24.01  JDK5之后的Lock锁的概述和使用 虽然我们可以理解同步代码块和同步方法的锁对象问题,但是我们并没有直接看到在哪里加上了锁,在哪里释放了锁,为了更清晰的表达如何加锁和释放锁,JDK ...

  5. Flask中路由模块的实现

    在Flask中的路由功能主要通过修饰函数route实现,下面我们就来挖掘下route在源代码中是怎么分配视图函数的. def route(self, rule, **options): def dec ...

  6. Ruby学习: 类变量和类方法

    一.类变量 在ruby中,可以为类定义类变量,类变量的值为类的所有实例(对象)所共享. 有点类似其它语言(如java)中的静态变量,但与java中的静态变量的区别是, 类变量是私有的,无法在类的外部访 ...

  7. MySQL server has gone away 解决方法

    应用程序(比如PHP)长时间的执行批量的MYSQL语句.执行一个SQL,但SQL语句过大或者语句中含有BLOB或者longblob字段.比如,图片数据的处理.都容易引起MySQL server has ...

  8. <jsp:include page="">和<%@include page=""%> 标签学习

    <jsp:include page=""><jsp:param value=""name=""/><DEL&g ...

  9. BZOJ 2157: 旅游( 树链剖分 )

    树链剖分.. 样例太大了根本没法调...顺便把数据生成器放上来 -------------------------------------------------------------------- ...

  10. 使用jquery 1.7 及以后的版本 attr 问题

    跟进jquery的代码进行检查,发现问题出在下面的代码中: if ( notxml ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ n ...