5、TCPIP协议分析与编程(之一)

项目任务: ①.TCP/IP协议的分析 ②.TCP/UDP 以及 HTTP 协议简介和报文分析(通过抓包分析通信过程) ③.预习socket网络编程 注:若有软件工程等或者对这部分内容很熟悉的学生可以直接进入下一阶段,并可以作为助教帮助其他同学理解这部分内容,这部分希望能在半天就能做好。 考核内容: ①.深入理解TCP、UDP、HTTP协议 ②.使用Wireshark 抓包工具,分析实际的通信过程 ③.完成本章最后的作业提交任务和反馈内容(请在实验前看,以免影响你提交作业)

TCP协议详解:(内容整理自网络)

  1. 与UDP不同的是,TCP提供了一种面向连接的、可靠的字节流服务。面向连接比较好理解,就是连接双方在通信前需要预先建立一条连接,这犹如实际生活中的打电话。助于可靠性,TCP协议中涉及了诸多规则来保障通信链路的可靠性,总结起来,主要有以下几点:

    (1)应用数据分割成TCP认为最适合发送的数据块。这部分是通过“MSS”(最大数据包长度)选项来控制的,通常这种机制也被称为一种协商机制,MSS 规定了TCP传往另一端的最大数据块的长度。值得注意的是,MSS只能出现在SYN报文段中,若一方不接收来自另一方的MSS值,则MSS就定为536字 节。一般来讲,在不出现分段的情况下,MSS值还是越大越好,这样可以提高网络的利用率。

    (2)重传机制。设置定时器,等待确认包。

    (3)对首部和数据进行校验。

    (4)TCP对收到的数据进行排序,然后交给应用层。

    (5)TCP的接收端丢弃重复的数据。

    (6)TCP还提供流量控制。(通过每一端声明的窗口大小来提供的)

TCP报文段格式:

源端口和目的端口字段——各占2字节。端口是传输层与应用层的服务接口。传输层的复用和分用功能都要通过端口才能实现。

序号字段——占4字节。TCP连接中传送的数据流中的每一个字节都编上一个序号。序号字段的值则指的是本报文段所发送的数据的第一个字节的序号。

确认号字段——占4字节,是期望收到对方的下一个报文段的数据的第一个字节的序号。 数据偏移——占4bit,它指出TCP报文段的数据起始处距离 CP报文段的起始处有多远。“数据偏移”的单位不是字节而是32bit字(4字节为计算单位)。

保留字段——占6bit,保留为今后使用,但目前应置为0。

紧急比特URG——当URG=1时,表明紧急指针字段有效。它告诉系统此报文段中有紧急数据,应尽快传送(相当于高优先级的数据)。

确认比特ACK——只有当ACK=1时确认号字段才有效。当ACK=0时,确认号无效。

复位比特RST(Reset) —— 当RST=1时,表明TCP连接中出现严重差错(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

同步比特SYN——同步比特SYN置为1,就表示这是一个连接请求或连接接受报文。

终止比特FIN(FINal)——用来释放一个连接。当FIN=1时,表明此报文段的发送端的数据已发送完毕,并要求释放运输连接。

窗口字段——占2字节。窗口字段用来控制对方发送的数据量,单位为字节。TCP连接的一端根据设置的缓存空间大小确定自己的接收窗口大小,然后通知对方以确定对方的发送窗口的上限。

检验和——占2字节。检验和字段检验的范围包括首部和数据这两部分。在计算检验和时,要在TCP报文段的前面加上12字节的伪首部。

紧急指针字段——占16bit。紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

选项字段——长度可变。TCP首部可以有多达40字节的可选信息,用于把附加信息传递给终点,或用来对齐其它选项。

 填充字段——这是为了使整个首部长度是4字节的整数倍。

TCP的传输连接管理:

TCP是面向连接的协议,提供透明、可靠的数据流传输。

传输连接有三个阶段,即:连接建立、数据传送和连接释放。传输连接的管理就是使传输连接的建立和释放都能正常地进行。

在TCP的连接建立过程中要解决以下三个问题:

要使每一方能够确知对方的存在。

要允许双方协商一些参数(如最大报文段长度,最大窗口大小,服务质量等)。

能够对传输实体资源(如缓存大小,连接表中的项目等)进行分配。 客户服务器方式:

TCP 的连接和建立都是采用客户服务器方式。

主动发起连接建立的应用进程叫做客户(client)。

被动等待连接建立的应用进程叫做服务器(server)。

用三次握手建立TCP连接:

TCP连接建立:

A的TCP向B发出连接请求报文段,其首部中置同步比特SYN =1,并选择序号x,表明传送数据时的第一个数据字节的序号是x。

B的TCP收到连接请求报文段后,如同意,则发回确认。B在确认报文段中应置SYN=1,其确认号应为x+1,同时也为自己选择序号y。

A收到此报文段后,向B给出确认,其确认号应为 y+1。

A的TCP通知上层应用进程,连接已经建立。

当运行服务器进程的主机B的TCP收到主机A的确认后,也通知其上层应用进程,连接已经建立。

TCP连接的释放:

在数据传输结束后,通信的双方都可以发出释放连接的请求。TCP连接释放采用文雅释放过程。

TCP连接的释放是两个方向分别释放连接,每个方向上连接的释放,只终止本方向的数据传输。

当一个方向的连接释放后,TCP的连接就称为“半连接”或“半关闭”。当两个方向的连接都已释放,TCP连接才完全释放。

TCP连接释放的过程:

TCP的正常的连接建立和关闭: 任务、步骤: 任务一:使用Wireshark 抓包工具分析一下通信过程 步骤: ①:下载并安装Wireshark 抓包工具(附件中已给出软件安装包) ②:打开Wireshark 抓包工具

现在我们抓一些包来看看, 红色箭头处放大如下:

你可以选择相应的网络来分析,这里我用本地连接。点击本地连接,然后Start。 它已经开始检查你本地网络的通信信息。上图箭头所指为: 第一个是更新,第二个停止,第三个重新开始。抓了一定的包后,点击停止。 如果你电脑有在登QQ,那你也可以在筛选栏(如下图)中

输入oicq,在这里就有你QQ得一些信息,也可以看到你QQ的账号: 点开最底下的那个信息,里面就可以看到你QQ得账号,以及一些信息,选取一个数据包,点击右键, 我们可以看见有很多选项,我们选取“follow UDP stream”,即追踪该UDP流,如下图: 跟踪整个QQ会话,其他的QQ信息有兴趣的自己试试看看。

③.wireshark抓包分析(我们来分析三次握手的过程)

1.首先你先在筛选栏Filter里写上tcp回车,这样我们只检测tcp

这时候你打开浏览器,然后点击你的QQ空间的链接,就可以看到这样的一个成功的三次握手的过程,

具体过程, 下面我们来分析一下三次握手的过程: 左击上图第66行

2.分析第一次握手数据包,客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接

查看通信过程信息可以看到:源端口号:58222;目的端口号:80,;然后seq=0,ack=0标志位为:SYN。 3.左击67行:

4.第二次握手的数据包 服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的seq加1以.即0+1=1 查看通信过程信息可以看到:源端口号:80;目的端口号:58222,;然后seq=0,ack=1标志位为:SYN,ACK。 左击68行:

5.第三次握手的数据包

客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写seq的+1

查看通信过程信息可以看到:源端口号:58222;目的端口号:80,;然后seq=1,ack=1标志位为:ACK。

然后大家也可以类似的筛选DNS,HTTP等等进行分析,这里不再说明,有兴趣的可以分析看看。

作业提交:

1.完成TCP三次握手协议实验,提交截图体现你所检测到的三次握手的过程,并用自己得话分析你所提交体现在图片中的通信过程。

内容反馈:

请提交您在这一小阶段项目完成的过程中遇到的问题和您的意见及建议提交至内容反馈中,以便我们改进,衷心的感谢。

results matching ""

    No results matching ""

    results matching ""

      No results matching ""