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. PHP老师没教过你的那些知识点

    另类的写法有惊喜 我们在阅读某些源代码的时候会发现有一种另类的写法,比如 //异常写法 if(false == $result)   //正常写法 if($result == false) 其实这是一 ...

  2. Little Elephant and Array 线段树

    题目:http://codeforces.com/problemset/problem/220/B 题意 给定一组数据,多次询问区间内某数字出现次数与该数字数值相同的数的个数 思路 一看到区间查询,就 ...

  3. [漏洞复现] CVE-2017-11882 通杀所有Office版本

    此漏洞是由Office软件里面的 [公式编辑器] 造成的,由于编辑器进程没有对名称长度进行校验,导致缓冲区溢出,攻击者通过构造特殊的字符,可以实现任意代码执行. 举个例子,如果黑客利用这个漏洞,构造带 ...

  4. merge into issue

    ORA-30926: unable to get a stable set of rows in the source tables 一.经检查,这个错误是由于数据来源表(即语句中,using后面的f ...

  5. android viewHolder static 静态

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha 不是静态内部类 会 持有 外部类的 引用.  就像经常自定义的 适配器 类 作为内部类 ...

  6. codevs 1005 生日礼物

    1005 生日礼物  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 9月12日是小松的朋友小寒的生日.小松知 ...

  7. Codeforces Round #228 (Div. 1) C. Fox and Card Game 博弈

    C. Fox and Card Game 题目连接: http://codeforces.com/contest/388/problem/C Description Fox Ciel is playi ...

  8. URAL 1873. GOV Chronicles

    唔 神题一道 大家感受一下 1873. GOV Chronicles Time limit: 0.5 secondMemory limit: 64 MB A chilly autumn night. ...

  9. poj 3041 Asteroids 最小点覆盖/最大匹配

    Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16242 Accepted: 8833 Descriptio ...

  10. Codeforces Round #283 (Div. 2) B. Secret Combination 暴力水题

    B. Secret Combination time limit per test 2 seconds memory limit per test 256 megabytes input standa ...