zoukankan      html  css  js  c++  java
  • 学习:TCP/UDP协议分析(TCP三次握手)

    TCP(Transmission Control Protocol 传输控制协议)是一种面向连接(连接导向)的、可靠的、 基于IP的传输层协议。

    TCP工作在网络OSI的七层模型中的第四层————传输层

    数据从应用层发下来,会在每一层都会加上头部信息,进行 封装,然后再发送到数据接收端。

    在数据传输之前,所有基于TCP协议进行通信都需要通过三次握手来建立可靠的连接。


    先介绍TCP的三次握手四次挥手

    有关TCP标志位 flags

    SYN(synchronous建立联机) 
    
    ACK(acknowledgement 确认) 
    
    PSH(push传送) 
    
    FIN(finish结束) 
    
    RST(reset重置) 
    
    URG(urgent紧急)
    
    Sequence number(顺序号码) 
    
    Acknowledge number(确认号码)
    

    红框所圈处:TCP进行三次握手的数据包

    第一次握手:主机A 通过向 主机B 发送一个带有(SYN)标志位和SEQ序列号的数据包 并且进入SYN SENT状态 等待服务器确认,在下面的数据包中SYN1,SEQ则为1812515538

    第二次握手:主机B 收到 主机A 的请求后,会进入SYN-RECEIVE状态,再回复一个带有确认应答(ACK)和请求同步序列号(SYN)标志位的数据段响应主机A,也告诉主机A两件事: 我已经收到你的请求了,你可以传输数据了,在下面的数据包中SYN1ACK确认1SEQ1891499098ack第一次握手中的SEQ+1

    第三次握手:主机A收到这个数据段后,再发送一个确认应答,表示确认已收到 主机B 的数据段:"我已收到回复,我现在要开始传输实际数据了,这样3次握手就完成了,主机A和主机B 就可以传输数据了,此时的数据包为ACK1SEQ第一次握手中的SEQ+1ack第二次握手SEQ+1,该报文发送完毕后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。

    问题:每次发送请求时为什么ack要+1?

    ack大家可以理解为代表下一个数据包的编号,这也就是为什么第二请求时,ackSEQ+1,来保证下一次的通信时可用的,来认证的确是对方的信息

    问题:SEQ的作用?

    SEQ:序列号,什么意思呢?当发送一个数据时,数据是被拆成多个数据包来发送,序列号就是对每个数据包进行编号,这样接受方才能对数据包进行再次拼接。


    总结图:

  • 相关阅读:
    【LeetCode-树】二叉搜索树中第K小的元素
    【机器学习-评估方法】模型评估方法
    【LeetCode-树】二叉搜索树的最小绝对差
    【LeetCode-树】检查平衡性
    【LeetCode-树】验证二叉搜索树
    【LeetCode-回溯/动态规划】不同路径
    Vue——风格指南
    潜在危险
    渲染HTML的方式
    Vue——状态管理
  • 原文地址:https://www.cnblogs.com/zpchcbd/p/12291007.html
Copyright © 2011-2022 走看看