• 白话TCP/IP之:图解三次握手和四次挥手

    tcp_header TCP头部格式,对于理解各种连接状态很有帮助,下面讲解(引用自RFC 793: Transmission Control Protocol
     
    TCP, 即传输控制协议(Transmission Control Protocol),是一种面向连接的协议,特点是可靠和面向字节流传输。其中可靠的保证就是著名的三次握手和四次挥手。要想了解其中的过程和原理,动手实践是最好的方式,因为根据现象来理解原理能更深刻。推荐使用的是tcpdump,这是最常用的抓包工具之一。对于访问量大的网络程序可能会经常出现连接等问题,所以熟练使用tcpdump,能很好地分析出问题的原因。

    tcpdump用法:更多参数用法参考 man tcpdump 命令
    tcpdump [ -AbdDefhHIJKlLnNOpqRStuUvxX ] [ -B buffer_size ] [ -c count ]
    [ -C file_size ] [ -G rotate_seconds ] [ -F file ]
    [ -i interface ] [ -j tstamp_type ] [ -m module ] [ -M secret ]
    [ -P in|out|inout ]
    [ -r file ] [ -V file ] [ -s snaplen ] [ -T type ] [ -w file ]
    [ -W filecount ]
    [ -E spi@ipaddr algo:secret,… ]
    [ -y datalinktype ] [ -z postrotate-command ] [ -Z user ]
    [ expression ]
    下面是一次完整的三次握手、数据交互和四次挥手过程: tcpdump -nS port 10129 (10129: 监听端口;-n:不将ip地址转换成服务器名;-S:打印完整seq和ack序号;另外如果客户端和服务器在同一台机器需要加 -i lo 参数)                                tcp_screenshot

    表示客户端Client(172.31.1.22:60755)通过内网请求服务器Server(172.31.3.178:10129),流程图如下:                     

    其中1,2,3是三次握手过程,8,9,10,11是四次挥手过程,4,5,6,7是数据传输过程。
    对于关闭连接的交叉挥手是因为tcp既可以其中一方先发送FIN执行主动关闭,也可以双方都执行主动关闭。