关于TCP三次握手和四次挥手大家都在《计算机网络》课程里学过,还记得当时高超老师耐心地讲解。大学里我遇到的最好的老师大概就是这位了,虽然他只给我讲过《java程序设计》和《计算机网络》,但每次课几乎都动手敲代码或者当场做实验。好了不扯了,下面进入正题。

关于三次握手和四次挥手的理论部分可以在很多资料上找到,我今天动手抓了几个包验证书上的理论,毕竟那些字段和整个通信的过程学起来很枯燥。

一、三次握手:

      我用wireshark抓取的数据包如下:

观察其中红色方框内的3条数据包就是一次TCP建立连接的过程,客户端首先向服务器发一个数据包syn位置1,5774->80,嘿,哥们儿,您我想访问你的web资源,能不能把你的80端口打开;服务器向客户端返回一个数据包syn位置1,ack位置1,80->5774,可以啊,我已经把80端口打开了,但是为了保证待会儿可靠传输,你也把你的5774端口打开呗;最后,客户端会再向服务器端发送一个数据包ack位置1,5774->80,没问题我也把的5774端口打开了,好的到此一次TCP连接就此建立。下面具体分析数据包的各个字段。

在wireshark的这个界面中,左边这个框框是对数据包各个层的概述和详细信息,右边的框框是真实的数据包,我调成用16进制显示,最右边还有一堆乱七八糟的符号,其实就是16进制数据的ascii码解释,0000,0010,0020,0030就是16进制的地址,如果对汇编比较熟的话右边的框框应该很容易看明白。左边的框框第一行是数据包整体概述,第二行是以太网这一层(链路层)的详细信息,最主要的是双方的mac地址,第三行是网络层(网际层)的详细信息,最主要的是双方的IP地址,第四行是传输层的详细信息,最主要的是双方的端口号。

  每一层都有一个字段指向上一层,表明上一层是什么协议。这大概是因为发包的时候会在数据上依次加上应用层、传输层、网络层、链路层的头部,但是对方收到数据包后是从最底层(链路层)开始层层剥去头部解包的,所以在每层上有一个字段指向上层表明上层的协议,对方就知道下一步该怎么解包了。说了这么多,可能又要被喷了,no picture you say a J8 a !

由于建立TCP连接用不到应用层协议,所以传输层就没有相应的指明上层(应用层)的字段了。

  下面更直观地感受一下,三次握手过程中标志位的变化情况,首先客户端发送的数据包syn位置1,然后服务器端回复的数据包syn位置1,ack位置1,最后客户端发送的数据包ack位置1.以下三幅图分别为TCP三次握手的数据包中传输层的标志位字段

二、四次挥手:

  这次抓到的包和书本上分析的过程有点不一样,过程就不赘述了,直接看图分析

关于可靠传输好像没抓到合适的包啊,下次有机会再写一篇博客,今天太晚了。

三、抓取telnet明文传输的值

  众所周知,telnet在网上是明文传输,因为这样技术出现比较早,当时的人心里也没那么黑暗,想不到去盗取别人账号密码什么的,现在不同了,用telnet这种远程登录方式是很不安全的,如果黑客通过一定方式把你的流量欺骗到他的电脑,再通过抓包软件分析你的账号和密码,那就.........。所以,建议使用ssh,毕竟安全一点。

   我这次是用telnet远程登录美国的一台开放的路由器telnet   route-server.ip.att.net。账号:rviews,密码:rviews。用wireshark抓包并过滤后发现了密码和账号。还是那句话,no picture you say a J8 a!由于telnet是一个字符一个字符的传的,所以截的图可能会有点多。先用户名部分:

  可见,将这些字符连起来就可以得到rviews,也就是用户名。而且最后传送的'\r\n'还可以推断作者用的是windows系统,因为linux下的换行是'\n',而windows下是'\r\n'。密码部分只上传部分截图:

  关于可靠传输也找到了一个好点的例子,没错,就是telnet,TCP通过每个数据包的seq序列号+len长度都等于下个数据包的seq序列号,如果不等说明中间丢了比特,下次会从新的seq位开始传一定长度的数据。telnet每次好像都传1比特,传2比特的是'\r\n'字符。

用wireshark抓包分析TCP三次握手、四次挥手以及TCP实现可靠传输的机制的更多相关文章

  1. wireshark 抓包分析 TCPIP协议的握手

    wireshark 抓包分析 TCPIP协议的握手 原网址:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html 之前写过一篇 ...

  2. [转]Linux服务器上11种网络连接状态 和 TCP三次握手/四次挥手详解

    一.Linux服务器上11种网络连接状态: 图:TCP的状态机 通常情况下:一个正常的TCP连接,都会有三个阶段:1.TCP三次握手;2.数据传送;3.TCP四次挥手. 注:以下说明最好能结合”图:T ...

  3. 网络 TCP三次握手,四次挥手详解

    三次握手,四次挥手可以说是炙手可热的面试题了,来看看它究竟长什么样子吧! 我们先把流程图贴上来 : 为什么这么复杂? 因为TCP是可靠性传输. 确认可靠传输的前提:  TCP连接管理机制 用TCP首部 ...

  4. tcp三次握手四次挥手那些事

    建立TCP需要三次握手才能建立,而断开连接则需要四次挥手.三次握手,四次挥手流程图如下: 一.首先看下如何通过三次挥手----------建立连接 首先客户端发送连接请求报文,服务端接受连接后回复AC ...

  5. TCP三次握手四次挥手,通俗易懂版

    三次握手四次挥手 三次握手 其实很好理解,三次握手就是保证双手都有发送和接受的能力.那么最少三次才能验证完成 即----> 客户端发送---服务端收到----服务端发送-- 1.客户端发送 -- ...

  6. wireshark抓包直观图解 TCP三次握手/四次挥手详解

    转http://www.seanyxie.com/category/linux/ 作者:seanyxie |   一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负 ...

  7. TCP三次握手/四次挥手详解

    一. TCP/IP协议族 TCP/IP是一个协议族,通常分不同层次进行开发,每个层次负责不同的通信功能.包含以下四个层次: 1. 链路层,也称作数据链路层或者网络接口层,通常包括操作系统中的设备驱动程 ...

  8. TCP三次握手四次挥手详解

    转载 http://www.cnblogs.com/zmlctt/p/3690998.html 相对于SOCKET开发者,TCP创建过程和链接折除过程是由TCP/IP协议栈自动创建的.因此开发者并不需 ...

  9. 转---tcp三次握手四次挥手syn fin......

    http://blog.chinaunix.net/uid-22312037-id-3575121.html转自 一.TCP报文格式        TCP/IP协议的详细信息参看<TCP/IP协 ...

  10. TCP 三次握手四次挥手, ack 报文的大小.tcp和udp的不同之处、tcp如何保证可靠的、tcp滑动窗口解释

    一.TCP三次握手和四次挥手,ACK报文的大小 首先连接需要三次握手,释放连接需要四次挥手 然后看一下连接的具体请求: [注意]中断连接端可以是Client端,也可以是Server端. [注意] 在T ...

随机推荐

  1. 关于edoc程序tomcat post提交中文乱码解决办法

    1修改源码代码中页面部分指定转码格式为UTF-8替换原来的gb2312或GBK 2源码新增 water.edoc.service.FileFilter 过滤器并在web.xml首行添加制定格式 3to ...

  2. No mapping found for HTTP request with URI

    原因:spring-mvc 的xml配置文件的包名配置错误 <mvc:annotation-driven /> <context:component-scan base-packag ...

  3. 2014年4月份第2周51Aspx源码发布详情

    HFC代码转化工具源码  2014-4-8 [VS2010]源码描述:HFC代码转化工具源码 1.主要实现HTML代码转化为C#或者JS代码,为我们平时编码节省时间. 2.把代码复制到面板上,通过右键 ...

  4. HDU5128 细心、细心、细心

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5128 题意:给你n(n < 30)个点的坐标,然后让你求出这n个点能构成的两个最大矩形的面积,有 ...

  5. As 和 Is的区别

    首先来说说As是干什么的: 代码: void OnMouseEnter(object sender, MouseEventArgs e){ Ellipse ell = sender as Ellips ...

  6. java项目部署在服务器环境配置以及命令的编写

    在往项目上部署java项目(即打成的jar包),要为相应的项目配置环境变量,即项目运行所需要的jar或其他第三方的jar包,java -cp derivativeAccording.jar:lib/c ...

  7. iOS开发中检测版本,有新版本则更新

    iOS程序自动提示更新的实现方案大致分为两种: 第一种,自己服务器提供一个接口,告知相关app的当前版本,是否需要更新,以及更新的地址等信息 . 第二种,就是利用苹果的appstore 提供的相关ap ...

  8. D3 的优势

    可视化的库有很多,基于 JavaScript 开发的库也有很多,D3 有什么优势呢? (1)数据能够与 DOM 绑定在一起 D3 能够将数据与 DOM 绑定在一起,使得数据与图形成为一个整体,即图形中 ...

  9. union all 取代 select中的case when 提高查询效率

    首先union all不是适用于所有情况,其次,case when的可读性肯定要强.所以在不是特别在意性能的情况下, 可以考虑用case when. 再者,不是所有情况下的union all都要比ca ...

  10. 在Eclipse中配置Tomcat服务器

    第一步:开启Eclipse,选择“servers”选项卡,点击下方新建server的链接. 如果找不到“server”选项卡,可以使用以下方法: 选择window--> show View -- ...