tcp,udp,ip协议分析.pdfVIP

  • 7
  • 0
  • 约7.2千字
  • 约 10页
  • 2017-06-05 发布于河南
  • 举报
tcp,udp,ip协议分析

tcp ,udp ,ip 协议分析 互连网早期的时候,主机间的互连使用的是 NCP 协议。这种协议本身有很多缺陷,如:不能互连不同的主机,不能互连 不同的操作系统,没有纠错功能。为了改善这种缺点,大牛弄出了 TCP/IP 协议。现在几乎所有的操作系统都实现了 TCP/IP 协议栈。 TCP/IP 协议栈主要分为四层:应用层、传输层、网络层、数据链路层,每层都有相应的协议,如下图 所谓的协议就是双方进行数据传输的一种格式。整个网络中使用的协议有很多,所幸的是每一种协议都有 RFC 文档。在这里只 对 IP、TCP、UDP 协议头做一个分析。 1 / 10 首先来看看在网络中,一帧以太网数据包的格式: 在 Linux 操作系统中,当我们想发送数据的时候,我们只需要在上层准备好数据,然后提交给内核协议栈 , 内核协议栈自动 添加相应的协议头。 下面我们来看看,每一层添加的协议头具体内容。 一. TCP 协议 TCP 协议是面向连接、保证高可靠性(数据无丢失、数据无失序、数据无错误、数据无重复到达)传输层协议。 1.TCP 头分析 先来分析一下 TCP 头的格式以及每一个字段的含义: (1)端口号[16bit] 我们知道,网络实现的是不同主机的进程间通信。在一个操作系统中,有很多进程,当数据到来时要提交给哪个进程进行处 理呢?这就需要用到端口号。在 TCP 头中,有源端口号(Source Port)和目标端口号(Destination Port)。源端口号标识了发送 主机的进程, 目标端口号标识接受方主机的进程。 (2)序号[32bit] 2 / 10 序号分为发送序号(Sequence Number)和确认序号(Acknowledgment Number)。 发送序号:用来标识从 TCP 源端向 TCP 目的端发送的数据字节流,它表示在这个报文段中的第一个数据字节的顺序号。如 果将字节流看作在两个应用程序间的单向流动,则 TCP 用顺序号对每个字节进行计数。序号是 32bit 的无符号数,序号到 达 2 32 -1 后又从 0 开始。当建立一个新的连接时,SYN 标志变 1 ,顺序号字段包含由这个主机选择的该连接的初始顺序 号 ISN (Initial Sequence Number )。 确认序号:包含发送确认的一端所期望收到的下一个顺序号。因此,确认序号应当是上次已成功收到数据字节顺序号加 1。 只有 ACK 标志为 1 时确认序号字段才有效。 TCP 为应用层提供全双工服务,这意味数据能在两个方向上独立地进行传输。 因此,连接的每一端必须保持每个方向上的传输数据顺序号。 (3)偏移[4bit] 这里的偏移实际指的是 TCP 首部的长度,它用来表明 TCP 首部中 32 bit 字的数目,通过它可以知道一个 TCP 包它的用户数 据是从哪里开始的。这个字段占 4bit,如 4bit 的值是 0101,则说明 TCP 首部长度是 5 * 4 = 20 字节。 所以 TCP 的首部长度 最大为 15 * 4 = 60 字节。然而没有可选字段,正常长度为 20 字节。 (4)Reserved [6bit] 目前没有使用,它的值都为0 (5)标志[6bit] 在 TCP 首部中有 6 个标志比特。他们中的多个可同时被置为 1 。 URG 紧急指针(urgent pointer)有效 ACK 确认序号有效 PSH 指示接收方应该尽快将这个报文段交给应用层而不用等待缓冲区装满 RST 一般表示断开一个连接 例如:一个 TCP 的客户端向一个没有监听的端口的服务器端发起连接,wirshark 抓包如下 可以看到 host:192.168.63.134 向 host:192.168.63.132 发起连接请求,但是 host :192.168.63.132 并没有处于监听对应 端口的服务器端,这时 host : 192.168.63.132 发一个 RST 置位的 TCP 包断开连接。 SYN 同步序号用来发起一个连接 FIN 发送端完成发送任务(即断开连接) 3 / 10 (6)窗口大小(window)[16bit] 窗口的大小,表示源方法最多能接受的字节数。。

文档评论(0)

1亿VIP精品文档

相关文档