通俗点说:

三次握手:

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. openstack之keystone

    一.什么是keystone 用于为openstack家族中的其它组件成员提供统一的认证服务,包括身份认证.令牌发放和校验.服务列表.用户权限定义等: 基本概念: 用户User:用于身份认证.一个用户可 ...

  2. 我在网站开发中经常用到的几个js函数01

    这是我在最近的一个网站项目中频繁用到的几个js函数,非常实用.包括:1.js获取地址栏参数:2.返回cookies字符串中指定键对应的值:3.json格式的日期转换为正常格式4.清除cookie. / ...

  3. 如何查看程序被哪个版本编译器编译的linux-gcc

    如何查看程序被哪个版本编译器编译的linux-gcc http://bbs.csdn.net/topics/380000949 那是不可能的,除非你加入了调试信息,也就是编译的时候加入了-g参数,然后 ...

  4. linux下移动或者复制文件覆盖相同文件夹时,文件夹里面的每个文件都提示是否覆盖

    链接地址:http://blog.chinaunix.net/uid-23683795-id-2391087.html # vi ~/.bashrc   如果你看到如下内容,以下命令都会用别名执行了, ...

  5. BZOJ 1617: [Usaco2008 Mar]River Crossing渡河问题( dp )

    dp[ i ] = max( dp[ j ] + sum( M_1 ~ M_( i - j ) ) + M , sum( M_1 ~ M_i ) ) ( 1 <= j < i )  表示运 ...

  6. python成长之路10——socketserver源码分析

    s = socket.socket(socket.AF_INET,socket.SOCK_STREAM,0) 参数一:地址簇 socket.AF_INET ipv4(默认) socket.AF_INE ...

  7. SQL常用语句集合(不断更新)

    1.多条件 查询 上下级 所有数据 select * from OrgUnit where (ParentId = '3' or OrgId='3' or ParentId in (select Or ...

  8. asp.net利用剪切板导出excel

    public enum ClipboardFormats : uint { CF_TEXT = 1, CF_BITMAP = 2, CF_METAFILEPICT = 3, CF_SYLK = 4, ...

  9. A - Oil Deposits(搜索)

    搜索都不熟练,所以把以前写的一道搜索复习下,然后下一步整理搜索和图论和不互质的中国剩余定理的题 Description GeoSurvComp地质调查公司负责探测地下石油储藏. GeoSurvComp ...

  10. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)

    链接地址:http://m.blog.csdn.net/blog/yhc13429826359/29357815 2014-6-8阅读578 评论0 前言:cocos2dx作为一个开源的移动2D游戏框 ...