TCP/IP网络协议及流程分析

来源:互联网 发布:serial for mac 破解 编辑:程序博客网 时间:2024/05/22 15:39
利用wireshark抓包,分析:
1TCP/IP协议的报文封装方式;
2)主要的TCP/IP协议及其层次结构;
3)以典型网络应用(PPPoEHTTP,FTP,SMTP/POP3等)的工作原理及流程(例如,以http://www.tsinghua.edu.cn为例,分析其实现原理、涉及到的协议及协议之间配合工作流程)

一、TCP/IP协议的报文封装方式


    1. 封装概念

一台计算机要发送数据到另一台计算机,数据首先必须打包,打包的过程称为封装,即在数据前面加上特定的协议头部,如图1显示。

1封装

    1. TCP/IP协议的报文封装

TCP/IP网络体系结构为例

1.2.1报文封装流程


2封装流程
数据从一台设备通过网络传输到另一台设备的时候,需要将数据进行封装,而数据进入协议栈后整个封装过程如图2所示。
不同的协议层对数据包有不同的称谓,在传输层叫做段(segment),在网络层叫做数据报(datagram),在链路层叫做帧(frame)。数据封装成帧后发到传输介质上,到达目的主机。

1.2.2报文解封流程


3解封流程
经过封装的报文按照一定方式,到达接收方后,接收方需要对数据进行解封装,才能获得其中的数据。报文解封装,也就是在不同的层次对报文去掉相应的标识。数报文解封装的过程如图3所示。

二、主要的TCP/IP协议及其层次结构;

2.1 TCP/IP体系结构


3 OSI模型和TCP/IP模型的比较
         由图3可见,在TCP/IP模型中应用层包括了OSI/RM中的应用层,表示层和会话层;TCP/IP模型中网络接口层包括了OSI/RM中的数据链路层和物理层。在图33列中展示了TCP/IP模型中各层次的主要协议。而在图34列中展示了TCP/IP模型中描述了各层次的数据单元。

2.2主要的TCP/IP协议


4主要的TCP/IP协议
         4所示是在TCP/IP网络结构中各层的主要协议。层次结构由高到低分别是应用层,传输层,网际层,网络接口层。

三、以典型网络应用的工作原理及流程

http://www.tsinghua.edu.cn为例,分析其实现原理、涉及到的协议及协议之间配合工作流程。

3.1相关报文格式

3.1.1 TCP报文格式

5表示了TCP报文数据格式。TCP报文分为首部和数据部分,首部的前20字节是固定的,后面有4N字节的可选项(N为整数),因此TCP首部最小长度为20字节。通常Internet网上的TCP报文的首部长度为20字节。

5 TCP协议数据报格式
源端口、目标端口:计算机上的进程要和其他进程通信是要通过计算机端口的,而一个计算机端口某个时刻只能被一个进程占用,所以通过指定源端口和目标端口,就可以知道是哪两个进程需要通信。源端口、目标端口是用16位表示的,可推算计算机的端口个数为2^16个。
发送序号:表示本报文段所发送数据的第一个字节的编号。在TCP连接中所传送的字节流的每一个字节都会按顺序编号。由于序列号由32位表示,所以每2^32个字节,就会出现序列号回绕,再次从0开始。那如何区分两个相同序列号的不同TCP报文段就是一个问题了,则通过可选项中的时间戳来区分。
接受序号:表示接收方期望收到发送方下一个报文段的第一个字节数据的编号。也就是告诉发送发:我希望你(指发送方)下次发送的数据的第一个字节数据的编号是这个确认号。也就是告诉发送方:我希望你(指发送方)下次发送给我的TCP报文段的序列号字段的值是这个确认号。
TCP首部长度:由于TCP首部包含一个长度可变的选项部分,所以需要这么一个值来指定这个TCP报文段到底有多长。或者可以这么理解:就是表示TCP报文段中数据部分在整个TCP报文段中的位置。该字段的单位是32位字,即:4个字节。
URG:表示本报文段中发送的数据是否包含紧急数据。URG=1,表示有紧急数据。后面的紧急指针字段只有当URG=1时才有效。
ACK:表示是否前面的确认号字段是否有效。ACK=1,表示有效。只有当ACK=1时,前面的确认号字段才有效。TCP规定,连接建立后,ACK必须为1
PSH:告诉对方收到该报文段后是否应该立即把数据推送给上层。如果为1,则表示对方应当立即把数据提交给上层,而不是缓存起来。
RST:只有当RST=1时才有用。如果你收到一个RST=1的报文,说明你与主机的连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。或者说明你上次发送给主机的数据有问题,主机拒绝响应。
SYN:在建立连接时使用,用来同步序号。当SYN=1ACK=0时,表示这是一个请求建立连接的报文段;当SYN=1ACK=1时,表示对方同意建立连接。SYN=1,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中SYN才置为1
FIN:标记数据是否发送完毕。如果FIN=1,就相当于告诉对方:我的数据已经发送完毕,你可以释放连接了
窗口大小:表示现在运行对方发送的数据量。也就是告诉对方,从本报文段的确认号开始允许对方发送的数据量。窗口大小是个动态的值,因为TCP是用的滑动窗口协议,传输数据的速率都是根据窗口大小来调整的。可以把窗口理解为一个缓存,而且窗口大小跟MSS是没有任何关系的。窗口是为了控制传输过程中的速度。
校验和:提供额外的可靠性。具体如何校验,参考其他资料。
紧急指针:标记紧急数据在数据字段中的位置。
选项部分:其最大长度可根据TCP首部长度进行推算。TCP首部长度用4位表示,那么选项部分最长为:(2^4-1)*4-20=40字节。

3.1.2 IP报文格式

IPInternet Protocol)数据报由头部(header,也称为首部)和正文部分构成。头部有一个20字节的固定长度部分和一个长度为4NN取值范围110)选项的部分。头部格式如图6所示。

6 IP数据报首部格式
各字段解释如下:
版本(Version):该字段指出该数据报是按哪一个版本的IP协议定义的。其中4代表IPv46代表IPv6
头部长度(IHL)字段:用来指明头部包含的长度为32比特的字的个数。
服务类型:使主机可以告诉通信子网它需要的服务。
总长:该字段包括数据报中的头部和数据的长度,最长65535字节。当长数据报要分段传送时,“总长”是指分段后每段的首部长度与数据长度的总和。
标识:该字段用来让目的主机判断新来的分段属于哪个数据报,所有属于同一个数据报的分段包含同样的标识值。此“标识”没有顺序号的意思,因为IP是无连接服务,不存在按顺序接收的问题。紧跟着的是1个无用的位,然后是分别占1位的标志字段DFMF
DF该位为1时,代表不要分段,意味着数据报必须绕过可能在最优路径上的小分组网络,而使用次优路由。DF位为0时,表示该分组可以分段。
MF该位为1时,代表后面还有分段。除最后一个分段外,所有其他分段都应设置该位,它用来标志源数据报的所有分段是否都已被接收方收到。
分段偏移。说明分段处在原始数据报的什么位置。即相对于数据报的起点该分段的开始位置。
生命期:该字段是用于限制分组声明周期的计数器。推荐以时间计数,最长255秒,在每个节点都要递减,减到零时即丢弃该分组。但实际上,生命期是以节点数计数的,当它见到零时,节点就丢弃该分组,并向源主机发送一个警告分组。这就能防止数据报在网中无限制地漫游。
协议:该字段说明将数据报的数据部分送给哪个上层实体,可能是TCPUDPICMP或者其他基于IP的协议实体
源地址/目的地址:指源IP地址字段和目的IP地址字段。

3.1.3 DNS报文格式

DNSDomain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53

7 DNS介绍

8 DNS查找过程

9 DNS报文格式

10 DNS消息格式

11 DNS报文中Header部分
12 DNS报文中Question部分
13 DNS报文中其他部分

3.1.4 HTTP报文格式

超文本传输协议(Hypertext Transfer Protocol,简称HTTP)是应用层协议。HTTP是一种请求/响应式的协议,即一个客户端与服务器建立连接后,向服务器发送一个请求;服务器接到请求后,给予相应的响应信息。
基于C/S模式,有两种HTTP消息:请求和响应。
14 HTTP请求消息格式
15 HTTP响应消息格式

3.2工作原理及流程

16流程

3.2.1 DNS域名解析

首先输入http://www.tsinghua.edu.cn。由于本机的DNS缓存没有该域名所以需要对域名进行解析。如图17DNS报文
17 DNS报文

18 DNS查询报文
         由图18可得,使用到的协议主要有DNSUDPIP协议。主要分析一下DNS协议中的信息。DNSFlags字段中为0x0100,表示是标准的查询DNS报文,而且由Questions字段指出问题有1个,而问题在Queries部分显示出来,是为域名解析。
19 DNS应答报文
         19是图17中第二个DNS报文,它是对图18 DNS报文的应答。同样采用的主要有DNSUDPIP协议。其中UDP,IPMAC帧所指的源地址和目的地址与DNS查询报文正好相反。
主要分析一下DNS协议中的信息。DNSFlags字段为0x8180表示是标准查询的应答DNS报文,最后一个‘0’则表示此应答没有差错。同时该报文包含1个问题(即查询报文中的问题),2个回答和额外信息,1个授权信息。
2个回答分别为一个是指明该域名的规范名称,第2个回答则是指明该域名的规范名称的IP地址166.111.4.100

3.2.2建立连接(三次握手)

20三次握手
21三次握手的抓包
         20展示了三次握手的流程,在DNS域名解析完成后,就会建立TCP连接,由于输入的网站里面可能嵌套了其他的资源,所以在抓包时候建立了多个TCP连接。由于共通性,我们截取了其中一个TCP链接进行分析三次握手。
22第一次握手报文1
23第一次握手的报文2
         第一次握手:主要特点在于TCP报文中首部。TCP报文的SYN=1ACK=0,SYN用来同步序号。IP报文中指明了源地址(即本机IP地址)和目的地址(即该网站服务器的IP地址,在第一个DNS解析时就得到了166.111.4.100)还指出上层协议是TCP协议。在TCP报文中指明了源端口和目的端口,同时发送序号为0。在可选项中规定最大报文段长度1460字节。需注意的是该字段只出现在SYN=1的报文中。同时设置了SACK确认项,用来确保只重传缺少的报文段,而不是重传所有报文段。
24第二次握手报文
         第二次握手主要特征在于TCP报文中SYN=1,ACK=1同时确认序号等于第一次握手的发送序号+1,即Ack=Seq+1。同时再产生一个新的发送序号。表示对第一次握手的确认报文。
25第三次握手报文
         第三次握手则是ACK=1,同时确认序号等于第二次握手的发送序号+1。此报文表示对第二次握手的确认报文,即确认报文的确认报文。
采用三次握手的目的是为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生错误例如:“已失效的连接请求报文段”的产生在这样一种情况下:client发出的第一个连接请求报文段并没有丢失,而是在某个网络结点长时间的滞留了,以致延误到连接释放以后的某个时间才到达server。本来这是一个早已失效的报文段。但server收到此失效的连接请求报文段后,就误认为是client再次发出的一个新的连接请求。于是就向client发出确认报文段,同意建立连接。假设不采用“三次握手”,那么只要server发出确认,新的连接就建立了。

3.2.3 HTTP请求/响应

由于有太多的HTTP报文并且HTTP有共通性,我们就截取一个请求和一个响应报文,来了解一下HTTP协议。
26 HTTP请求/响应报文
27 HTTP请求报文
GET /HTTP/1.1\r\n得到该请求报文的操作是检索URL.GET方法要求服务器将URL定位的资源放在响应报文的数据部分,回送给客户端.同时使用的是HTTP1.1版本。
HTTP1.1版本与1.0版本最大的不同在于HTTP1.1是持久连接,所谓持久连接,就是服务器在发送响应后仍然在一段时间内保持这条连接,允许在同一个连接中存在多次数据请求和响应,即在持久连接情况下,服务器在发送完响应后并不关闭TCP连接,而客户端可以通过这个连接继续请求其他对象。而HTTP1.0版本是非持久连接,即服务器发送完响应后主动关闭TCP连接,客户端被动关闭连接。
28 HTTP响应报文
此时由状态码为200表示服务器已成功接收到请求并进行处理。同时服务器将资源副本写到报文中。

3.2.4释放连接(四次挥手)

29四次挥手
30四次挥手报文
31第一次挥手
         第一次挥手由客户端发起,报文中TCP首部FIN=1,ACK=1,表示客户端关闭与服务器的连接。相当于服务器的读通道关闭了。
32第二次挥手
         第二次挥手由服务器发起,用来确认接受客户端的关闭连接请求。其中TCP首部确认位ACK=1,同时确认序号等于客户端的关闭连接请求报文中发送序号+1相当于客户端的写通道关闭了
33第三次挥手
         第三次挥手也是由服务器发起,用于服务器关闭与客户端的连接,报文中TCP首部FIN=1,ACK=1相当于客户端的读通道关闭了
34第四次挥手
         第四次挥手,客户端发送确认报文,此时ACK=1,发送序号等于服务器的关闭连接请求报文中发送序号+1相当于服务器写通道关闭
原创粉丝点击