“21 天好习惯”第一期-13

今天老师要求我们使用 WireShark软件分析 TCP/IP 三次握手和四次挥手过程,大家分享一下

首先你要下载一个WireShark软件,这个不必多说

然后是打开WireShark软件,出现以下界面

然后你选一个你当前正在用的连接(有波动的),比如WLAN,选中WLAN双击,进入以下界面

是不是有好多数据在滚动,这是因为它正在抓包,这时你需要在你的浏览器登录一个你需要抓包的网站,比如我就我学校的官网,注意,如果你的浏览器登录了多个网站,这时你可以在在最上方的输入框中输入相关信息进行过滤,不会过滤的可以去看看相关资料wireshark常用过滤规则 - 简书 (jianshu.com) 然后进行如下操作 

 

TCP的三次握手过程

(1)SYN 同步序列号,用来发起一个TCP连接,会携带一个随机序号seq=i,报文中的Flags值SYN=1,SYN=1的报文段不能携带数据,但是会消耗掉一个序号。

(2)服务器收到SYN之后,如果同意此次连接的建立会回复一个ACK,确认号ack=i+1,同时会选取一个序列号seq=j,报文中的Flags值SYN=1,ACK=1。

(3)客户端收到服务器的确认后,还会向服务器发出一个确认报文,确认号ack=j+1,序列号seq=i+1,报文中的Flags值ACK=1,ACK报文可以携带数据,如果没有携带数据不会消耗序号,下一个报文的序号仍然是i+1。

TCP的四次挥手过程

TCP断开连接是通过发送FIN报文,来告诉对方数据已经发送完毕,可以释放连接了

(1)当客户端的数据发送完毕之后,会向服务器端发送一个FIN=1的报文,告诉服务器端数据已经发送完了,可以释放连接了,此时客户端进入到FIN-WAIT-1状态去等待服务器端的ACK报文。

(2)当服务器端收到FIN报文后,会给客户端发送一个释放连接的确认报文ACK,此时服务器就处于CLOSE-WAIT状态,这个时候客户端到服务器的方向就释放了,但是服务器若有数据要发送,客户端还是要接收。

(3)客户端收到确认报文后就进入到FIN-WAIT-2状态等待服务器端发送FIN报文。

(4)当服务器端没有数据要发送时,就会向客户端发送FIN报文,等待客户端确认。

(5)客户端收到服务器的FIN报文后,必须发出ACK确认,此时客户端进入到TIME-WAIT状态,此时TCP连接还没有被释放,必须要经过2MSL(最长报文段寿命)的时间后,客户端撤销掉TCB后,才进入到CLOSED状态。(经过2MSL的原因是1.防止服务器端未收到ACK报文2.防止下一次占用该端口号的TCP连接收到上一次连接迟到的报文)。

(6)服务器端收到ACK确认报文后,就进入到CLOSED状态,服务器端结束TCP连接会比客户端早。

在wireshark界面上点击任意一条报文可以看到报文携带的内容,从上到下依次是物理层、链路层、网络层、传输层的数据报头。

 

TCP客户端为什么最后要发送一次确认,通过三次握手建立连接?

主要是为了防止已经失效的连接请求报文又发送到了服务器,再次建立TCP连接产生错误。在网络中有一种场景,客户端发送请求报文后,在网络中的某个节点滞留了一段时间,TCP客户端迟迟没有收到服务器的确认报文会重新向服务器发送这条报文,经过两次握手建立连接之后,传输数据,关闭连接。而之前滞留的请求报文到达服务器之后也会与服务器再次建立连接,如果是三次握手,客户端就不会发出确认报文,服务器收不到确认报文,就不会建立连接,减少不必要的错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值