我们先搭建一个合适的拓扑 ![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/fea7ef0e13fdff54e05090d3f4634d53.png)
然后再请求访问网页建立tcp连接
发送报文并且查看
- 我们可以看出tcp的端口号为80 报文序号为0 确认序号也为0 syn同步标志1
- 这里说明pc向服务器发送了TCP SYN的报文请求
- 这里是服务器接收到pc发来的报文请求
- 服务器再像pc发送TCP ACK的文件
我们可以看出服务器的确认报文序号为0,确认序号为1,同时将SYN和ACK两个标志位置1。由于客户端的连接请求报文已经被消耗屌一个序号,因此这个再确认报文的序号为1,确认号为1,ACK标志为1
TCP连接的释放
假设主机A为客户端,主机B为服务器,其释放TCP连接的过程如下:
1) 关闭客户端到服务器的连接:首先客户端A发送一个FIN,用来关闭客户到服务器的数据传送,然后等待服务器的确认。其中终止标志位FIN=1,序列号seq=u
2) 服务器收到这个FIN,它发回一个ACK,确认号ack为收到的序号加1。
3) 关闭服务器到客户端的连接:也是发送一个FIN给客户端。
4) 客户段收到FIN后,并发回一个ACK报文确认,并将确认序号seq设置为收到序号加1。
主机A发送FIN后,进入终止等待状态, 服务器B收到主机A连接释放报文段后,就立即给主机A发送确认,然后服务器B就进入close-wait状态,此时TCP服务器进程就通知高层应用进程,因而从A到B的连接就释放了。此时是“半关闭”状态。即A不可以发送给B,但是B可以发送给A。
此时,若B没有数据报要发送给A了,其应用进程就通知TCP释放连接,然后发送给A连接释放报文段,并等待确认。A发送确认后,进入time-wait,注意,此时TCP连接还没有释放掉,然后经过时间等待计时器设置的2MSL后,A才进入到close状态。