飓风软件下载资讯频道,让您掌握最新的IT动态
软件中心
女性专栏
最新更新
下载排行
下载推荐
资讯分类
腾讯QQ下载
加入收藏
首页
业界资讯
图形图像
网络冲浪
操作系统
工具软件
办公软件
媒体动画
精文荟萃
认证考试
网页设计
技术开发
女性
专栏
娱 乐
插件下载
编程开发
声色图库
游戏外挂
网络游戏
电子特区
E 书下载
软件特区
电脑教程
在线电影
电子书库
黑客工具
网络聊天
劲乐团外挂
疯狂广告
主页浏览
浏览辅助
离线浏览
书签工具
拨号计时
邮件检测
邮件处理
邮件群发
网页制作
网页辅助
网站推广
FTP 工具
下载工具
网络共享
网络加速
更多>>>>
优化设置
系统备份
桌面工具
剪贴工具
开关定时
CPU 相关
内存工具
磁盘工具
数据备份
卸载清除
升级补丁
系统测试
系统其它
系统增强
光盘工具
删除恢复
媒体播放
桌面制作
媒体制作
媒体管理
媒体其它
光盘刻录
音频处理
音频转换
视频处理
视频转换
Winamp区
MP3制作
MP3播放
图像处理
动画制作
图像捕捉
图像转换
图片压缩
图像浏览
图标工具
图像管理
3D制作类
图像其它
压缩解压
转换翻译
文件管理
文件分割
文件更名
文件修复
文档管理
信息管理
时钟日历
计算器类
键盘鼠标
电子阅读
汉字输入
文字处理
字体工具
其它工具
小小电影
趣味软件
测字算命
桌面屏保
电脑游戏
模拟游戏
迷你游戏
影视 MTV
精彩动画
精彩FLASH
外挂下载
网络游戏
整人工具
益智游戏
游戏补丁
魔兽争霸
教育管理
文科工具
理科工具
外语学习
学前教育
电脑学习
考试系统
天文地理
电子教室
电子书库
软件教程
高考教育
病毒防治
系统安全
系统监视
网络安全
浏览安全
密码恢复
密码管理
加密解密
网吧管理
彩票工具
股票证券
商业贸易
财务管理
行政管理
出版印刷
工程建筑
机械电子
健康医药
法律法规
交通运输
租借管理
农业相关
保险行业
网吧管理
其它行业
ASP 程序
CGI 源码
PHP 源码
其他源码
网页模版
FLASH源码
阅读工具
系统教程
网络教程
软件教程
电脑教程
平面教程
经济书籍
文学书籍
武侠小说
漫画幽默
言情小说
其它书籍
教育教学
文章搜索:关键字
搜索文章标题
搜索文章内容
两者都搜索
※
高级搜索
女性
美女图片
QQ表情
QQ下载
金山毒霸2008
飓风知道
当前位置:
飓风下载
→
网络学院
→
网络冲浪
→
网络技术
→ 通过连接实例解读TCP/IP协议
通过连接实例解读TCP/IP协议
通过连接实例解读TCP/IP协议
日期:2004年10月8日 作者:蓝点 人气:
查看:
[
大字体
中字体
小字体
]
最近狂补基础,猛看TCP/IP协议。不过,书上的东西太抽象了,没有什么数据实例,看了不久就忘了。于是,搬来一个sniffer(不是iceblood这个家伙),抓了数据包来看,呵呵,结合书里面得讲解,理解得比较快。我就来灌点基础知识。 开始吧,先介绍IP协议。 IP协议(Internet Protocol)是网络层协议,用在因特网上,TCP,UDP,ICMP,IGMP数据都是按照IP数据格式发送得。IP协议提供的是不可靠无连接得服务。IP数据包由一个头部和一个正文部分构成。正文主要是传输的数据,我们主要来理解头部数据,可以从其理解到IP协议。 IP数据包头部格式(RFC791) 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |Version| IHL |Type of Service| Total Length | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Identification |Flags| Fragment Offset | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Time to Live | Protocol | Header Checksum | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Destination Address | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ Example Internet Datagram Header 上面的就是IP数据的头部格式,这里大概地介绍一下。 IP头部由20字节的固定长度和一个可选任意长度部分构成,以大段点机次序传送,从左到右。 TCP协议 TCP协议(TRANSMISSION CONTROL PROTOCOL)是传输层协议,为应用层提供服务,和UDP不同的是,TCP协议提供的可靠的面向连接的服务。在RFC793中是基本的TCP描述。关于TCP协议的头部格式内容的说明: TCP Header Format 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Source Port | Destination Port | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Sequence Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Acknowledgment Number | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Data | |U|A|P|R|S|F| | | Offset| Reserved |R|C|S|S|Y|I| Window | | | |G|K|H|T|N|N| | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Checksum | Urgent Pointer | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Options | Padding | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | data | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ 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”,说明是20字节,这是标准的IP头部长度,头部报文中没有发送可选部分数据。 接下来的一个字节“00”是服务类型(Type of Service)。这个8bit字段由3bit的优先权子字段(现在已经被忽略),4 bit的TOS子字段以及1 bit的未用字段(现在为0)构成。4 bit的TOS子字段包含:最小延时、最大吞吐量、最高可靠性以及最小费用构成,这四个1 bit位最多只能有一个为1,本例中都为0,表示是一般服务。 接着的两个字节“00 30”是IP数据报文总长,包含头部以及数据,这里表示48字节。这48字节由20字节的IP头部以及28字节的TCP头构成(本来截取的TCP头应该是28字节的,其中8字节为可选部分,被我省去了)。因此目前最大的IP数据包长度是65535字节。 再是两个字节的标志位(Identification):“52 52”,转换为十进制就是21074。这个是让目的主机来判断新来的分段属于哪个分组。 下一个字节“40”,转换为二进制就是“0100 0000”,其中第一位是IP协议目前没有用上的,为0。接着的是两个标志DF和MF。DF为1表示不要分段,MF为1表示还有进一步的分段(本例为0)。然后的“0 0000”是分段便移(Fragment Offset)。 “80”这个字节就是TTL(Time To Live)了,表示一个IP数据流的生命周期,用Ping显示的结果,能得到TTL的值,很多文章就说通过TTL位来判别主机类型。因为一般主机都有默认的TTL值,不同系统的默认值不一样。比如WINDOWS为128。不过,一般Ping得到的都不是默认值,这是因为每次IP数据包经过一个路由器的时候TTL就减一,当减到0时,这个数据包就消亡了。这也时Tracert的原理。本例中为“80”,转换为十进制就是128了,我用的WIN2000。 继续下来的是“06”,这个字节表示传输层的协议类型(Protocol)。在RFC790中有定义,6表示传输层是TCP协议。 “2c 23”这个16bit是头校验和(Header Checksum)。 接下来“c0 a8 01 01”,这个就是源地址(Source Address)了,也就是我的IP地址。转换为十进制的IP地址就是:192.168.1.1,同样,继续下来的32位“d8 03 e2 15”是目标地址,216.3.226.21 好了,真累啊,终于看完基本的20字节的IP数据报头了。继续看TCP的头部吧,这个是作为IP数据包的数据部分传输的。 TCP头部:0d 28 00 15 50 5f a9 06 00 00 00 00 70 02 40 00 c0 29 00 00 一来就是一个两字节段“0d 28”,表示本地端口号,转换为十进制就是3368。第二个两字节段“00 15”表示目标端口,因为我是连接FTP站点,所以,这个就是21啦,十六进制当然就是“00 15”。 接下来的四个字节“50 5f a9 06”是顺序号(Sequence Number),简写为SEQ,SEQ=1348446470 下面的四个字节“00 00 00 00”是确认号(Acknowledgment Number),简写为ACKNUM。 继续两个字节,“70 02”,转换为二进制吧,“0111 0000 0000 0010”。这两个字节,总共16bit,有好多东西呢。第一个4bit“0111”,是TCP头长,十进制为7,表示28个字节(刚才说了,我省略了8字节的option数据,所以你只看见了20字节)。接着的6bit现在TCP协议没有用上,都为0。最后的6bit“00 0010”是六个重要的标志。这是两个计算机数据交流的信息标志。接收和发送断根据这些标志来确定信息流的种类。下面是一些介绍: URG:(Urgent Pointer field significant)紧急指针。用到的时候值为1,用来处理避免TCP数据流中断 ACK:(Acknowledgment field significant)置1时表示确认号(Acknowledgment Number)为合法,为0的时候表示数据段不包含确认信息,确认号被忽略。 PSH:(Push Function),PUSH标志的数据,置1时请求的数据段在接收方得到后就可直接送到应用程序,而不必等到缓冲区满时才传送。 RST:(Reset the connection)用于复位因某种原因引起出现的错误连接,也用来拒绝非法数据和请求。如果接收到RST位时候,通常发生了某些错误。 SYN:(Synchronize sequence numbers)用来建立连接,在连接请求中,SYN=1,ACK=0,连接响应时,SYN=1,ACK=1。即,SYN和ACK来区分Connection Request和Connection Accepted。 FIN:(No more data from sender)用来释放连接,表明发送方已经没有数据发送了。 这6个标志位,你们自己对号入座吧。本例中SYN=1,ACK=0,当然就是表示连接请求了。我们可以注意下面两个过程的这两位的变换。 后面的“40 00 c0 29 00 00”不讲了,呵呵,偷懒了。 后面两次通讯的数据,自己分开看吧。我们看看连接的过程,一些重要地方的变化。 第二次,FTP站点返回一个可以连接的信号。 216.3.226.21->192.168.1.1 IP头部: 45 00 00 2c c6 be 40 00 6a 06 cd ba d8 03 e2 15 c0 a8 01 01 TCP头部:00 15 0d 28 4b 4f 45 c1 50 5f a9 07 60 12 20 58 64 07 00 00 第三次,我确认连接。TCP连接建立起来。 192.168.1.1->216.3.226.21 IP头部: 45 00 00 28 52 53 40 00 80 06 2c 2a c0 a8 01 01 d8 03 e2 15 TCP头部:0d 28 00 15 50 5f a9 07 4b 4f 45 c2 50 10 40 b0 5b 1c 00 00 好,我们看看整个Threeway_handshake过程。 第一步,我发出连接请求,TCP数据为:SEQ=50 5f a9 06,ACKNUM=00 00 00 00,SYN=1,ACK=0。 第二步,对方确认可以连接,TCP数据为:SEQ=4b 4f 45 c1,ACKNUM=50 5f a9 07,SYN=1,ACK=1。 第三步,我确认建立连接。SEQ=50 5f a9 07, ACKNUM=4b 4f 45 c2,SYN=0,ACK=1。 可以看出什么变化么?正式建立连接了呢,这些东西是什么值? 我接收从216.3.226.21->192.168.1.1的下一个数据包中: SEQ=4b 4f 45 c2,ACKNUM=50 5f a9 07,SYN=0,ACK=1 这些都是很基础的东西,对于编写sniffer这样的东西是必须非常熟悉的。这里只讲解了TCP/IP协议的一点点东西,主要是头部数据的格式。 限于本人的水平,文中难免有错,请各位指正。
相关软件参考
·
用Fireworks MX制作Windows XP风格按钮
·
创建 Windows XP 图标
·
在Windows XP以幻灯片方式浏览图片
·
怎样把Windows server 2003转换成工作站系统
·
Windows NTFS分区随心转换
·
优化Windows启动 提升性能
·
把Windows ME中的五笔拿出来
·
Windows Me中的批处理
·
Windows XP到底有多安全
·
替你的Windows Me减减肥
·
在百度中搜索通过连接实例解读TCP/IP协议相关信息
·
在Google中搜索通过连接实例解读TCP/IP协议相关信息
·
Linux系统下的源码安装工具CheckInstall
·
用户为什么不选802.11n组网?
·
无线网络中的WEP加密方式详解
·
保证交换机路由器安全的方法
·
限制局域网流量的方法
·
企业网络安全管理原则探讨
·
如何架设天龙八部私服?
·
设置组策略解决共享访问受限问题
·
如何解决ADSL连接慢的问题
·
提高网络宽带路由器使用效率
·
没有无线AP实现共享无线上网
·
如何高效解决网络访问故障
·
思科路由器出现崩溃排用除法解析原因
·
无线局域网在视频监控中的应用
·
企业无线局域网组建误区
站长推荐
经典收藏
·
怎样排除网络故障
总下载排行
周下载排行
·
什么软件可以做网页?
·
JavaBean使用技巧
·
Delphi中动态链接库(DLL)的建立和..
·
TCP/IP Winsock编程要点
·
网络测试常用命令
·
用delphi实现读取foxmail的地址。..
·
Delphi的两个实用技巧(1)播放Fla..
·
最新代理列表
·
通过连接实例解读TCP/IP协议
·
Java FTP客户端类库比较
·
巧用CSS动态控制文本的属性
·
回调函数与Delphi的事件模型
·
CA 配置(Certificate Server)
·
配置Win+Apache+PHP+MySQL+Tcomc..
·
不需要任何工具,远程屏蔽telnet..
$WeekDownTop$
相关文章
·
用Fireworks MX制作Windows XP风格按钮
·
创建 Windows XP 图标
·
在Windows XP以幻灯片方式浏览图片
·
怎样把Windows server 2003转换成工作站系统
·
Windows NTFS分区随心转换
·
优化Windows启动 提升性能
·
把Windows ME中的五笔拿出来
·
Windows Me中的批处理
·
Windows XP到底有多安全
·
替你的Windows Me减减肥