TCP的握手挥手和状态转换是很多网络问题的基础。在此进行相关问题的讨论及记录。

首先,这幅图大致介绍了TCP连接和断开的过程:

注意其中的几个状态:

LISTEN, SYN-SEND, SYN-RCVD, ESTABLISHED, FIN-WAIT-1, CLOSE-WAIT, FIN_WAIT-2, LAST-ACK, TIME-WAIT, CLOSE.

貌似还有一些同时发送FIN包的情况,但是容易混淆,所以我觉得可以忽略(最下面补了一张图,其实同时关闭是走到了CLOSING的状态)。

下面,还有一些值得注意的问题:

1. 为什么连接的时候是3次握手,而断开的时候是4次。

Answer: 因为发起连接的时候,ACK和SYN可以一起返回。而断开连接的时候,可能接收方还有数据未发出,所以FIN还不能直接发出,只能先发出ACK.

2. 3次握手,如果最后一个ACK丢失,会怎样。

Answer:接收端会等待ACK超时,然后重新发送之前的SYN+ACK,并且超时会翻倍增加避免网络拥塞。这时候连接还没有建立。如果发送方发送数据报文,会收到接收方返回的RST包。

3. 为什么TIME_WAIT是2MSL。

Answer:

1. 为了防止最后一个ACK丢失。如果ACK丢失,接收方会重新发出FIN,这时发送方需要重发ACK。可以避免接收方反复超时重传。

2. 防止lost duplicatie + incarnation connection的出现。lost duplicate指的是由于网络拥塞而延迟到达的、已经失效的重复包,而incarnation connection指的是新的连接和原来的socket pair一模一样。当这两种情况同时出现时,很可能造成数据混乱。等待2MSL,可以让lost duplicate的包在网络中消失。

内容参考:

http://blog.csdn.net/whuslei/article/details/6667471

http://blog.sina.com.cn/s/blog_5d2054d9010189l2.html

补一张包含同时关闭的TCP状态转移图吧。其实我还是觉得开始的那张图清晰、易懂、易记,哈哈。

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三次握手四次挥手

    转载于:https://www.cnblogs.com/Andya/p/7272462.html TCP三次握手: 起初A和B都处于CLOSED关闭状态 B创建TCB,处于LISTEN收听状态,等待A ...

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

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

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

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

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

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

  9. wireshark抓包直观图解 TCP三次握手/四次挥手详解

    转http://www.seanyxie.com/category/linux/ 作者:seanyxie |   一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...

随机推荐

  1. hdoj2037 今年暑假不AC(贪心)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2037 思路 想要看的节目尽可能的多,则首先要将节目按照结束时间从早到晚排序,因为一个节目越早结束,留给 ...

  2. ASL测试 课题测试博客

    已知线性表具有元素{5,13,19,21,37,56,64,75,80,88,92},如果使用折半查找法,ASL是多少? 知识点1: 折半查找法:折半查找,又称作二分查找.这个查找的算法的特点,要求数 ...

  3. Chrome 无痕模式

    Windows.Linux 或 Chrome 操作系统:按 Ctrl + Shift + n

  4. python抓包模块

    pcapy模块 安装 yum install -y epel-release yum install -y pip gcc    gcc-c++   libpcap-devel python-deve ...

  5. 机器学习之路: 深度学习 tensorflow 神经网络优化算法 学习率的设置

    在神经网络中,广泛的使用反向传播和梯度下降算法调整神经网络中参数的取值. 梯度下降和学习率: 假设用 θ 来表示神经网络中的参数, J(θ) 表示在给定参数下训练数据集上损失函数的大小. 那么整个优化 ...

  6. Sublime Text 下的Install Package安装方法

    废话不多说.... 如果你是Sublime Text3用户,按下Ctrl+~呼出控制台,输入以下代码 import urllib.request,os,hashlib; h = '7183a2d3e9 ...

  7. 浏览器在线查看pdf文件 pdf.js的使用教程

    谷歌浏览器可以直接在线查看pdf,而IE内核浏览器无法在线查看,默认是下载. 这里用到的是pdf.js,不仅支持IE内核浏览器,而且兼容手机查看pdf 官网地址:http://mozilla.gith ...

  8. 递归与分治策略之棋盘覆盖Java实现

    递归与分治策略之棋盘覆盖 一.问题描述 二.过程详解 1.棋盘如下图,其中有一特殊方格:16*16 . 2.第一个分割结果:8*8 3.第二次分割结果:4*4 4.第三次分割结果:2*2 5.第四次分 ...

  9. BZOJ 2286: [Sdoi2011]消耗战 虚树 树形dp 动态规划 dfs序

    https://www.lydsy.com/JudgeOnline/problem.php?id=2286 wa了两次因为lca犯了zz错误 这道题如果不多次询问的话就是裸dp. 一棵树上多次询问,且 ...

  10. Git 工具的使用,windows平台安装

    先谈谈版本控制的一些事 如果你严肃对待编程,就必定会使用"版本控制系统"(Version Control System). 随着信息科技的发展,软件开发已不是小手工作坊,软件的规模 ...