wireshark实验四:TCP

一,实验目的:

掌握TCP原理

通过Wireshark的的对数据包的分析,了解三个握手,四次挥手。

二,实验原理

TCP(Transmission Control Protocol传输控制协议)是一种面向连接的,可靠的,基于字节流的传输层通信协议。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,用户数据报协议(UDP)是同一层内另一个重要的传输协议。在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的中间层。不同主机的应用层之间经常需要可靠的,像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

1,TCP头格式

(1)源端口(源端口号):数据发起者的端口号,16位。
(2)目的端口号(目的端口号):数据接收者的端口号,16位。
(3)序列号(顺序号码) ,Seq)):用于在数据通信中解决网络包乱序(重新排序)问题,以保证应用层接收到的数据不会因为网络上的传输问题而乱序(TCP会用这个顺序号码来拼接数据),32位。
(4)确认号(确认号码,ACK):是数据接收方期望收到发送方在下一个报文段的顺序号码(SEQ),因此确认号码应当是上次已成功收到顺序号码(SEQ)加1,32bit。
(5)Offset(TCP报文头长度):用于存储报文头中有多少个32bit(上图的一行),存储长度为4bit,最大可表示(2) ^ 3 + 2 ^ 2 + 2 ^ 1 + 1)* 32bit = 60bytes的报文头。最小取值5,5 * 32bit = 20bytes。
(6)Reserved(保留):6bit,equal为0
(7)TCP Flags(TCP标志位)每个长度均为1bit
          CWR:压缩,TCP标志 s值
          0x80.CEE:拥塞,0x40.URG
          :紧急,0x20。当URG = 1时,表示报文段中有紧急数据,应尽快传送.ACK
          :确认,0x10。当ACK = 1时,代表这是一个确认的TCP包,取值0则不是确认包
          .PSH:推送,0x08。当发送端PSH = 1时,接收端尽快的交付给应用进程。
          RST:复位,0x04。当RST = 1时,表明TCP连接中出现严重差错,必须释放连接,再重新建立连接.SYN
          :同步,0x02。在建立连接是用来同步序号.SYN = 1,ACK = 0表示一个连接请求报文段.SYN = 1,ACK = 1表示
          同意建立连接.FIN:终止,0x01。当FIN = 1时,表明此报文段的发送端的数据已经发送完毕,并要求释放传输连接。
(8)窗口:用来控制对方发送的数据量,通知发放已确定的发送窗口上限。
(9)检验和:该字段检验的范围包括头部和数据这两部分。由发端计算和存储,并由收端进行验证。
(10)紧急指针:紧急指针在URG = 1时才有效,它指出本报文段中的紧急数据的字节数
(11)TCP选项:长度可变,最长可达40字节

2,三次握手

(1)第一次握手:客户端将标志位SYN置为1,随机产生一个值SEQ = X,并将该数据包发送给服务器,客户机进入SYN_SENT状态,等待服务器确认。

(2)第二次握手:服务器收到数据包后由标志位SYN = 1个知道客户端请求建立连接,服务器将标志位SYN和ACK都置为1,ACK = X + 1,随机产生一个值SEQ = Y,并将该数据包发送给客户端以确认连接请求,服务器进入SYN_RCVD状态。

(3)第三次握手:客户端收到确认后,检查ACK是否为X + 1,ACK是否为1,如果正确则将标志位ACK置为1,ACK = Y + 1,并将该数据包发送给服务器,服务器检查ACK是否为K + 1,ACK是否为1,如果正确则连接建立成功,客户端和服务器进入ESTABLISHED状态,完成三次握手,随后客户端与服务器之间可以开始传输数据了。

简单来说,就是

(1)建立连接时,客户端发送SYN包(SYN = 1)到服务器,并进入到SYN-SEND状态,等待服务器确认

(2)服务器收到SYN包,必须确认客户的SYN(ACK = I + 1),同时自己也发送一个SYN包(SYN = k)时,即SYN + ACK包,此时服务器进入SYN-RECV状态

(3)客户端收到服务器的SYN + ACK包,向服务器发送确认报ACK(ACK = K + 1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。

3,四次挥手

由于TCP连接时全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭,上图描述的即是如此。

(1)第一次挥手:客户端发送一个FIN,用来关闭客户机到服务器的数据传送,客户端进入FIN_WAIT_1状态。

(2)第二次挥手:服务器收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务器进入CLOSE_WAIT状态。

(3)第三次挥手:服务器发送一个FIN,用来关闭服务器到客户端的数据传送,服务器进入LAST_ACK状态。

(4)第四次挥手:客户端收入FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务器,确认序号为收到序号+ 1,服务器进入CLOSED状态,完成四次挥手。

三,实验操作

在接下来的实验中,我们将详细分析TCP协议我们通过发送一个150KB的文件到远程服务器来研究TCP分析提供可靠的数据传输; TCP的拥塞控制算法,以及计算机和服务器之间的TCP连接的性能。

1,从计算机中捕获批量TCP传输到远程服务器

我们先从远程服务器下载一文件,通过HTTP POST方法将下载的文件传输至另一计算机中,通过wireshark数据包捕获,以及跟踪跟踪发送与接收的TCP数据段。

具体操作如下:

(1)启动浏览器,登录下载  http://gaia.cs.umass.edu/wireshark-labs/alice.txt,下载文件存放在本地计算机

(2)登录远程一服务器,http: //gaia.cs.umass.edu/wireshark-labs/TCP-wireshark-file1.html。

(3)如下显示,选择(1)中下载的文件,但不要单击“上传alice.txt文件”

(4)启动的Wireshark的,并开始捕获数据包

(5)在浏览器中单击“upload alice.txt file”进行文件上传,一旦上传完成,会有一条恭喜信息

(6)停止的Wireshark的数据包捕获

2,第一次观察捕获的踪迹

在捕获到的TCP与HTTP数据包列表中,可以看到包含SYN信息的三次握手,以及一个HTTP POST消息。

并且还会有一系列本地计算机向远程主机发送的“重组PDU的TCP段”消息(还是看到远程主机返回本地主机)的TCP ACK。

尝试回答下列问题:

<1>将文件传输到gaia.cs.umass.edu的客户端计算机(源)使用的IP地址和TCP端口号是什么?

<2> gaia.cs.umass.edu的IP地址是什么?在哪个端口号上发送和接收连接的TCP段?

3、TCP基础

根据对wireshark捕获的数据包的分析,请回答下列问题:

<3>启动TCP连接的TCP SYN的序号是多少?,此SYN的flag值是多少?

<4>从服务器回复客户端的SYN的 SYN ACK序号是多少?ACK字段的值是多少,并解释这个值计算方法?在SYN ACK包中,ACK flag与 SYN flag是多少?

<5>序号是多少的TCP消息段中包含有HTTP POST命令?(请在wireshark底部的DATA区域中找"POST")

<6>将包含有HTTP POST的TCP段作为第一个段的话,前六个TCP连接段的NO(编号)与序号(seq)是哪什么?前六个ACK段编号又是哪些?

<7>上述六个TCP段中,每个TCP段的长度是多少?

<8>对于整个嗅探中,在接收时公布的最小可能缓冲区是多少?

<9>跟踪文件中,有重新传的数据段吗?如何检查?

<10>接收器通常在ACK确认中确认多少数据?是否可以识别接收方第隔一个接收到的段来确认情况。

<11>在接收器在前六个ACK中,每个ACK段的ACK序号及数据大小是多少?

<12>TCP连接段的吞吐量是多少?(单位时间传输的字节数)?

(实验改编自计算机网络:自上而下的方法,第7版。)

猜你喜欢

转载自blog.csdn.net/wz_cow/article/details/81607837