一、查询Server端IP地址
使用nslookup查询www.tmall.com的IP地址
PS C:\WINDOWS\system32> nslookup www.tmall.com
DNS request timed out.
timeout was 2 seconds.
服务器: UnKnown
Address: 101.226.4.6
非权威应答:
名称: www.tmall.com.danuoyi.tbcache.com
Addresses: 183.232.250.235
183.232.238.239
183.232.250.236
183.232.249.239
183.232.249.106
Aliases: www.tmall.com
二、配置wireshark的过滤器
使用wireshark的过滤工具建立专门捕获我们需要通信的Server的数据
219.223.247.181也就是本机的IP地址,后面一律使用客户端描述,而183.232.250.235的IP地址是天猫的一个IP地址
三、捕捉数据并分析三次握手
点开网页,进入天猫页面,查看wireshark捕捉TCP
第一次握手:从第一次握手我们Client发送的Sequence num = 0,这是一个相对的数字,其实是随机产生的;Acknowledge number=0;Acknowledgement这个字段没有被设置,而Syn=1这两个字段表示这是客户端发起连接用于表示这是一个请求连接的数据。
第二次握手:从第二次握手我们可以看到服务端发送数据给客户端发送的Sequence num = 0;但是Acknowledge number=1是客户端的Sequence number+1的结果,表示服务端接收到了客户端发送的数据;Syn这个字段和Acknowledgement都设置 为1表示这是服务端建立连接,并携带了确认信号的数据报。
第三次握手:我们发现客户端发送的Sequence num = 1,这是上一个Server端发送的Acknowledgement num。而Acknowledge number=1是表示对Server端发送的Sequence num 的一个响应,表示自己已经接收到了这个服务端建立请求连接的信息。
流程总结
四、TCP三次握手
4.1、三次握手流程
- 第一次握手:Client发送一个请求连接,其中Sequence num=0 、 Acknowledge num = 0、Acknowledgement=0,Syn= 1;
- 第二次握手:Server端收到Client的请求,发送的主要信息有Sequence num = 0、Acknowledge num = Client Sequence num +1、Acknowledgement=1、Syn=1;Acknowledge num = Client Sequence num +1表示Server端接收到了客户端Sequence num=1之前的数据,要求Client下一次发送的Sequence num从1开始发;而Syn这个字段表示这个信息是一个请求建立连接的数据。一旦建立连接以后,Syn将会被置为0;Acknowledgement都设置 为1表示这是服务端建立连接,并携带了确认信号的数据报。
- 第三次握手:Client端收到Server端发送的数据以后,会根据Server Acknowledge num设置自己的Sequence num=1,而且会根据Server端的Sequence num 设置自己的Acknowledge num=1,表示自己已经收到了Server 端Sequence num之前的所有数据;同时我们可以看出Acknowledgement = 1;而Syn = 0;表示这是一个确认数据,而不是一个连接请求数据。到这里三次握手已经完成了。
4.2、为什么需要三次握手
如果采用两次握手,那么假如Client第一次发送一个请求连接数据给Server,但是这个数据经过一个漫长的路由之后才会达到Server,此时Client在规定的时间内没有收到Server的确认连接请求信息,又会重新发送一个请求连接数据用于请求连接,这一次连接数据很快到达了,并建立起了连接,进行数据交换完成以后会关闭连接。这个时候,第一个请求连接的数据终于到达了Server端,此时Server端不需要进行第二次和第三次握手,直接开启一个线程建立连接,但是此时客户端已经传输完数据了,不会再发送数据了。这样Server端就会造成一个资源浪费。