TCP/IP协议和抓包

转至 http://zoukejian.blog.51cto.com/131276/57141


TCP/IP协议和抓包

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

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

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

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

 

层次

功能

协议

数据流

应用层

应用接口

HTTP,SMTP, TELNET

表示层

编码和格式转换

ASCII <-> Unicode

会话层

会话管理

 

数据段(TCP)

传输层

封装应用层的数据流

TCP,UDP, ICMP

数据报(UDP)

提供端到端的数据传输

数据包

网络层

封装传输层的数据段/数据报

IP,ARP, RIP, EIGRP, 

OSPF, BGP

网络寻址和路由

数据帧

数据链路层

封装网络层的数据包

 

网段内/子网内寻址

 

物理层

物理信号传输

 

各层的功能及相关协议:

封装和解封装:

TCP/IP协议和抓包 - gomo - gomo的博客 

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

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

据包交给下一层。

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

分传给上一层。

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

3)对应关系

 

OSI

 

TCP/IP

上三层

应用层

 

应用层

表示层

 

会话层

 

下四层

传输层

 

传输层

网络层

 

互连网络层

数据链路层

 

网络接口层

物理层

 


4)数据包:

  a. TCP 头部:

TCP/IP协议和抓包 - gomo - gomo的博客 
TCP/IP协议和抓包 - gomo - gomo的博客 

b. UDP 头部:

TCP/IP协议和抓包 - gomo - gomo的博客 
TCP/IP协议和抓包 - gomo - gomo的博客 

c. IP 头部:

TCP/IP协议和抓包 - gomo - gomo的博客

TCP/IP协议和抓包 - gomo - gomo的博客
 
    5 TCP  协议三次握手过程的描述:
TCP/IP协议和抓包 - gomo - gomo的博客
 

TCP/IP协议和抓包 - gomo - gomo的博客
  过程简述:

  (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 协议之比较:

            ----------------------------------------------------------------------------------------

                                     TCP                   UDP

            ----------------------------------------------------------------------------------------

            连接建立                面向连接               无连接

            提供给应用的数据接口   消息 数据流

            可靠性和通告           可靠,使用通告机制      不可靠,不使用通告机制

            重传                   必要时执行重传          不执行重传

            用于管理数据流的特征   用滑动窗口实现流控,    无

                                   启发式窗口大小调整,

                                   拥塞避免算法

            开销                   大                      小

   ----------------------------------------------------------------------------------------

7)  TCP 状态机:


TCP/IP协议和抓包 - gomo - gomo的博客 

解释:

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段之后,连接关闭了。 

TCP/IP协议和抓包 - gomo - gomo的博客
       方式二:(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)

TCP/IP协议和抓包 - gomo - gomo的博客
 
TCP/IP协议和抓包 - gomo - gomo的博客
 
TCP/IP协议和抓包 - gomo - gomo的博客

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. 实际操作:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值