Jeffrey’s Blog

TCP/IP协议和抓包分析(有图)

TCP/IP协议和抓包分析

1. 数据包
1
OSI 参考模型:
起源:没有标准通信协议造成的混乱

目标:定义各种网络节点间的通信的框架

目的:通信标准,解决异种网络互连时所遇到的兼容性问题

优点:各层互不干扰;简化开发;快速定位网路故障

各层的功能及相关协议:

封装和解封装:

封装: 将上层交给自己的数据包(泛指各种PDU)放进一个或多个本层能理解的数据

包的Data部分,并为这些数据包填充适当的头部字段信息,然后将装配好的数

据包交给下一层。

解封装:从下层接过本层能理解的数据包,然后去掉本层的数据包头部字段,将Data

分传给上一层。

2DOD 模型(TCP/IP 协议族):

3)对应关系


4)数据包:

a. TCP 头部:

b. UDP 头部:

c. IP 头部:

5TCP 协议三次握手过程的描述:

过程简述:

1)服务器应用启动,建立相应的TCB,进入LISTEN状态;

2客户端向服务器端发送一个TCP段,该段设置SYN标识,请求跟服务器端应用同步,之后进入SYN-SENT状态,等待服务器端的响应;

3服务器端应用收到客户端的SYN 段之后,发送一个TCP段响应客户端,该段设置SYNACK标识,告知客户端自己接受它的同步请求,同时请求跟客户端同步。之后进入SYN-RECEIVED状态

4客户端收到服务器端的SYN+ACK段之后,发送一个TCP段,该段设置ACK标识,告知服务器端自己接受它的同步请求。之后,进入ESTABLISHED状态

5服务器端应用收到客户端的ACK段之后,进入ESTABLISHED状态

到此,客户端跟服务器端的TCP连接就建立起来了。

6TCP/UDP 协议之比较:

7) TCP 状态机:


解释:

TCP 连接建立的两种方式:

A)常规的三次握手方式:见5TCP 协议三次握手过程的描述

B)同步开放方式:

1) 服务器应用启动,建立相应的TCB,进入LISTEN状态;

2客户端向服务器端发送一个TCP段,该段设置SYN标识,请求跟服务器端应用同步,之后进入SYN-SENT状态,等待服务器端的响应;

3服务器端应用收到客户端的SYN 段之后,发送一个TCP段响应客户端,该段设置SYN,告知客户端自己请求跟它同步。之后进入SYN-RECEIVED状态

4客户端收到服务器端的SYN段之后,发送一个TCP段,该段设置ACK标识,告知服务器端自己接受它的同步请求。之后进入SYN-RECEIVED状态

5服务器端应用收到客户端的ACK段之后,向客户端发送一个TCP段,该段设置ACK标识,告知客户端自己接受它的同步请求,进入ESTABLISHED状态

6客户端收到服务器端的ACK段之后,进入ESTABLISHED状态

到此,客户端跟服务器端的TCP连接就建立起来了。

使用这种方式建立TCP连接的应用比较少。

注意:

1)对于服务器端来说,不管使用方式A还是方式B建立连接,它都经历3个状态:LISTENà SYN-RECEIVEDà ESTABLISHED;而对于客户端来说,就不一样了。对于方式A,客户端经历2个状态:SYN-SENTà ESTABLISHED, 对于方式B,客户端要经历3个状态:SYN-SENTà SYN-RECEIVED à ESTABLISHED

2)对于服务器端来说,当它收到客户端的SYN段之后,不管它是发送SYN+ACK段响应客户端,还是发送SYN段响应客户端,它都进入到SYN-RECEIVED状态。

TCP 关闭连接的两种方式:

方式一:

1客户端向服务器端发送一个FIN段,请求关闭连接。之后进入FIN_WAIT_1状态;
2服务器端收到客户端的FIN段之后,发送一个ACK段,响应客户端。之后,进入CLOSE_WAIT 状态
3客户端收到服务器端的ACK段之后,进入FIN_WAIT_2状态。等待服务器端的FIN段。
4服务器端等待应用关闭后,发送一个FIN段给客户端。进入LAST_ACK状态
5客户端收到服务器端的FIN段之后,发送一个ACK段响应服务器端。之后进入TIME_WAIT状态。一旦time_wait 计时器超时后,连接就关闭了。 6服务器端收到客户端的ACK段之后,连接关闭了。

方式二:

1客户端向服务器端发送一个FIN段,请求关闭连接。之后进入FIN_WAIT_1状态
2服务器端收到客户端的FIN段之后,发送一个FIN段,响应客户端。之后,进入CLOSE_WAIT 状态
3客户端收到服务器端的FIN段之后,发送一个ACK段响应服务器端。之后进入CLOSING状态
4服务器端收到客户端的ACK段之后,发送一个ACK段相应客户端。之后关闭连接。
5客户端收到服务器端的ACK段之后,进入TIME_WAIT状态。一旦time_wait 计时器超时后,连接就关闭了。

还有其它关闭连接的方式,本文未列出。

8)推荐阅读:The TCP/IP Guide (http://www.tcpipguide.com/free/index.htm)

2. 网络抓包(客户机(ethereal),服务器(tcpdump),网络设备(debug)

3. 故障/异常诊断:

1) PING 不通,不能完成三次握手:

a. 检查路由:route print/ip route list/sh ip route

b. 如果路由OKping 网关

c. 如果网关能ping通,tracert/traceroute/traceroute <远程地址>,找出故障位置

2) 完成了三次握手,但是不能正常使用服务

a. 检查服务是否起来了

b. 检查服务是否在你试图连接的地址上监听

c. 检查连接是否被防火墙(网络防火墙,主机防火墙,应用防火墙)干掉了

3) 网络中充斥着大量的SYN 包:

a. linux下抓取SYN 包进行分析:tcpdump ‘tcp[tcpflags] & (tcp-syn) != 0’ and ‘tcp[tcpflags] & (tcp-ack) = 0′

b. 如果可以上65的交换机或者路由器,可以启用TCP 拦截进行跟踪

4. 实际操作:

# Last modified at: October 25th, 2008 01:11pm
给本文打分: 1 Star2 Stars3 Stars4 Stars5 Stars (No Ratings Yet)
Loading ... Loading ...

转载本站文章请注明, 转载自:  Jeffrey’s Blog [http://blog.zhangjianfeng.com]
本文链接:  http://blog.zhangjianfeng.com/article/977
@ 阅读全文 | 2008/10/25 01:08pm | Category: 系统管理 | 736 views   Print This Post  
收藏到网摘: Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment