通过连接实例解读 TCP/IP 协议最近狂补基础,猛看 TCP/IP 协议。不过,书上的东西太抽象了,没有什么数据实例,看了不 久就忘了。于是,搬来一个 sniffer,抓了数据包来看,呵呵,结合书里面得讲解,理解得 比较快。我就来灌点基础知识。 开始吧,先介绍 IP 协议。 IP 协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP 数据都是按照 IP 数据格式发送得。IP 协议提供的是不可靠无连接得服务。IP 数据包由一个头部和一个正文部分构成。正文主要是传输的数据,我们主要来理解头部数据,可以从其理解到IP 协议。 IP 数据包头部格式(RFC791)Example Internet Datagram Header 上面的就是 IP 数据的头部格式,这里大概地介绍一下。 IP 头部由 20 字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到 右。 TCP 协议 TCP 协议(TRANSMISSION CONTROL PROTOCOL)是传输层协议,为应用层提供服务,和 UDP不同的是,TCP 协议提供的可靠的面向连接的服务。在 RFC793 中是基本的 TCP 描述。关于 TCP协议的头部格式内容的说明: TCP Header FORMat TCP Header FORMat 跟 IP 头部差不多,基本的长度也是 20 字节。TCP 数据包是包含在一个 IP 数据报文中的。 好了,简单介绍到此为止。来看看我捕获的例子吧。这是一次 FTP 的连接,呵呵,是cuteftp 默认的 cuteftp 的 FTP 站点,IP 地址是:216.3.226.21。我的 IP 地址假设为:192.168.1.1。下面的数据就是 TCO/IP 连接过程中的数据传输。我们可以分析 TCP/IP 协议数据格式以及 TCP/IP 连接的三次握手(ThreeWay-Handshake)情况。下面的这些十六进制数据只是 TCP/IP 协议的数据,不是完整的网络通讯数据。 第一次,我向 FTP 站点发送连接请求(我把 TCP 数据的可选部分去掉了) 192.168.1.1->216.3.226.21 IP 头部: 45 00 00 30 52 52 40 00 80 06 2c 23 c0 a8 01 01 d8 03 e2 15 TCP 头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00 来看看 IP 头部的数据是些什么。 第一字节,“45”,其中“4”是 IP 协议的版本(Version),说明是 IP4。“5”是 IHL 位,表示 IP 头部的长度,是一个 4bit 字段,最大就是 1111 了,值为 12,IP 头部的最大长度就是60 字节。而这里为“5”,说明是 2...