06. TCP 通信 ❀ 数据包分析工具 Wireshark

        【简介】TCP 是一种面向连接的协议,很多应用层协议都使用 TCP 来确保文件在传输的过程中不会出现丢包的情况。TCP 可以通过基本的序列号和确认号来确保相互通信的主机之间不会在传输过程中出现丢包的情况。


  网络环境

        为了使测试环境更加真实,我们布置了这样一个网络环境。防火墙是192.168.28.0/24网段,无线AP是192.168.38.0/24网段。


        ① 防火墙是192.168.28.0/24网段,无线AP是192.168.38.0/24网段。三层交换机与防火墙之间是172.20.1.0/24网段。服务器是172.16.2.0/24网段。工作电脑是172.16.1.0/24网段。


        ② 连接无线AP的笔记本电脑无线网卡的IP地址是 192.168.38.26 。

        ③ 笔记本电脑通过无线网卡,可以Ping通IP地址172.16.2.11的服务器。


        ④ 跟踪路由,可以看到经过无线IP网关后到达三层交换网,再找到服务器IP地址。

  Wireshark 抓包

  这里我们用最常用的方法,先抓接口包,再过滤出我们需要的信息。

        ① 启动 Wireshark ,点击WLAN接口,点击蓝色图标开始抓包。

        ② 笔记本电脑通过无线网卡,经无线AP到达飞塔防火墙,再到三层交换机,最后到Web服务器。打开了Web服务器访问界面。

        ③ 显示过滤笔记本无线网卡IP地址和Web服务器的IP地址。最前面三个数据包就是三次握手的进程。

  TCP 通信

        TCP就像一种双向的通信进程,不只发送方会参与通信,接收方也会主动参与到连接的建立当中。可以将这个过程想象为拨打电话号码,如果拨电的电话号码是对的,那么对方就会听到电话铃声,只有对方接听了电话,通话才会开始。同样,TCP通信过程中,通信的双方会执行一个称为三次握手的进程,以便在通信过程中在参与通信的两台主机之间创建出一条独立的通首。

        我们来看看三次握手中的第一次。


        ① 整个TCP包的长度是66个字节。


        ② 前面的14个字节为以太网帧头。


        ③ 跟着的20字节为IP帧头。

        ④ TCP 头部的长度通常为20字节,但在有些情况下,由于TCP头部中有一些可选字段,所以TCP头部的大小也有可能增至60字节。这里看到有12字节为可选。

        下面我们看看TCP头部有哪些内容:

        Source Port(源端口):发送方使用的端口号,也可以说是发送方应该负责监听的端。

        Destination Port(目标端口):接收方使用的端口号,这里在Web访问时加入了8080端口号。

        Sequence number(序列号):这是用来确保数据可靠传输的一个唯一值。TCP会使用序列号来追踪每个数据段的传输情况。

        Flags(标记):标记有很多不同类型,这些不同类型代表不同的意义。这里我们看到有三个标记,SYN、ECN、CWR。

        SYN(同步):这些是用来发起连接的数据包,这里的连接也就是我们平时所说的握手进程。

        ECN(显示反馈):在传输层(TCP),TCP端必须对对方表明自身是可以进行ECN操作的。接收端必须能够通知发送端它收到了一个来自路由器的拥塞通告。发送端必须能够通知接收端它受到了来自接收端的通告并且已经降低了发送速率。

        CWR(拥塞窗口减小):发送方会使用这些数据包向接收方通告:由于传输导致缓冲区已经满或由于拥塞,通信各方都应该降低传输的速度,以避免网络中因些产生丢包。

        Window Size(窗口大小):头部的这个字段表示的是发送方可以发送的数据冲量。这个总量是在握手的过程中决定的,因为在握手的过程中,通信双方的主机会匹配缓冲区的大小。通信设备可以通过这个字段实现流控。

        Checksum(校验和):要想反复判断接收数据的完整性,就要使用这个字段。这个字段可以让通信方确认TCP数据段中的内容是否发生了变化。

        Urgent Pointer(紧急指针):这个字段的作用是告诉另一方紧急指定中包含的数值。这个参数会明确显示数据之前的十六进制序列号。

        Options(可选项):这个字段的长度视可选项的数量而定。这个字段中包含3部分,其中第1部分标识可选项字段的长度,第2部分标识了数据包中的使用可选项,第3部分则直接包含了这个数据包所使用的可选项。


        ⑤ 再看第二次握手进程,第一次内容有些不同。多了一个确认号,另外标记里除了有SYN(同步)之外,还有一个ACK标记。

        Acknowledgment number(确认号):这是通信的接收方在响应时发送的数值。这个数值的作用是确认这个数据包已经成功接收到了。(在发送方的序列号上加1)

        ACK(确认):这些数据包的作用是确认自己已经接收到了数据包,这些数据包也会用来发起和断开连接。


        ⑥ 第三次握手,确认收到对方回传的信息,这个时候不再需要可选项,长度少12字节,信道建立成功,可以开始传输数据了。

  读取数据

        示例是访问Web服务器。


        ① 在信道成功建立之后,客户端会发送一条 Get 请求消息,以访问Web根目录中的内容。服务器通过 200 状态消息确认向客户端发送了其请求的内容,而客户端则会通过下一个数据包来确认自己收到了这些内容。


        ② 针对文件传输,会建立多条信道。

  连接断开

        在成功传输了所有请求的数据包之后,服务器就会启动断开进程。


        ① 首先服务器向客户端发送断开请求,客户端会用下一个数据包进行确认。然后客户端会用相同的方式发关断开请求,而服务器收到这个消息后这进行了确认。


        ② 服务器发出断开请求。标记里有个FIN。

       FIN(结束):这些数据包表求,在数据包通过当前的连接成功传输完毕之后,连接正在断开。发送方和接收方都要通过发送FIN数据包来终止连接。


        ③ 客户端确认收到要求断开信息,确认号在发关来的序列号上加1。


        ④ 现在轮到客户端发送断开请求。


        ④ 服务器端确认收到消息,信道断开了。


老梅子   QQ:57389522



相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页