码迷,mamicode.com
首页 > 其他好文 > 详细

TCP 连接建立分析

时间:2020-02-17 15:41:55      阅读:76      评论:0      收藏:0      [点我收藏+]

标签:同步   code   net   host   选项   tcp   临时   数据报   pre   

tcp 三次握手与四次挥手

tcp 报文结构

技术图片

tcp 是全双工的,即 client 向 server 发送信息的同时,server 也可以向 client 发送信息。

技术图片

在同主机的两个 session 中分别执行以下命令

tcpdump -i lo -w - | tee ./hello.cap | tcpdump -r -  
telnet localhost

三次握手

技术图片

字段含义:时间戳;从本地临时端口38644向telnet;发起连接标志S;client初始包序号3961004360;窗口大小43690字节;选项[最大报文段长度65495;允许TCP单独确认非连续的片段,用于告知真正丢失的包,只重传丢失的片段;时间戳选项;无操作字段;窗口扩大选项];数据段长度

技术图片

第一行(第一次握手):client端主动发起第一次握手,同步位syn=1,同时初始化序列号seq num=J;

技术图片

第二行(第二次握手):server端SYN=1,ACK=1,确认号ack num=J + 1,同时自己初始化序列号seq=K;

技术图片

第三行(第三次握手):client收到确认报文,SYN不再置1,ACK=1,确认号ack num = K + 1;

技术图片

server端收到第三次握手的数据报文时,进入established状态,TCP连接建立。

四次挥手

技术图片

技术图片

第一行(第一次挥手):client发送结束报文字段,FIN = 1,seq num = M

技术图片

第二行(第二次和第三次挥手):第二次--ACK = 1,seq num = M + 1;第三次--FIN = 1,seq num = N

技术图片

第三行(第四次挥手):ACK=1,seq num = N + 1

技术图片

为什么四次挥手只有三个包呢?因为TCP总是尽可能的捎带需要回复给对方的数据,所以第二个ACK就被第三个FIN捎带过来了。但是当主动方发起断开连接,被动方还有数据需要发送的时候,就会变成先ACK再发送完数据,再FIN。

TCP 连接建立分析

标签:同步   code   net   host   选项   tcp   临时   数据报   pre   

原文地址:https://www.cnblogs.com/yexuesong/p/12321718.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!