实验环境
192.168.192.128 虚拟机
47.99.57.252 阿里云服务器
192.168.192.128主机访问47.99.57.252的url
192.168.192.128主机安装tcpdump工具(yum安装)并通过终端获取47.99.57.252的html页面
tcpdump -i ens33 -S host 192.168.192.128 and 47.99.57.252
-i 指定网卡
-S 目的是获取ack绝对值(不加该参数ack相对值为1)
host < ip > and < ip > 截获两个ip对应主机之间的通信
在还未访问时可以发现双方没有数据包传输
再开一个192.168.192.128的终端ping47.99.57.252
tcpdump有数据包传输(ICMP应答报文)
说明实验环境正常
curl命令访问47.99.57.252的html文件并得到结果
看到tcpdump抓包情况
红色框为tcp连接三次握手
黄色框为http请求以及响应
蓝色框为tcp断开四次挥手
tcp三次握手
1.[S.]代表SYN包表示主动连接,生成seq为一个随机数x
2.生成一个seq=y 给客户端发送ack,ack的值为x+1
3.客户端给服务端发送ack,ack的值为y+1
http请求与响应
1.客户端发送http请求,此次请求为get方式
2.服务端发送ack确认
3.服务端返回数据包和状态码(因为时get方式,所以数据包和状态码在一个数据包内,如果是post请求会分别发送状态码和数据包)
4.客户端发送ack确认
tcp断开连接四次挥手
1.[F.]为FIN包表示主动断开,生成seq为n
2.服务端返回ack=n+1
3.服务端返回seq=m,ack=n+1
4.看客户端返回ack=m+1
总结
通过这个实验可以看出访问网页时tcp的大致流程
tcp连接——http请求——http响应——tcp断开
因为tcp是可靠传输协议并且面向连接,所以双方收到数据包后都会向对方传输ack确认包
http请求方式多数为get,post,响应状态码200为成功
tcp断开连接为四次握手,因为要保证数据传输全部完成才能断开