白话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执行主动关闭,也可以双方都执行主动关闭。

发表评论