• TCP首部(报头)理解


    TCP作为网络模型中正数或者倒数的第4层,其实是一个协议,可以理解为操作系统的一个TCP进程,为数据传输提供稳定可靠的通道。一个TCP报文是由首部(报头)+数据组成,其中报头尤其重要。

    TCP首部

    在这里插入图片描述

    图片来源与网络

    一个TCP报文段的首部前面20个字节是固定的,而后面有4n个字节是根据需求而增加的选项(n为整数且最大为10),因此TCP报文段的首部最小长度是20个字节,最大长度是60个字节

    • 源端口和目的端口:各占2个字节(16bit),区分主机的不同进程

    • 序号:占4个字节(32bit),记录数据部分第1个字节的序号是多少

    • 确认号:占4个字节(32bit),期望收到对方下一个报文的第1个数据字节的序号。例如:B收到A的报文,序号是100,此时B要向A发送确认号101,意味着A下次要给B发送序号为101的报文

    • 4位首部长度:占4bit,也叫数据偏移,表示TCP报头的长度,由于TCP报头前20个字节都是固定的,但是可能会有4*10个字节是不固定的,所以TCP报头最大能到60个字节,这个字段就是用来精确记录TCP报头长度的

    • 保留:占6bit,保留为今后使用,但目前因置为0

    • 标志位:每一个标志占1bit,一共6bit。

      • URG:当这个标志置为1,说明此报文是紧急报文,需尽快传递
      • ACK:当这个标志置为1,上面的确认号字段才会生效,当3次握手结束时此标志置为1
      • PSH:较少使用
      • RST:当这个标志置为1,此时TCP连接发生严重错误
      • SYN:建立连接的同步序号,SYN=1,ACK=0,发送请求,对方同意后,则响应中SYN=1,ACK=1
      • FIN:释放连接,FIN=1,表示此次报文发送方发送的数据已经发送完毕,并要求释放TCP连接
    • 窗口:占2个字节(16bit),滑动窗口,流量控制问题

    • 检验和:占2个字节(16bit),如果接收的报文检验和有误,则丢弃此报文

    • 紧急指针:只有URG为1是有效,表示报文中紧急数据的字节数

    • 选项:长度可变,为4n个字节(n最大=10)

    三次握手:

    1. 请求方(客户端)发送请求,将SYN置为1,假设seq=100,发送到接收方,一般来讲就是服务端
    2. 服务端接收请求报文,也将自己的SYN置为1,并且将ack=100+1,seq假设200,回传给请求方也就是客户端
    3. 客户端收到服务端报文,将ack置为200+1,并且发送给服务端

    TCP是注重双向通信,面向连接的,上述第2步骤是将服务端的收发合并为一次进行。第2步发送到客户端是校验客户端的通信正常,第3部发送到服务端是让服务端知道自己的通信正常,所以一共是3次握手

    四次挥手

    任何一方主动发起都是可行的,假设客户端发起
    图片来源网络

    img

    1. 客户端发送报文,将FIN置为1,seq设置好,发送到服务端(FIN报文)
    2. 服务端收到该FIN报文,将seq设置好,ack+1发送给客户端(ACK报文)
    3. 服务端将FIN置为1,将seq设置好,ack+1,发送给客户端(FIN报文)
    4. 客户端收到FIN报文,将ack置为服务端seq+1,发送给服务端(ACK报文),服务端收到后立刻断开。等个2MSL后没收到回复,客户端也立刻断开,那么此次TCP连接就全部断开了

    2MSL是最大报文生存时间,如果网络不可靠,有可能最后一个ACK丢失,所以会在这个时间内重发ACK报文

    UPD

    UDP是面向无连接,只管扔,收不收做强制,只要扔的多,可以保证收的也不少。

    UDP只有两个字段,首部字段+数据字段。首部字段8个字节(64bit)由4个字段组成,每个占2个字节(16bit)

    • 源端口:需要接收方回应时才用,不需要可置为0
    • 目的端口:在终点交付报文时必须使用
    • 长度:UDP数据报文的长度,最小时8字节(64bit)
    • 检验和:检验报文传输过程中是否有误
  • 相关阅读:
    求合伙人 求一个会做大模型开发的老板。。
    App移动端测试(4)—— apk的操纵
    springMvc55-自定义异常
    香港服务器托管对外贸行业必要性和优势
    分布式Session如何存储
    C#中的事件聚合器实现方法
    [unity][通过代码]控制模型旋转,动态改变模型角度,让模型转动到固定角度
    计算机网络学习笔记(I)——概述
    LeetCode高频题42. 接雨水
    【学习笔记】CF1103D Professional layer
  • 原文地址:https://blog.csdn.net/qq_37776700/article/details/126785684