精华内容
下载资源
问答
  • (Packet Details Pane) wireshark与对应的OSI七层模型 TCP包的具体内容 实例分析TCP三次握手过程 这篇文章介绍另一个好用的抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP、TCP、UDP 等网络协议包。...

    目录

    1. wireshark介绍
    2. wireshark不能做的
    3. wireshark VS Fiddler
    4. 同类的其他工具
    5. 什么人会用到wireshark
    6. wireshark 开始抓包
    7. wireshark 窗口介绍
    8. wireshark 显示过滤
    9. 保存过滤
    10. 过滤表达式
    11. 封包列表(Packet List Pane)
    12. 封包详细信息 (Packet Details Pane)
    13. wireshark与对应的OSI七层模型
    14. TCP包的具体内容
    15. 实例分析TCP三次握手过程

    这篇文章介绍另一个好用的抓包工具 Wireshark, 用来获取网络数据封包,包括 HTTP、TCP、UDP 等网络协议包。

    记得大学的时候就学习过TCP的三次握手协议,那时候只是知道,虽然在书上看过很多TCP和UDP的资料,但是从来没有真正见过这些数据包, 老是感觉在云上飘一样,觉得不踏实。有了wireshark就能截获这些网络数据包,可以清晰的看到数据包中的每一个字段。更能加深我们对网络协议的理解。对我而言, wireshark 是学习网络协议最好的工具。

    wireshark介绍

    wireshark的官方下载网站:http://www.wireshark.org/

    wireshark是非常流行的网络封包分析软件,功能十分强大。可以截取各种网络封包,显示网络封包的详细信息。

    wireshark是开源软件,可以放心使用。可以运行在Windows和Mac OS上。

    使用wireshark的人必须了解网络协议,否则就看不懂wireshark了。

    Wireshark不能做的

    为了安全考虑,wireshark只能查看封包,而不能修改封包的内容,或者发送封包。

    Wireshark VS Fiddler

    Fiddler是在windows上运行的程序,专门用来捕获HTTP,HTTPS的。

    wireshark能获取HTTP,也能获取HTTPS,但是不能解密HTTPS,所以wireshark看不懂HTTPS中的内容

    总结,如果是处理HTTP,HTTPS 还是用Fiddler, 其他协议比如TCP,UDP 就用wireshark

    同类的其他工具

    • 微软的network monitor
    • sniffer

    什么人会用到wireshark

    1. 网络管理员会使用wireshark来检查网络问题

    2. 软件测试工程师使用wireshark抓包,来分析自己测试的软件

    3. 从事socket编程的工程师会用wireshark来调试

    4. 听说,华为,中兴的大部分工程师都会用到wireshark。

    总之跟网络相关的东西,都可能会用到wireshark.

    wireshark 开始抓包

    开始界面

    image

    wireshark是捕获机器上的某一块网卡的网络包,当你的机器上有多块网卡的时候,你需要选择一个网卡。

    点击Caputre->Interfaces.. 出现下面对话框,选择正确的网卡。然后点击”Start”按钮, 开始抓包

    image

    Wireshark 窗口介绍

    image

    WireShark 主要分为这几个界面

    1. Display Filter(显示过滤器), 用于过滤

    2. Packet List Pane(封包列表), 显示捕获到的封包, 有源地址和目标地址,端口号。颜色不同,代表

    3. Packet Details Pane(封包详细信息), 显示封包中的字段

    4. Dissector Pane(16进制数据)

    5. Miscellanous(地址栏,杂项)

    Wireshark 显示过滤

    image

    使用过滤是非常重要的, 初学者使用wireshark时,将会得到大量的冗余信息,在几千甚至几万条记录中,以至于很难找到自己需要的部分。搞得晕头转向。

    过滤器会帮助我们在大量的数据中迅速找到我们需要的信息。

    过滤器有两种,一种是显示过滤器,就是主界面上那个,用来在捕获的记录中找到所需要的记录

    一种是捕获过滤器,用来过滤捕获的封包,以免捕获太多的记录。在Capture -> Capture Filters 中设置

    保存过滤

    在Filter栏上,填好Filter的表达式后,点击Save按钮, 取个名字。比如”Filter 102″,

    image

    Filter栏上就多了个”Filter 102″ 的按钮。

    image

    过滤表达式的规则

    表达式规则

    1. 协议过滤

    比如TCP,只显示TCP协议。

    2. IP 过滤

    比如 ip.src ==192.168.1.102 显示源地址为192.168.1.102,

    ip.dst==192.168.1.102, 目标地址为192.168.1.102

    3. 端口过滤

    tcp.port ==80, 端口为80的

    tcp.srcport == 80, 只显示TCP协议的原端口为80的。

    4. Http模式过滤

    http.request.method==”GET”, 只显示HTTP GET方法的。

    5. 逻辑运算符为 AND/ OR

    常用的过滤表达式

    封包列表的面板中显示,编号,时间戳,源地址,目标地址,协议,长度,以及封包信息。你可以看到不同的协议用了不同的颜色显示。封包列表(Packet List Pane)

    你也可以修改这些显示颜色的规则, View ->Coloring Rules.

    image

    封包详细信息 (Packet Details Pane)

    这个面板是我们最重要的,用来查看协议中的每一个字段。

    各行信息分别为:

    Frame: 物理层的数据帧概况

    Ethernet II: 数据链路层以太网帧头部信息

    Internet Protocol Version 4: 互联网层IP包头部信息

    Transmission Control Protocol: 传输层T的数据段头部信息,此处是TCP

    Hypertext Transfer Protocol: 应用层的信息,此处是HTTP协议

    wireshark与对应的OSI七层模型

    image

    TCP包的具体内容

    从下图可以看到wireshark捕获到的TCP包中的每个字段。

    image

    实例分析TCP三次握手过程

    看到这, 基本上对wireshak有了初步了解, 现在我们看一个TCP三次握手的实例

    三次握手过程为

    image

    这图我都看过很多遍了, 这次我们用wireshark实际分析下三次握手的过程。

    打开wireshark, 打开浏览器输入 http://www.cnblogs.com/tankxiao

    在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击”Follow TCP Stream”,

    这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图

    image

    图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。

    第一次握手数据包

    客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。如下图

    image

    第二次握手的数据包

    服务器发回确认包, 标志位为 SYN,ACK. 将确认序号(Acknowledgement Number)设置为客户的I S N加1以.即0+1=1, 如下图

    image

    第三次握手的数据包

    客户端再次发送确认包(ACK) SYN标志位为0,ACK标志位为1.并且把服务器发来ACK的序号字段+1,放在确定字段中发送给对方.并且在数据段放写ISN的+1, 如下图:

    image

    就这样通过了TCP三次握手,建立了连接。

    作者:小坦克

    来源:http://suo.im/6nWckI

    展开全文
  • TCP三次握手TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:1.客户端向服务器发送一个SYN...

    TCP三次握手

    TCP连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换TCP窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器计算机的过程:

    1.客户端向服务器发送一个SYN置位的TCP报文,其中包含连接的初始序列号x和一个窗口大小(表示客户端上用来存储从服务器发送来的传入段的缓冲区的大小)。

    2.服务器收到客户端发送过来的SYN报文后,向客户端发送一个SYN和ACK都置位的TCP报文,其中包含它选择的初始序列号y、对客户端的序列号的确认x+1和一个窗口大小(表示服务器上用来存储从客户端发送来的传入段的缓冲区的大小)。

    3. .客户端接收到服务器端返回的SYN+ACK报文后,向服务器端返回一个确认号y+1和序号x+1的ACK报文,一个标准的TCP连接完成。

    TCP使用类似的握手过程来结束连接。这可确保两个主机均能完成传输并确保所有的数据均得以接收

    TCP Client

    Flags

    TCP Server

    1 Send SYN (seq=x)

    ----SYN--->

    SYN Received

    2 SYN/ACK Received

    Send SYN (seq=y),ACK (x+1)

    3 Send ACK (y+1)

    ----ACK--->

    ACK Received,Connection Established

    w: ISN (Initial Sequence Number) oftheClient

    x: ISN of the Server

    TCP三次握手及原理

    TCP/IP是很多的不同的协议组成,实际上是一个协议组,TCP用户数据报表协议(也称作TCP传输控制协议,Transport Control Protocol。可靠的主机到主机层协议。这里要先强调一下,传输控制协议是OSI网络的第四层的叫法,TCP传输控制协议是TCP/IP传输的6个基本协议的一种。两个TCP意思非相同。 )。TCP是一种可靠的面向连接的传送服务。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。 通过每个TCP传输的字段指定顺序号,以获得可靠性。是在OSI参考模型中的第四层,TCP是使用IP的网间互联功能而提供可靠的数据传输,IP不停的把报文放到 网络上,而TCP是负责确信报文到达。在协同IP的操作中TCP负责:握手过程、报文管理、流量控制、错误检测和处理(控制),可以根据一定的编号顺序对非正常顺序的报文给予从新排列顺序。关于TCP的RFC文档有RFC793、RFC791、RFC1700。

    在TCP会话初期,有所谓的“三握手”:对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。由于TCP需要时刻跟踪,这需要额外开销,使得TCP的格式有些显得复杂。下面就让我们看一个TCP的经典案例,这是后来被称为MITNICK攻击中KEVIN开创了两种攻击技术:

    TCP会话劫持

    SYN FLOOD(同步洪流)

    在这里我们讨论的时TCP会话劫持的问题。

    先让我们明白TCP建立连接的基本简单的过程。为了建设一个小型的模仿环境我们假设有3台接入互联网的机器。A为攻击者操纵的攻击机。B为中介跳板机器(受信任的服务器)。C为受害者使用的机器(多是服务器),这里把C机器锁定为目标机器。A机器向B机器发送SYN包,请求建立连接,这时已经响应请求的B机器会向A机器回应SYN/ACK表明同意建立连接,当A机器接受到B机器发送的SYN/ACK回应时,发送应答ACK建立A机器与B机器的网络连接。这样一个两台机器之间的TCP通话信道就建立成功了。

    B终端受信任的服务器向C机器发起TCP连接,A机器对服务器发起SYN信息,使C机器不能响应B机器。在同时A机器也向B机器发送虚假的C机器回应的SYN数据包,接收到SYN数据包的B机器(被C机器信任)开始发送应答连接建立的SYN/ACK数据包,这时C机器正在忙于响应以前发送的SYN数据而无暇回应B机器,而A机器的攻击者预测出B机器包的序列号(现在的TCP序列号预测难度有所加大)假冒C机器向B机器发送应答ACK这时攻击者骗取B机器的信任,假冒C机器与B机器建立起TCP协议的对话连接。这个时候的C机器还是在响应攻击者A机器发送的SYN数据。

    TCP协议栈的弱点:TCP连接的资源消耗,其中包括:数据包信息、条件状态、序列号等。通过故意不完成建立连接所需要的三次握手过程,造成连接一方的资源耗尽。

    通过攻击者有意的不完成建立连接所需要的三次握手的全过程,从而造成了C机器的资源耗尽。序列号的可预测性,目标主机应答连接请求时返回的SYN/ACK的序列号时可预测的。(早期TCP协议栈,具体的可以参见1981年出的关于TCP雏形的RFC793文档)

    TCP头结构

    TCP协议头最少20个字节,包括以下的区域(由于翻译不禁相同,文章中给出相应的英文单词):

    TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是标示报问的返回地址。

    TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算机上的应用程序地址接口。

    TCP序列号(序列码,Sequence Number):32位的序列号由接收端计算机使用,重新分段的报文成最初形式。当SYN出现,序列码实际上是初始序列码(ISN),而第一个数据字节是ISN+1。这个序列号(序列码)是可以补偿传输中的 不一致。

    TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。

    数据偏移量(HLEN):4位包括TCP头大小,指示何处数据开始。

    保留(Reserved):6位值域,这些位必须是0。为了将来定义新的用途所保留。

    标志(Code Bits):6位标志域。表示为:紧急标志、有意义的应答标志、推、重置连接标志、同步序列号标志、完成发送数据标志。按照顺序排列是:URG、ACK、PSH、RST、SYN、FIN。

    窗口(Window):16位,用来表示想收到的每个TCP数据段的大小。

    校验位(Checksum):16位TCP头。源机器基于数据内容计算一个数值,收信息机要与源机器数值 结果完全一样,从而证明数据的有效性。

    优先指针(紧急,Urgent Pointer):16位,指向后面是优先数据的字节,在URG标志设置了时才有效。如果URG标志没有被设置,紧急域作为填充。加快处理标示为紧急的数据段。

    选项(Option):长度不定,但长度必须以字节。如果 没有 选项就表示这个一字节的域等于0。

    填充:不定长,填充的内容必须为0,它是为了数学目的而存在。目的是确保空间的可预测性。保证包头的结合和数据的开始处偏移量能够被32整除,一般额外的零以保证TCP头是32位的整数倍。

    标志控制功能

    URG:紧急标志

    紧急(The urgent pointer) 标志有效。紧急标志置位,

    ACK:确认标志

    确认编号(Acknowledgement Number)栏有效。大多数情况下该标志位是置位的。TCP报头内的确认编号栏内包含的确认编号(w+1,Figure:1)为下一个预期的序列编号,同时提示远端系统已经成功接收所有数据。

    PSH:推标志

    该标志置位时,接收端不将该数据进行队列处理,而是尽可能快将数据转由应用处理。在处理 telnet 或 rlogin 等交互模式的连接时,该标志总是置位的。

    RST:复位标志

    复位标志有效。用于复位相应的TCP连接。

    SYN:同步标志

    同步序列编号(Synchronize Sequence Numbers)栏有效。该标志仅在三次握手建立TCP连接时有效。它提示TCP连接的服务端检查序列编号,该序列编号为TCP连接初始端(一般是客户端)的初始序列编号。在这里,可以把TCP序列编号看作是一个范围从0到4,294,967,295的32位计数器。通过TCP连接交换的数据中每一个字节都经过序列编号。在TCP报头中的序列编号栏包括了TCP分段中第一个字节的序列编号。

    FIN:结束标志

    带有该标志置位的数据包用来结束一个TCP回话,但对应端口仍处于开放状态,准备接收后续数据。

    服务端处于监听状态,客户端用于建立连接请求的数据包(IP packet)按照TCP/IP协议堆栈组合成为TCP处理的分段(segment)。

    分析报头信息: TCP层接收到相应的TCP和IP报头,将这些信息存储到内存中。

    检查TCP校验和(checksum):标准的校验和位于分段之中(Figure:2)。如果检验失败,不返回确认,该分段丢弃,并等待客户端进行重传。

    查找协议控制块(PCB{}):TCP查找与该连接相关联的协议控制块。如果没有找到,TCP将该分段丢弃并返回RST。(这就是TCP处理没有端口监听情况下的机制) 如果该协议控制块存在,但状态为关闭,服务端不调用connect()或listen()。该分段丢弃,但不返回RST。客户端会尝试重新建立连接请求。

    建立新的socket:当处于监听状态的socket收到该分段时,会建立一个子socket,同时还有socket{},tcpcb{}和pub{}建立。这时如果有错误发生,会通过标志位来拆除相应的socket和释放内存,TCP连接失败。如果缓存队列处于填满状态,TCP认为有错误发生,所有的后续连接请求会被拒绝。这里可以看出SYN Flood攻击是如何起作用的。

    丢弃:如果该分段中的标志为RST或ACK,或者没有SYN标志,则该分段丢弃。并释放相应的内存。

    发送序列变量

    SND.UNA : 发送未确认

    SND.NXT : 发送下一个

    SND.WND : 发送窗口

    SND.UP : 发送优先指针

    SND.WL1 : 用于最后窗口更新的段序列号

    SND.WL2 : 用于最后窗口更新的段确认号

    ISS : 初始发送序列号

    接收序列号

    RCV.NXT : 接收下一个

    RCV.WND : 接收下一个

    RCV.UP : 接收优先指针

    IRS : 初始接收序列号

    :)当前段变量

    SEG.SEQ : 段序列号

    SEG.ACK : 段确认标记

    SEG.LEN : 段长

    SEG.WND : 段窗口

    SEG.UP : 段紧急指针

    SEG.PRC : 段优先级

    CLOSED表示没有连接,各个状态的意义如下:

    LISTEN : 监听来自远方TCP端口的连接请求。

    SYN-SENT : 在发送连接请求后等待匹配的连接请求。

    SYN-RECEIVED : 在收到和发送一个连接请求后等待对连接请求的确认。

    ESTABLISHED : 代表一个打开的连接,数据可以传送给用户。

    FIN-WAIT-1 : 等待远程TCP的连接中断请求,或先前的连接中断请求的确认。

    FIN-WAIT-2 : 从远程TCP等待连接中断请求。

    CLOSE-WAIT : 等待从本地用户发来的连接中断请求。

    CLOSING : 等待远程TCP对连接中断的确认。

    LAST-ACK : 等待原来发向远程TCP的连接中断请求的确认。

    TIME-WAIT : 等待足够的时间以确保远程TCP接收到连接中断请求的确认。

    CLOSED : 没有任何连接状态。

    TCP连接过程是状态的转换,促使发生状态转换的是用户调用:OPEN,SEND,RECEIVE,CLOSE,ABORT和STATUS。传送过来的数据段,特别那些包括以下标记的数据段SYN,ACK,RST和FIN。还有超时,上面所说的都会时TCP状态发生变化。

    :)序列号

    请注意,我们在TCP连接中发送的字节都有一个序列号。因为编了号,所以可以确认它们的收到。对序列号的确认是累积性的。TCP必须进行的序列号比较操作种类包括以下几种:

    ①决定一些发送了的但未确认的序列号。

    ②决定所有的序列号都已经收到了。

    ③决定下一个段中应该包括的序列号。

    对于发送的数据TCP要接收确认,确认时必须进行的:

    SND.UNA = 最老的确认了的序列号。

    SND.NXT = 下一个要发送的序列号。

    SEG.ACK = 接收TCP的确认,接收TCP期待的下一个序列号。

    SEG.SEQ = 一个数据段的第一个序列号。

    SEG.LEN = 数据段中包括的字节数。

    SEG.SEQ+SEG.LEN-1 = 数据段的最后一个序列号。

    如果一个数据段的序列号小于等于确认号的值,那么整个数据段就被确认了。而在接收数据时下面的比较操作是必须的:

    RCV.NXT = 期待的序列号和接收窗口的最低沿。

    RCV.NXT+RCV.WND:1 = 最后一个序列号和接收窗口的最高沿。

    SEG.SEQ = 接收到的第一个序列号。

    SEG.SEQ+SEG.LEN:1 = 接收到的最后一个序列号.

    展开全文
  • 1、TCP三次握手过程和状态变迁 TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 ...

    TCP的连接建立:

    1、TCP三次握手过程和状态变迁

    TCP三次握手

    TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。

    TCP 三次握手

    • 一开始,客户端和服务端都处于 CLOSED 状态。先是服务端主动监听某个端口,处于 LISTEN 状态

    第一次握手:

    第一个报文—— SYN 报文

    • 客户端会随机初始化序号(client_isn),将此序号置于 TCP 首部的「序号」字段中,同时把 SYN 标志位置为 1 ,表示 SYN 报文。接着把第一个 SYN 报文发送给服务端,表示向服务端发起连接,该报文不包含应用层数据,之后客户端处于 SYN-SENT 状态。

    第二次握手:

    在这里插入图片描述

    • 服务端收到客户端的 SYN 报文后,首先服务端也随机初始化自己的序号(server_isn),将此序号填入 TCP 首部的「序号」字段中,其次把 TCP 首部的「确认应答号」字段填入 client_isn + 1, 接着把 SYN 和 ACK 标志位置为 1。最后把该报文发给客户端,该报文也不包含应用层数据,之后服务端处于 SYN-RCVD 状态。

    第三次握手:

    在这里插入图片描述

    • 客户端收到服务端报文后,还要向服务端回应最后一个应答报文,首先该应答报文 TCP 首部 ACK 标志位置为 1 ,其次「确认应答号」字段填入 server_isn + 1 ,最后把报文发送给服务端,这次报文可以携带客户到服务器的数据,之后客户端处于 ESTABLISHED 状态。服务器收到客户端的应答报文后,也进入 ESTABLISHED 状态。

    从上面的过程可以发现,第三次握手是可以携带数据的,前两次握手是不可以携带数据的,一旦完成三次握手,双方都处于 ESTABLISHED 状态,此时连接就已建立完成,客户端和服务端就可以相互发送数据了。【前两次不携带数据也是为了防止被攻击,如果携带大量的数据会对服务器造成影响】

    为什么要三次握手?

    三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

    • 三次握手才可以阻止重复历史连接的初始化(主要原因)

      TCP 使用三次握手建立连接的最主要原因是防止历史连接初始化了连接。

    • 三次握手才可以同步双方的初始序列号

      TCP 协议的通信双方, 都必须维护一个「序列号」, 序列号是可靠传输的一个关键因素,它的作用:

      • 接收方可以去除重复的数据;
      • 接收方可以根据数据包的序列号按序接收;
      • 可以标识发送出去的数据包中, 哪些是已经被对方收到的;

      可见,序列号在 TCP 连接中占据着非常重要的作用,所以当客户端发送携带「初始序列号」的 SYN 报文的时候,需要服务端回一个 ACK 应答报文,表示客户端的 SYN 报文已被服务端成功接收,那当服务端发送「初始序列号」给客户端的时候,依然也要得到客户端的应答回应,这样一来一回,才能确保双方的初始序列号能被可靠的同步。

    • 三次握手才可以避免资源浪费

      三次握手足以,不需要四次。

    展开全文
  • (1)什么是TCP协议Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型...

    (1)什么是TCP协议

    Transmission Control Protocol 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层(Transport layer)通信协议,由IETF的RFC 793说明(specified)。在简化的计算机网络OSI模型中,它完成第四层传输层所指定的功能,UDP是同一层内另一个重要的传输协议。

    (2)TCP的作用

    在因特网协议族(Internet protocol suite)中,TCP层是位于IP层之上,应用层之下的传输层。不同主机的应用层之间经常需要可靠的、像管道一样的连接,但是IP层不提供这样的流机制,而是提供不可靠的包交换。

    应用层向TCP层发送用于网间传输的、用8位字节表示的数据流,然后TCP把数据流分割成适当长度的报文段(通常受该计算机连接的网络的数据链路层的最大传送单元(MTU)的限制)。之后TCP把结果包传给IP层,由它来通过网络将包传送给接收端实体的TCP层。TCP为了保证不发生丢包,就给每个字节一个序号,同时序号也保证了传送到接收端实体的包的按序接收。然后接收端实体对已成功收到的字节发回一个相应的确认(ACK);如果发送端实体在合理的往返时延(RTT)内未收到确认,那么对应的数据(假设丢失了)将会被重传。TCP用一个校验和函数来检验数据是否有错误;在发送和接收时都要计算和校验。

    首先,TCP建立连接之后,通信双方都同时可以进行数据的传输,其次,它是全双工的;在保证可靠性上,采用超时重传和捎带确认机制。在流量控制上,采用滑动窗口协议,协议中规定,对于窗口内未经确认的分组需要重传。在拥塞控制上,采用广受好评的TCP拥塞控制算法(也称AIMD算法),该算法主要包括三个主要部分:1,加性增、乘性减;2,慢启动;3,对超时事件做出反应。

    f2d9c44cdf033102a130f98b9866246b.png

    (3)TCP的三次握手

    所谓的"三次握手"即对每次发送的数据量是怎样跟踪进行协商使数据段的发送和接收同步,根据所接收到的数据量而确定的数据确认数及数据发送、接收完毕后何时撤消联系,并建立虚连接。

    为了提供可靠的传送,TCP在发送新的数据之前,以特定的顺序将数据包的序号,并需要这些包传送给目标机之后的确认消息。TCP总是用来发送大批量的数据。当应用程序在收到数据后要做出确认时也要用到TCP。TCP三次握手过程如下图所示:

    22e63946ad769d58c77c7ceacd905cf1.png

    过程:

    打开wireshark, 打开浏览器输入网址;在wireshark中输入http过滤, 然后选中GET /tankxiao HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream",这样做的目的是为了得到与浏览器打开网站相关的数据包,将得到如下图:

    2aff2d48f36f96419405942868d29344.png

    第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。代表客户端请求建立连接,如下图所示:

    d49ea39a5cc7ade1b5b72aa2322da6f6.png

    第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

    57f7a8dca18f9e0e834bafe9db266998.png

    fef95898f1807dc479e95ec6d93965ea.png

    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。

    5735d132f10294ec427aa582aaf18e43.png

    综上所述,一个完整的三次握手就是:请求(SYN) — 应答(SYN+ACK) — 再次确认(SYN)。完成三次握手,客户端与服务器开始传送数据。

    展开全文
  • TCP握手协议 :在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个e79fa5e9819331333365646364连接。1、第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; ...
  • 目录 关于三次握手与四次挥手面试官想考我们什么?...TCP三次握手过程 4次断开 解释原因: TCP的状态变迁图: https://blog.csdn.net/Lincoln_cz/article/details/81587098 TCP报文格式 推荐看这个视频...
  • TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize ...
  • 关于TCP三次握手过程

    2021-09-03 19:23:42
    (1)TCP三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。 (2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效...
  • 一、TCP/IP是一个协议族,每一层负责不通的通信功能,今天通过抓包分析一下传输层的TCP协议的三次握手过程。二、使用抓包软件是Wireshark,先看一下Wireshark抓到的TCP的包对应的协议层。WireShark数据包结构Frame:...
  • TCP三次握手过程

    2021-03-17 18:26:31
    TCP三次握手 客户端发送一个SYN=1,ACK=0标志的数据包给服务端,请求进行连接,这里完成了第一次握手;服务端收到请求并且允许连接的话,就会发送一个SYN=1,ACK=1标志的数据包给客户端,告诉它,可以通讯了,并且...
  • TCP三次握手模拟

    2021-08-08 17:04:34
    所谓模拟我们只需要在有一个握手过程就行了,简单来说就是,我们能创建两个能相互通信的进程,某个进程率先发起通信请求,另外一个进程收到通信请求,返回一个消息,发起进程再回复一个消息,实现这样一个过程我们就...
  • 1、三次握手(1)三次握手的详述首先Client端发送连接请求报文,Server段接受连接后回复ACK报文,并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文,并分配资源,这样TCP连接就建立了。最初两端...
  • TCP原理和三次握手和四次挥手过程TCP三次握手和四次挥手过程TCP是什么?有什么作用?三次握手连接建立详细过程四次挥手连接终止参考 TCP三次握手和四次挥手过程 TCP是什么?有什么作用? TCP 传输控制协议(TCP,...
  • DNS解析DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如www.baidu.com,其实不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不...
  • 建立TCP连接很简单,通过三次握手便可建立连接。建立好连接后,开始传输数据。TCP数据传输牵涉到的概念很多:超时重传、快速重传、流量控制、拥塞控制等等。断开连接的过程也很简单,通过四次握手完成断开连接的过程...
  • 三次握手过程简述 Client在打算建立TCP连接时,向server发出连接请求报文段,该报文段首部的SYN=1,seq=x(随机选取),随后client进入SYN-SENT状态,此为第一次握手。 Server收到连接请求报文段之后,如果同意建立...
  • 关于TCP三次握手和两次握手的思考TCP连接需要握手的原因两次握手的可行性分析 TCP连接需要握手的原因 TCP协议是一个非常常见的全双工协议,它保证了数据的可靠传输。 使用TCP服务的程序一般需要三次握手来建立TCP的...
  • TCP三次握手详解

    2021-02-13 01:08:28
    1.间歇性得出现client向server建立连接三次握手已经完成,但server的selector没有响应到这连接。2.出问题的时间点,会同时有很多连接出现这个问题。3.selector没有销毁重建,一直用的都是一个。4.程序刚启动的时候必...
  • TCP三次握手建立连接的过程

    千次阅读 2020-12-19 06:37:09
    下面详细讲解三次握手过程。第 1 次握手第 1 次握手建立连接时,客户端向服务器发送 SYN 报文(SEQ=x,SYN=1),并进入 SYN_SENT 状态,等待服务器确认,如图所示。第 2 次握手第 2 次握手实际上是分两部分来完成的...
  • TCP三次握手分析

    2021-08-13 02:57:30
    微信图片_20190425152657.png为什么要进行三次握手?第一次握手是客户端向服务端发消息,询问你有没有接收消息的能力?确保消息能准确发送出去,告诉服务端我有写的能力;第二次握手是指服务端向客户端回消息,标明...
  • TCP三次握手Wireshark抓包 TCP报文格式: TCP连接的建立(三次握手) 1、设计如何获得TCP建立连接使用的三次握手数据包,描述操作过程 (1)建立连接时,客户端发送SYN包到服务器,并进入SYN_SEND状态,等待服务器...
  • TCP握手协议在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接.第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;SYN:同步序列编号(Synchronize ...
  • 三次握手过程: 开始时客户端状态:CLOSED 开始时服务器状态:LISTEN 第一次握手 第二次握手 第三次握手 From A to B 客户端 → 服务器 ...
  • 三次的ACK在网络中丢失,那么Server 端该TCP连接的状态为SYN_RECV,并且会根据 TCP的超时重传机制,会等待3秒、6秒、12秒后重新发送SYN+ACK包,以便Client重新发送ACK包。 而Server重发SYN+ACK包的次数,可以...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 162,492
精华内容 64,996
关键字:

tcp三次握手过程