-
-
[转帖] TCP三次握手分析
-
发表于: 2013-4-11 04:52 1221
-
新闻链接 http://michaelkang.blog.51cto.com/1553154/1064944
新闻时间 2013-04-10 17:00
新闻正文
TCP三次握手分析
tcp相关:
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
tcp的三次握手:
第一次握手:主机A发送位码syn取值为1来建立连接(即syn=1),并且随机产生seq number取值任意(即seq number=1234567)的数据包到服务器。
第二次握手:主机B收到请求后,检查数据包发现SYN=1得知,A要求建立联机。然后向A发送syn+ack包取值都为1(即yn=1,ack=1),并且ack number=(主机A的seq+1),随机产生seq=7654321的包。
第三次握手:主机A收到后检查ack number是否为自己上次发送的seq numer+1,并且确认数据包里面ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
tcp/ip的三次握手:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn=j的建立连接数据包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN,然后发回ack=j+1的ACK确认包,同时发送一个syn=k的SYN建立连接数据包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。
tcpdump抓包分析:
1 Mint-ThinkPad-Edge wyy # tcpdump -i wlan0 tcp
2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
3 listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
4 23:48:14.576489 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [S], seq 2876099301, win 14600, options [mss 1460,sackOK,TS val 5957112 ecr 0,nop,wscale 4], length 0
5 23:48:14.591469 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [S.], seq 2879119328, ack 2876099302, win 5792, options [mss 1440,sackOK,TS val 4205016500 ecr 5957112,nop,wscale 7], length 0
6 23:48:14.591517 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [.], ack 1, win 913, options [nop,nop,TS val 5957116 ecr 4205016500], length 0
7 23:48:14.847849 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [P.], seq 1:992, ack 1, win 913, options [nop,nop,TS val 5957180 ecr 4205016500], length 991
8 23:48:14.877899 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [.], ack 992, win 61, options [nop,nop,TS val 4205016787 ecr 5957180], length 0
这里的4-6行分别是三次握手的过程。
第4行:第一次握手:
23:48:14.576489 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [S], seq 2876099301, win 14600, options [mss 1460,sackOK,TS val 5957112 ecr 0,nop,wscale 4], length 0
这里可以看到本机通过40021端口发送数据到122.225.11.137这个ip的web端口,Flags是[S],表明是syn建立连接包,seq是2876099301。这就是第一次握手:client发送syn请求建立连接包。
第5行:第二次握手:
23:48:14.591469 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [S.], seq 2879119328, ack 2876099302, win 5792, options [mss 1440,sackOK,TS val 4205016500 ecr 5957112,nop,wscale 7], length 0
这里可以看到122.225.11.137此ip通过web端口发回到本机40021端口,Flags是[S. ],表明是syn包和未知包,后面看到seq 和ack,说明未知包是ack确认包。ack是2876099302,刚好等于第四行的seq+1。还可看到seq 2879119328。这就是第二次握手:server回应给client的ack+syn确认建立连接包。
第6行:第三次握手:
23:48:14.591517 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [.], ack 1, win 913, options [nop,nop,TS val 5957116 ecr 4205016500], length 0
这里可以看到本机通过40021端口连接122.225.11.137的web端口,Flags是[ . ]未知,后面可以看到ack确认包。
总结:
tcpdump里面抓tcp三次握手,看Flags标志依次是[S] [S . ] [ . ]基本就可以确认是一次完整的三次握手,分别是:client发的建立连接包,server回复的ack+syn确认连接包,还有client再次发送的ack确认包。
tcpdump可以加 --v参数察看详细解码。
新闻时间 2013-04-10 17:00
新闻正文
TCP三次握手分析
tcp相关:
TCP(Transmission Control Protocol) 传输控制协议
TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:
位码即tcp标志位,有6种标示:SYN(synchronous建立联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)
Sequence number(顺序号码) Acknowledge number(确认号码)
tcp的三次握手:
第一次握手:主机A发送位码syn取值为1来建立连接(即syn=1),并且随机产生seq number取值任意(即seq number=1234567)的数据包到服务器。
第二次握手:主机B收到请求后,检查数据包发现SYN=1得知,A要求建立联机。然后向A发送syn+ack包取值都为1(即yn=1,ack=1),并且ack number=(主机A的seq+1),随机产生seq=7654321的包。
第三次握手:主机A收到后检查ack number是否为自己上次发送的seq numer+1,并且确认数据包里面ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则连接建立成功。
完成三次握手,主机A与主机B开始传送数据。
tcp/ip的三次握手:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
第一次握手:建立连接时,客户端发送syn=j的建立连接数据包到服务器,并进入SYN_SEND状态,等待服务器确认。
第二次握手:服务器收到syn包,必须确认客户的SYN,然后发回ack=j+1的ACK确认包,同时发送一个syn=k的SYN建立连接数据包,即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据。
tcpdump抓包分析:
1 Mint-ThinkPad-Edge wyy # tcpdump -i wlan0 tcp
2 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
3 listening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes
4 23:48:14.576489 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [S], seq 2876099301, win 14600, options [mss 1460,sackOK,TS val 5957112 ecr 0,nop,wscale 4], length 0
5 23:48:14.591469 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [S.], seq 2879119328, ack 2876099302, win 5792, options [mss 1440,sackOK,TS val 4205016500 ecr 5957112,nop,wscale 7], length 0
6 23:48:14.591517 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [.], ack 1, win 913, options [nop,nop,TS val 5957116 ecr 4205016500], length 0
7 23:48:14.847849 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [P.], seq 1:992, ack 1, win 913, options [nop,nop,TS val 5957180 ecr 4205016500], length 991
8 23:48:14.877899 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [.], ack 992, win 61, options [nop,nop,TS val 4205016787 ecr 5957180], length 0
这里的4-6行分别是三次握手的过程。
第4行:第一次握手:
23:48:14.576489 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [S], seq 2876099301, win 14600, options [mss 1460,sackOK,TS val 5957112 ecr 0,nop,wscale 4], length 0
这里可以看到本机通过40021端口发送数据到122.225.11.137这个ip的web端口,Flags是[S],表明是syn建立连接包,seq是2876099301。这就是第一次握手:client发送syn请求建立连接包。
第5行:第二次握手:
23:48:14.591469 IP 122.225.11.137.http > Mint-ThinkPad-Edge.local.40021: Flags [S.], seq 2879119328, ack 2876099302, win 5792, options [mss 1440,sackOK,TS val 4205016500 ecr 5957112,nop,wscale 7], length 0
这里可以看到122.225.11.137此ip通过web端口发回到本机40021端口,Flags是[S. ],表明是syn包和未知包,后面看到seq 和ack,说明未知包是ack确认包。ack是2876099302,刚好等于第四行的seq+1。还可看到seq 2879119328。这就是第二次握手:server回应给client的ack+syn确认建立连接包。
第6行:第三次握手:
23:48:14.591517 IP Mint-ThinkPad-Edge.local.40021 > 122.225.11.137.http: Flags [.], ack 1, win 913, options [nop,nop,TS val 5957116 ecr 4205016500], length 0
这里可以看到本机通过40021端口连接122.225.11.137的web端口,Flags是[ . ]未知,后面可以看到ack确认包。
总结:
tcpdump里面抓tcp三次握手,看Flags标志依次是[S] [S . ] [ . ]基本就可以确认是一次完整的三次握手,分别是:client发的建立连接包,server回复的ack+syn确认连接包,还有client再次发送的ack确认包。
tcpdump可以加 --v参数察看详细解码。
赞赏
他的文章
- [转帖]供真人登录鉴权SaaS服务:Veritrix获240万美元融资 2109
- [转帖]几小时即可使互联网瘫痪的黑客 现已加入谷歌 1953
- [转帖]加强网络安全 抵御有针对性APT攻击 1837
- [转帖] TCP三次握手分析 1222
- [转帖]数据库安全五大阻碍 1962
看原图
赞赏
雪币:
留言: