Chinaunix首页 | 论坛 | 博客
  • 博客访问: 388642
  • 博文数量: 166
  • 博客积分: 1972
  • 博客等级: 上尉
  • 技术积分: 1845
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-19 21:16
文章分类

全部博文(166)

文章存档

2013年(7)

2010年(159)

分类: 网络与安全

2013-10-25 18:32:41

抓包环境介绍:
1 事先没有同目的服务端,建立过任何连接
2 抓包环境ubuntu、wireshark
3 测试场景:访问某web站点,抓取三次握手报文

额外(先看看专业的解释、自TCP卷1、协议):
数据进入协议栈时的封装过程


TCP/IP协议分层


TCP被封装后结构体


=======================================================================
以前一直对TCP被封装在IP协议中不理解,现在终于理解了。
=======================================================================


IP数据报格式


TCP包结构体

协议族

Frame:   物理层的数据帧概况
Ethernet II: 数据链路层以太网帧头部信息
Internet Protocol Version 4: 互联网层IP包头部信息
Transmission Control Protocol:  传输层T的数据段头部信息,此处是TCP
Hypertext Transfer Protocol:  应用层的信息,此处是HTTP协议


三次握手定义:


三次握手图解:

TCP三次握手(用于建立连接
场景:以客户端为主动发起方,向服务器建立连接。
正则表达式
ip.dst==113.108.16.123 or ip.src==113.108.16.123

三次握手、三个报文:


时间戳值字段(TSval)
时间戳回显应答字段(TSecr)

解释:
ISN 初始序号


第一次握手:

客户端(主动方):
发送SYN标记位为1的报文、其中还包括:指定连接端口、以及初始序号



根据TCP报文结构(只说和三次握手直接概念相关)
源端口(Source port):42578
目的端口(Destination port: ):80
32位序号(Sequence number: 0    (relative sequence number)):0
这里很容易混淆,因此完全第一次和服务器建立连接,因此序号是0很正常。后面有大量就是非0的。

32位确认号:无
这里也很容易混淆,因为第一发送,当然没有确认号
标记位:这里很好理解、也很容易识别,只有SYN置为1


第二次握手:
服务端(被动方):
返回 客户端带有序列号、SYN标记位 的报文,作为应答。
同时将确认序号设置为 客户端序列号+1、进行确认


根据TCP报文结构(只说和三次握手直接概念相关
源端口、目的端口不再说明
返回部分1:(客户端原始内容

客户端序号:Sequence number: 0    (relative sequence number)
这里很容易迷惑,服务端报文中的这个字段值,就是客户端发送过来的报文序号

客户端SYN标记:

这个很容易看到、返回时确实携带了

返回部分2:(服务端本次携带内容)

确认序号(Acknowledgment number: 1    (relative ack number)):1
即0+1 = 1

备注:
本次,服务端序号为0


第三次握手:
客户端(主动方):
将确认序号设置为 服务端初始序号+1 、附带ACK标记位为1 进行确认


报文携带内容:
1 确认序列号(Acknowledgment number: 1    (relative ack number)):1
即服务端序列号0(上文有描述)+1 ,即0+1 = 1
2 ACK标记位 置为1

至此,TCP连接前的三次握手成功。

阅读(948) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~