软件世界网 购物 网址 三丰软件 | 小说 美女秀 图库大全 游戏 笑话 | 下载 开发知识库 新闻 开发 图片素材
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
移动开发 架构设计 编程语言 Web前端 互联网
开发杂谈 系统运维 研发管理 数据库 云计算 Android开发资料
  软件世界网 -> 互联网 -> Wireshark -> 正文阅读

[互联网]Wireshark


TCP:传输控制协议
  TCP是一种面向连接的、可靠的、基于字节流的传输层通信协议。
  面向连接: 面向连接意味着使用tcp的应用程序在传输数据前必须先建立连接,就如打电话一样,要先进行拨号,等待对方响应才能开始说话。
  可靠性:tcp协议通过下列方式来提高可靠性:

  • 应用数据被分割成TCP认为最适合发送的数据块。这和UDP完全不同,应用程序产生的数据报长度将保持不变。由TCP传递给I P的信息单位称为报文段或段
  • 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒。
  • TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。
  • 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要,TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
  • 既然I P数据报会发生重复,TCP的接收端必须丢弃重复的数据。

  • TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据。这将防止较快主机致使较慢主机的缓冲
    区溢出。

    字节流:两个应用程序通过TCP连接交换8 bit字节构成的字节流。
      另外,TCP对字节流的内容不作任何解释。TCP不知道传输的数据字节流是二进制数据,还是ASCII字符或者其他类型数据。对字节流的解释由TCP连接双方的应用层解释。

TCP首部格式
  tcp数据是被封装在IP数据包中的,和udp类似,在IP数据包的数据部分。tcp数据包的格式如下:
  
  [img]http://img.blog.csdn.net/20160401204330085
  源端口号和目的端口号与udp中类似,用于寻找发端和收端应用进程。这两个值加上IP首部中的源端IP地址和目的端IP地址唯一确定一个TCP连接,在网络编程中,一般一个IP地址和一个端口号组合称为一个套接字(socket)。
  序号:用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。在tcp中tcp用序号对每个字节进行计数(这个值与发送的帧数没有关系,而是与发送的数据字节数有关系,后面会有说明)。
  确认序号:包含发送确认的一端所期望收到的下一个序号。因此,确认序号应当是上次已成功收到数据字节序号加 1(不是单纯的序号加1,还包括数据字节数)。
  首部长度:用于记录tcp数据报首部的长度,一般为20字节,实际值为首部长度除以4。
  URG: 紧急指针( urgent pointer)有效。
  ACK: 确认序号有效。
  PSH: 接收方应该尽快将这个报文段交给应用层。
  RST: 重建连接。
  SYN: 同步序号用来发起一个连接。
  FIN: 发端完成发送任务。
  窗口大小:用于流量控制。
  检验和:检验和覆盖了整个的 TCP报文段: TCP首部和TCP数据,与udp相似需要计算伪首部。

Wireshark抓包分析TCP结构
  利用wireshark抓取一个tcp数据包,查看其具体数据结构和实际的数据:
[img]http://img.blog.csdn.net/20160401212403210
[img]http://img.blog.csdn.net/20160401212543492
TCP连接的建立
  利用TCP传输数据前,需要建立tcp连接,tcp连接的建立有3个主要过程,叫做3次握手,具体过程如下图所示:
  [img]http://img.blog.csdn.net/20160402153111306
 

过程:
   1. 首先客户端发送一个SYN包给服务器(SYN=1,Seq为主机选择的这个连接的初始序号),然后等待应答。
   2. 服务器端收到SYN包,回应给客户端一个ACK =x+1、SYN=1的TCP数据段(ACK表示确认序号有效,即收到上一个包,这里加1并不是ACK的值加1,ACK是一个标志位,这里会变成1,而x+1则是希望收到的下一个包的序列号,这个值放在包的确认序列号字段中,而只有ACK=1时,确认序列号才有效)。
   3. 客户必须再次回应服务器端一个ACK确认数据段(这里的Seq为x+1)。
  
   经过上面3个过程就建立了一个tcp连接,接着就可以发送数据了,因为建立连接使用了一个序列号x,所以发送数据的第一个字节序号为x+1。
  
   注意:这里tcp为应用层提供全双工服务,意味数据能在两个方向上独立地进行传输,因此连接的每一段都有各自的传输数据序号(对应于上图中的x和y,这两个值是没有必然联系的)。
  
Wireshark抓包分析TCP3次握手

  下面通过利用http应用层连接一个网络,实现tcp的3次握手和简单的数据交换过程,下面通过抓包来实际观察这个过程,首先我们先看看抓到的包:
  [img]http://img.blog.csdn.net/20160402124248521
  从第一行的tcp往下看,前面3个tcp包为3次握手的过程,接着http包说明成功建立连接,主机向服务器发送一个http应用请求,服务器收到请求后,返回一个tcp确认帧,接着发送一个http应答给主机,主机收到服务器的http应答数据后,又发送一个tcp确认帧,确认收到了数据。这样图中的前7个包实现了主机和服务器建立连接,并实现一次简单的数据请求应答过程。即下图所示的交互按键回显过程:
[img]http://img.blog.csdn.net/20160402125054946
接下来是按照顺序的7个数据帧的数据结构。数据帧顺序分别为:

  1. 主机发起一个tcp连接请求(tcp),
  2. 服务器响应连接请求(tcp),
  3. 主机返回ACK完成3次握手成功建立连接(tcp),
  4. 主机发送一个http网页请求(http),
  5. 服务器收到请求返回一个ACK帧(tcp),
  6. 服务器根据请求发送数据到主机(http),
  7. 主机收到服务器数据返回一个ACK帧(tcp),具体帧细节见下图:

[img]http://img.blog.csdn.net/20160402143705176
[img]http://img.blog.csdn.net/20160402143729864
[img]http://img.blog.csdn.net/20160402143745254
[img]http://img.blog.csdn.net/20160402143808067
[img]http://img.blog.csdn.net/20160402143839848
[img]http://img.blog.csdn.net/20160402143907880
[img]http://img.blog.csdn.net/20160402143929396
TCP连接的释放
  当通信双方完成数据传输,需要进行TCP连接的释放,由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接。收到一个 FIN只意味着这一方向上没有数据流动,一个TCP连接在收到一个FIN后仍能发送数据。首先进行关闭的一方将执行主动关闭,而另一方执行被动关闭。因为正常关闭过程需要发送4个TCP帧,因此这个过程也叫作4次挥手。具体过程如下图:
  [img]http://img.blog.csdn.net/20160402153544589
  

过程(默认客户端发起关闭):
  1. TCP客户端发送一个FIN,关闭客户端到服务器端的数据传送。(客户端不再发送报文给服务器端,但可接受服务器端报文)
  2. 服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。
  3.服务器关闭客户端的连接,发送一个FIN给客户端。(服务器端关闭到客户端的数据传送)
  4.客户段发回ACK报文确认,并将确认序号设置为收到序号加1。

下面通过wireshark抓包了解具体的释放连接过程,通过断开一个连接,抓取到4个TCP帧,帧顺序依次为:

  1. 主动关闭放发送一个FIN帧给被动方
  2. 被动方收到关闭信息返回一个确认ACK帧
  3. 被动方发送一个FIN帧给主动方
  4. 主动方收到被动方的FIN关闭信息返回一个ACK帧,连接释放

下面为按照顺序的帧数据结构详细信息:
[img]http://img.blog.csdn.net/20160402160804805
[img]http://img.blog.csdn.net/20160402160826898
[img]http://img.blog.csdn.net/20160402160846055
[img]http://img.blog.csdn.net/20160402160856102
TCP的最大报文段长度
  上面介绍了TCP连接的建立和释放过程,下面介绍一下TCP的最大报文段长度。
  最大报文段长度(MSS)表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。一般来说,MSS越大越好,因为报文段越大允许每个报文段传送的数据就越多,相对IP和TCP首部有更高的网络利用率。
  MSS选项只能出现在SYN报文段中,所以只能在SYN=1的帧中才会有MSS选项说明报文的最大段长度。
具体参考:
http://baike.baidu.com/link?url=c-fTckuehGMSiI5c2xCQDe3MUOKRwgdK6Q4CeO3tms8s6V3hIv5OmOQvUJvp67e90jUDAIjZfmhk8deiIjw1tK
其他
  关于TCP的内容还有很多,这里不再详细说明,但是需要知道,TCP连接的建立和释放还有几种比较特殊的情况,同时打开(SYN)建立连接,同时关闭或半关闭来释放连接的情况都是存在的,还有一些TCP的可选字段,这里都不再讲了,具体可以参考:TCP/IP 详解卷1。
......显示全文...
    点击查看全文


上一篇文章      下一篇文章      查看所有文章
2016-04-02 20:59:29  
互联网 最新文章
C++11并发API总结
16.收款(AcceptingMoney)
数据链路层综述
IP协议及IP数据报解析
《浅谈HTTP协议》
计算机网络基础
LoadRunner和RPT之间关于手动关联和参数化的
HTTPS中的对称密钥加密,公开密钥加密,数字
上班需要打卡吗?(开通微信公众号--乘着风
ofbizjmsactivemq
360图书馆 软件开发资料 文字转语音 购物精选 软件下载 美食菜谱 新闻资讯 电影视频 小游戏 Chinese Culture 股票 租车
生肖星座 三丰软件 视频 开发 短信 中国文化 网文精选 搜图网 美图 阅读网 多播 租车 短信 看图 日历 万年历 2018年1日历
2018-1-17 9:17:23
多播视频美女直播
↓电视,电影,美女直播,迅雷资源↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  软件世界网 --