zoukankan      html  css  js  c++  java
  • TCP、UDP的基本概念

    本实验环节的目标:

    1、 TCP、UDP协议的基本概念;
    2、 TCP三次握手、TCP的断开、TCP重置;
    3、 学会利用wireshark捕获含有TCP协议额数据包;
    4、 掌握TCP、UDP数据包的分析技术;

    一、 了解TCP的端口

    TCP(Transmission Control Protocol)为传输控制协议。TCP所有的通信都会使用源端口和目的端口,这些信息都可以在TCP的头部信息中找到。为使数据传输到远程服务器端或设备的特定应用中,TCP数据包必须知道远程服务所监听的端口。
    如果尝试连接一个不同于所设置的端口,那么这个通信就会失败。一般来说,TCP通信中的源端口并不重要,可随机选择。而在使用TCP通信的时候,总共有65535个端口可供使用,其中0-1023属于标准端口,用于特定的服务;1024-65535号端口为临时端口,需使用时,操作系统会在通信时以随机的方式或者采用一定的策略进行选择。

    我们来查看一下第一个数据包的TCP头部。可以看到这个数据包是从IP地址为172.16.16.128发往212.58.226.142的,它的源端口号是2826,属于临时端口,它是由操作系统选取的。目的端口是80端口,这是一个标准端口,这个端口通常提供给使用HTTP的Web服务器。其实Wireshark自身会维护一个端口列表,记录这些端口关联的常用服务,我们可以选择菜单栏的“Edit”->“Preference”->“Name Resolution”,勾选“Resolve transport names”,就可以打开传输端口的解析。

    第二个数据包是从IP地址为212.58.226.142发往172.16.16.128的,除了IP地址相反之外,源端口和目标端口也是相反的:
    事实上,所有基于TCP的通信都以相同的方式工作:选择一个随机的源端口与一个已知的目标端口进行通信。在发出数据包之后,远程设备就会与源设备使用建立起的端口进行通信

    二、 了解TCP的三次握手原理

    ?如何提供可靠的数据传输

    符号说明:
    seq:请求的序列号 ack:确认的序列号
    SYN:请求同步序列号 ACK:确认序列号
    结合实验,分析三次握手的过程:

    1、 在第一次握手建立连接时,客户端会向服务器端发送SYN数据包(SYN=1,seq=x),并进入SYN-SENT状态,等待服务器的确认。
    2、 第二次握手分两步完成,即SYN和ACK【请求和确认数据包】。
    a) 服务器接收到客户端的请求后,向客户端回复一个确认信息(ack = x+1).
    b) 服务器端向客户端发送一个SYN包(seq=y),从而建立连接,此时服务器进入了SYN_RCVD状态。
    3、 第三次握手是客户端接受到服务器端的回复,即SYN+ACK数据包。此时,客户端也要向服务端发送确认数据包(ACK)。发送完毕之后,客户端与服务器端就进入ESTAVLISHED的状态。

    三、 了解TCP的断开过程


    TCP断开的步骤:
    1、 客户端向服务器端发送了一个设置了FIN和ACK标志位的TCP数据包,告诉服务器通信完成。
    2、 服务器收到客户端发来的数据包后,发送一个ACK数据包来回应客户端。
    3、 服务器端再向客户端传输一个自己的FIN/ACK数据包。
    4、 客户端收到服务器端的FIN/ACK数据包后,再向服务器发送一个ACK数据包,之后就结束通信过程。

    结合实验数据包分析TCP断开的过程:

    a) 第一个数据封包的标志位:IP Address:67.228.110.120 的设备通过发送含有FIN/ACK标志位数据包开启TCP的断开过程。
    b) 目标设备使用了一个ACK数据包来确认收到数据包,并且发送了一个FIN/ACK数据包。
    c) IP Address: 67.228.110.120 的设备发送了最后的ACK数据包后,宣告TCP正式断开。
    d) 两台设备之间的TCP通信就此结束,如果还需继续通信,则必须完成新的握手操作。

    四、 TCP重置

    正常情况下,TCP的通信的连接会以TCP的四次握手断开。但是现实中,网络连接有时会出现断掉的情况:
    a) 网络攻击
    b) 配置错误
    此时需要使用设置了RST标志的TCP数据包,表示:
    c) 连接被异常终止
    d) 拒绝连接的请求

    这个文件中的第一个数据包是从192.168.100.138发出的,并且尝试与192.168.100.1的80端口进行通信。但是由于目标主机并没有开启80端口,因此在第二个数据包中,就回应了一个RST数据包,告诉源主机80端口无法建立连接,那么通信也就终止了。由此可见,RST数据包可以在通信序列的开始或者在主机通信的过程中,将通信终止。

    五、 UDP(User Datagram Protocol)数据包的分析

    UDP主要是为了提供高速的传输,因此是一种尽可能提供可靠服务,通常会被称为无连接协议。这种协议主要利用自身的错误检查以及重传计时来保证数据的正确传输。

    观察UDP数据包:

    这个捕获文件是由DNS形成的。而UDP的内容也很简单,包含有源端口、目标端口、数据报的长度以及校验和等信息。
    需要强调的是,UDP并不关心传输的可靠性,所以任何使用UDP的应用在必要的时候都需要采取特殊的步骤,从而保证传输的可靠。
    步骤7:TCP与UDP数据包的捕获
    最后我们再来尝试在网络上捕获真实的TCP与UDP数据包进行分析。这里我们可以采用上次课程中所讲过的方法,专门捕获TCP数据包。比如这里我们可以利用浏览器打开“i春秋”主页,并进行抓包,生成XXX.pcapng文件。
    由于捕获的数据包比较多,因此我们可以首先进行筛选。比如可以通过“Edit”->“Find Packet”,在弹出的对话框中以String的形式搜索字符串“baidu.com”,那么可以找到一个HTTP协议的数据包。根据这个,我们就可以知道源IP地址以及目标IP地址,于是接下来就可以利用筛选器,输入筛选条件:

    ip.addr==192.168.1.195 && ip.addr==112.65.203.32
    

    那么剩下的就是这两个IP地址之间的流量了。下面我们尝试寻找TCP的三次握手,当然这可以根据数据包中seq以及ack的值进行匹配,比如4号数据包中seq的值为3958928431,而17号数据包的ack值为3958928432,于是就可以知道这两个数据包分别是第一和第二次TCP握手。而第18个数据包的seq的值也是3958928432,那么其实我们就已经找到了TCP的三次握手。 或者我们可以通过着色的形式将这些相关的数据包高亮显示。
    使用鼠标右键单击4号数据包,依次选择“Colorize Conversation”->“TCP”->“Color 1”(可按照自己的喜好选择颜色),于是Wireshark中的数据包就得到了高亮显示:

    很明显,第4、17以及18号数据包就是TCP的三次握手。然后我们可以把这三个数据包导出来,选择“File”->“Export Specified Packets”,在弹出的对话框中给文件起一个名字,我这里是XXXXe.pcapng,之后在“Range”后面的输入框中填上“4,17,18”,选择“保存”,那么只包含有三个数据包的捕获文件就生成了。
    或者我们也可以在想要保存的数据包上单击鼠标右键,选择“Mark Packet(toggle)”,然后在导出窗口中选择“Marked packet”即可。
    如果要捕获UDP的数据包,最简单的可以通过登录QQ的方式来进行抓取,因为比较简单,这里不再赘述。
    推荐博文:https://blog.csdn.net/bcbobo21cn/article/details/51569360

  • 相关阅读:
    问卷调查
    20145104张家明 《Java程序设计》第6周学习总结
    20145104张家明 《Java程序设计》第2周学习总结
    20145104张家明 《Java程序设计》第一周学习总结
    20145104张家明 《Java程序设计》第3周学习总结
    socketserver OSError:[Errno 98] Address already in use
    psycopg2.OperationalError: FATAL: password authentication failed for user "postgres"
    nginx 配置nginx.conf
    css 一些常用属性总结
    在ie中用滤镜 (filter:progid:DXImageTransform.Microsoft.gradient)会触发overflow:hidden?
  • 原文地址:https://www.cnblogs.com/Erma/p/10292070.html
Copyright © 2011-2022 走看看