• TCP/IP协议的三次握手


     以太网的数据是以帧为单位进行传输的,每一帧(MAC封包)数据分为header和data两部分。data部分最大为1500byte,当然这个大小是可以设置的(要遵寻标准,改了后果可能很严重)。

    传输数据的时候MAC封包的data部分包裹着IP封包,IP封包也是由header和data组成,IP封包的data部分又包裹者TCP封包,TCP也由header和data组成,TCP封包data部分又包裹着应用层协议封包如HTTP,

    接受数据也由对应的层层层解析。IP封包最大65535byte,如果IP封包大于MAC封包最大值,则切分成多个MAC封包进行传输。

     TCP封包格式

    Source Port(来源端口)

    Destination Port:(目的端口)

    Sequence Number(封包序号):

    由于 TCP 封包必须要带入 IP 封包当中,所以如果 TCP 数据太大时(大于 IP 封包的容许程度), 就得要进行分段。这个 Sequence Number 就是记录每个封包的序号,可以让收受端重新将 TCP 的数据组合起来

    Acknowledge Number:

    为了确认主机端确实有收到我们 client 端所送出的封包数据,我们 client 端当然希望能够收到主机方面的响应,那就是这个 Acknowledge Number 的用途了。 当 client 端收到这个确认码时,就能够确定之前传递的封包已经被正确的收下了。

    Code (Control Flag, 控制标志码)

    当我们在进行网络联机的时候,必须要说明这个联机的状态,好让接收端了解这个封包的主要动作。 这可是一个非常重要的句柄喔!这个字段共有 6 个 bits ,分别代表 6 个句柄,若为 1 则为启动。分别说明如下:

    URG(Urgent):若为 1 则代表该封包为紧急封包, 接收端应该要紧急处理,且图 2.4-1 当中的 Urgent Pointer 字段也会被启用。

    ACK(Acknowledge):若为 1 代表这个封包为响应封包, 则与上面提到的 Acknowledge Number 有关。

    PSH(Push function):若为 1 时,代表要求对方立即传送缓冲区内的其他对应封包,而无须等待缓冲区满了才送。

    RST(Reset):如果 RST 为 1 的时候,表示联机会被马上结束,而无需等待终止确认手续。这也就是说, 这是个强制结束的联机,且发送端已断线。

    SYN(Synchronous):若为 1,表示发送端希望双方建立同步处理, 也就是要求建立联机。通常带有 SYN 标志的封包表示『主动』要连接到对方的意思。

    FIN(Finish):若为 1 ,表示传送结束,所以通知对方数据传毕, 是否同意断线,只是发送者还在等待对方的响应而已。

     

    三次握手过程

    http是建立在TCP上的应用层协议,我以访问http://www.centoscn.com/CentosServer/www/2015/0422/5245.html进行分析

    打开wireshark,过滤规则里输入http,找到GET /CentosServer/www/2015/0422/5245.html HTTP/1.1的那条记录,右键然后点击"Follow TCP Stream"

    看到在进行HTTP数据传输之前,我的本机和120.76.14.151互相发送了3个TCP数据包,这就是3次握手的包。

    第一次握手数据包,TCP的controlFlags SYN为1,sequence num 963326680

    第二次握手的数据包,由三次握手的图示我们可以得出 第二次握手数据包ControlFlgas 的SYN位为1,ACK位为1,Acknowledge Number=963326680+1=963326681

    第三次握手数据由图得出ControlFlgas 的ACK为1, Acknowledge Number=475266512+1=475266513

    后面再分析下四次挥手

  • 相关阅读:
    自己编译GCC(compile gcc from source)
    sphinx PDF 中文
    rst2pdf 中文
    Pandoc PDF 中文
    Linux XMind
    asp.net 邮件发送类
    asp.net 音乐播放器
    使用X-UA-Compatible来设置IE浏览器兼容模式
    asp.net(c#)网页跳转七种方法小结
    C#中HashTable的用法
  • 原文地址:https://www.cnblogs.com/gaoqin31/p/5723458.html
Copyright © 2020-2023  润新知