配置网络
两个都在同一网段下,就不设置默认网关了
client(客户端)
servers(服务端)
启动服务器的httpserver,随便选个文件夹
测试ping
模拟客户端访问HTTP服务器过程
客户端上在输入服务器的地址:http://192.168.1.2:80。模拟客户端访问网站的过程。
在交换机结点上启动wireshark,然后点击上面的获取按钮进行抓包分析
三次握手
第一次握手
通常也称为客户端发送一个标识了SYN=1的数据段,表示期望与服务器A建立连接,TCP规定SYN=1时不能携带数据(虚拟序号,并没有数据),但要消耗一个序号,因此声明自己的序号是 seq=0(书上说是随机=x),此时TCP客户端进入SYN-SENT(同步已发送)状态
第二次握手
服务端回复标识了SYN=1,ACK=1的数据段,此数据段的序列号seq=0,确认序列号为主机A的序列号加1(ack=1),以此作为对主机A的SYN报文的确认。
该数据也不能携带数据,和上面一样,仍需要一个虚拟序号来设置seq标识
第三次握手
客户端发送一个标识了ACK=1的数据段,此数据段的序列号seq=x+1=1,确认序列号为服务器A的序列号加1(ack=y+1=1),以此作为对服务器A的SYN报文段的确认。
四次挥手
第一次挥手
客户端想终止连接,于是发送一个标识了FIN=1,序列号为seq=158,FIN=1的作用就是用来释放连接的,表明服务端的数据我已经接收完毕,要求释放连接。
此时TCP连接处于半关闭状态,即客户端已经没有数据要发送了,但服务端若发送数据,客户端仍要接收
第二次挥手
服务端回应一个标识了ACK=1的数据段,序列号为seq=v=308,确认序号为ack=u+1=159,作为对客户端的FIN报文的确认。
此时客户端进入FIN-WAIT-2状态,等待服务端发送连接释放请求
第三次挥手
服务端想终止连接,于是向客户端发送一个标识了FIN=1,ACK=1的数据段,序列号为seq=w=v=308,确认序列号为ack=u+1=159(和第二次挥手没变)。表明服务端数据已经发送完毕,要求释放连接。
解决一个疑问:书上在这里的seq=w,而没有直接写seq=v(上一个seq),考虑到在半关闭状态在,可能服务端又发送了一些数据导致w≠v,但在这里服务端没有发送数据,所以w=v
第四次挥手
客户端正常确认服务端的连接释放报文,seq=u+1=159;ack=w+1=309;ACK=1
客户端最后发的确认报文,必须等待2MSL(2个最长报文寿命),因为如果这个报文发出去后丢失了,服务端会在1MSL后重发,此时客户端在等待中就知道刚才发的报文丢失了,再重发一个就好了。
小结
- seq = ack(上)
- ack = seq(上) + 1
Comments | NOTHING