• TCP协议


    1、TCP简介

    • TCP(Transmission Control Protocol) 传输控制协议,顾名思义,就是要对数据的传输进行一定的控制。

    源端口:
    源端口我们一看就知道是指发送方计算机发送数据的出来的那个端口号

    目的端口:
    目的端口同理,指的是接收方计算机所接收数据的那个端口号

    序号(seq):
    seq号,我们知道一个数据可能是由多个数据包组成,序号的作用就是来标识各个数据包的先后顺序,序号占用32bit,那么序号最多有2的32次方-1个,那假如超过了这个个数怎么办呢?就从0开始重新编号。

    确认号(ack):
    ack号,注意ack号和下面的ACK标识是不一样的,ack=seq+1时说明发送方和接收方配对成功了。这个确认号是数据接收方反馈给发送方的一个属性,假如确认号为N,那么表示接收方已经接收到了N-1及其以前的数据

    数据偏移:
    这个数据偏移是针对TCP报文段来说的,指的是从TCP报文段到TCP数据部分之间的距离,也就是TCP首部的大小,一般来说是20个字节,但是我们从图中可以发现第六行有个可变长度,所以有的时候其不是20个字节。

    保留:
    保留表示现在没有被使用,这段长度是可以被使用的。

    URG:
    URG=1时表示此报文为紧急报文,所以这个报文优先级最高,会被发送方放到最开头传输,需配合我们下面要说到的紧急指针一起使用

    ACK:
    ACK是用来指明连接是否建立的属性,当ACK=1时说明连接已经建立了,建立连接后的所有报文ACK都必须为1,并且规定只有当ACK=1时确认号才会有效

    PSH:
    这个属性是用于一端的应用进程希望在键入一个命令后立即就能收到对方的响应时使用,TCP可进行推送操作

    RST:
    这个字段其实就是reset,当我们的TCP连接出现严重错误时,我们需要将连接进行重置,这时候需要释放连接,重新建立新的连接

    SYN:
    这个属性比较重要,当它等于1时用于表示此报文为连接请求或者连接接受报文,当SYN=1且ACK=0时,那就说明此时是连接请求报文。当SYN=1且ACK=1时,说明此时是连接接受报文,并且当SYN=1时是不允许携带数据的,并且会消耗一个序号。

    FIN:
    此属性用于释放连接,是finnish的缩写,当发送方将FIN置1时,说明数据已经完全发送完毕,要求释放连接

    窗口:
    窗口是用来控制传输速率的属性,它表示接收方允许对方发送的数据量,来解决带宽不一致的问题

    校验和:
    用于校验首部和数据两部分

    紧急指针:
    当URG=1时,说明此报文为紧急报文,紧急指针指出本报文中紧急数据的字节数,紧急数据处理完毕TCP会告诉应用程序恢复正常工作,并且,窗口为0时也可以发送紧急数据

    2、三次握手和四次挥手

    2.1 三次握手

    第一次握手:建立连接时,客户端发送SYN包(SYN=1,seq=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
    第二次握手:服务器收到SYN包,必须确认客户端的SYN(ACK=1,ack=x+1),同时自己也发送一个SYN包(SYN=1,seq=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
    第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK=1,ack=y+1,seq=x+1),此包发送完毕,客户端和服务器端进入established状态,完成三次握手。

     2.2 四次挥手

    1.第一次挥手:客户端发送一个FIN,用来关闭客户端到服务器的数据传送,客户端进入fin_wait_1状态
    2.第二次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1,服务端进入Close_wait状态。此时TCP连接处于半关闭状态,即客户端已经没有要发送的数据了,但服务端若发送数据,则客户端仍要接受
    3.第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入Last_ack状态
    4.第四次挥手:客户端收到FIN后,客户端进入Time_wait状态,接着发送一个ACK给服务端,确认后,服务端进入Closed状态,完成四次挥手

  • 相关阅读:
    怎么把电脑上的文件备份到百度网盘?
    抖音API:item_password-获取douyin分享口令url
    【新版】系统架构设计师 - 案例分析 - 架构设计<SOA与微服务>
    机器学习深度学习服务器推荐
    Python 下载的 11 种姿势,一种比一种高级
    有没有见过在 terminal 里用微信支付?
    猫声音嘶哑的常见原因
    ServiceStack.Redis的源码分析(连接与连接池)
    卷积神经网络 图像处理,图像识别卷积神经网络
    Linux中间件之redis的高可用
  • 原文地址:https://blog.csdn.net/qq_41720578/article/details/125899918