学过计算机网络的同学都知道TCP协议是计算机网络课程里面最复杂的协议之一,还没有通信就要搞个什么三次握手,断开还要什么四次分手,中间还要什么流量控制啦,拥塞控制,滑动窗口什么的,初学者看了就会头晕。

通信基本流程

我们都知道TCP协议是面向连接的协议,可以保证数据不丢失,不重复,不乱序的到达接收方。TCP的通信过程大概是下图所示。

上图为TCP整个完整的通信过程,首先经过三次握手建立连接(绿色部分),连接建立后可以正常通信(蓝色部分),通信完毕需要四次挥手断开连接(红色部分)。

三次握手

三次握手可以这么理解:

TCP客户端是男孩子,TCP服务器是女孩子,男孩子要追女孩子,首先要建立恋爱关系。需要一个建立恋爱关系的过程。

男孩:我们可以恋爱吗?(客户端请求服务器建立连接)

女孩:你想追我?想清楚了!(服务器要求客户端确认连接)

男孩:没错,你就是我的梦中情人!(客户端确认连接)

三次握手确立了TCP服务器和客户端的“恋爱关系”。为什么需要三次握手,两次握手不行吗?从通信角度看,对于客户端两次就够了,但对于服务器不够,因为,两次握手服务器仅仅知道客户端和服务器之间的信道是通的,但服务器和客户端之间还未知,所以需要收到客户端发来的确认消息双方才能确认双方的消息通路都是ok的。

四次挥手

对于连接的断开需要四次挥手,可以理解为男孩和女孩要分手,需要经过一番如下商量。

男孩:我们不合适,我们分手吧。(客户端已经没有数据可以传输)

女孩:什么?这么快就分手了,不能这么快完,我要给你算总账!(服务器这端还有未发送完的数据)

女孩给男孩算账中……(没有发送完的数据继续传输)

女孩:算好了,分手!(服务器这端数据传输完毕)

男孩:好的,我们从今后还是朋友……(等待Time_Wait时间到,恢复单身)

这里有个注意的点是,客户端在收到服务器发送的数据传输完毕的消息后(第三次挥手),不能立即关闭连接(恢复单身,寻找新欢),必须等待2MSL时间才能关闭,因为这期间最后一次挥手服务器未必能收到,如果没有收到,服务器会重新发送第三次挥手的消息,这时候如果客户端关闭,将无法回应第四次挥手消息,使得四次挥手过程无法完成。

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

  1. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  2. tcp三次握手四次挥手那些事

    建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.三次握手,四次挥手流程图如下: 一.首先看下如何通过三次挥手----------建立连接 首先客户端发送连接请求报文,服务端接受连接后回复AC ...

  3. 网络 TCP三次握手,四次挥手详解

    三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提:  TCP连接管理机制 用TCP首部 ...

  4. TCP三次握手四次挥手,通俗易懂版

    三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...

  5. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  6. 转---tcp三次握手四次挥手syn fin......

    http://blog.chinaunix.net/uid-22312037-id-3575121.html转自 一.TCP报文格式        TCP/IP协议的详细信息参看<TCP/IP协 ...

  7. TCP三次握手四次挥手详解2

    相对应socket开发者,TCP创建过程和连接拆除过程是由TCP/IP协议栈自动创建的,因此开发者并不需要控制这个过程,但是对于理解TCP底层运作机制,相当有帮助 TCP三次握手 所谓三次握手,是指建 ...

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

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

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

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

随机推荐

  1. maven 工具

    maven 工具 1.打包:mvn clean package 2.打包并安装到本地仓库:mvn clean install 3.利用maven下载源代码:mvn dependency:sources ...

  2. Object changed by Unknown

    https://documentation.red-gate.com/soc7/troubleshooting/object-changed-by-unknown https://documentat ...

  3. mstar 平台I2C 配置

    芯片的pin 脚可以用作不同的功能,总结一句就是外设进行状态和数据交换. 最常用的是作为GPIO,设置为输出模式时,通过高低电平来控制一些外围设置:// 如LED,屏的电源,背光的开关,功放的静音等等 ...

  4. Git Bash 克隆project

    cd 到想要的路径,然后执行下面的命令

  5. 018 oauth协议

    1.作用 2.流程步骤 3.授权模式 4.授权码模式

  6. 一行命令搞定/usr/bin/perl^M: bad interpreter

    https://www.cnblogs.com/albertYe/p/8819143.html **************************************************** ...

  7. react 核心技术点

    1.react生命周期 react生命周期分为初始化阶段.运行阶段.销毁阶段. (1) 初始化阶段: componentWillMount:实例挂载之前 Render:渲染组件 componentDi ...

  8. 谈谈RPC——golang中jsonrpc和grpc的使用

    前言 不知从什么时候rpc这个东西开始进入我们的视野,一开始做开发的时候经常使用的都是http,偶尔使用的是socket进行通信,使用的是restful的方式.但是,一次偶然的机会你会发现RPC这个东 ...

  9. 开发日记:在VS项目中使用SVN版本号作为编译版本号

    在实际项目中(特别是作为产品的项目),版本号是必不可少的一部分.版本号的规则也有许多种,在此不讨论具体的编码规范.对于迭代的产品,版本繁多,特别是有多个实施项目所使用产品的版本不同(基于定制需求)时, ...

  10. html5 video标签播放视频流

    从文件服务器读取音视频文件,以流的方式传给前台,并能够播放视频. 做了一个demo,用html5的video,audio标签实现. 后台实现代码: @GetMapping(value = " ...