• 计算机网络协议包头赏析-TCP


    仍然先把TCP报文段的格式放在这里,然后我们看图说话:

        

        TCP报文段也分为首部和数据两部分,首部默认情况下一般是20字节长度,但在一些需求情况下,会使用“可选字段”,这时,首部长度会有所增加。

        下面,我们仍然延续讲解IP协议的思路,针对不同的域,分别进行讲解:

        【源端口】- 16bit

        来源处的端口号;

        【目的端口】- 16bit

        目的处的端口号;

        【序号】- 32bit

        每一个TCP报文段都会有一个序号,序号字段的值其实是本报文段所发送的数据的第一个字节的序号。这是因为TCP是面向连接的可靠服务,其每一个字节都会对应一个序号,通过序号来确保服务的可靠性和有序性。

        【确认号】- 32bit

        确认号,是期望收到对方的下一个报文段的数据的第一个字节的序号。(这句话有些拗口,但是在后面我们讲解三次握手和四次挥手时,大家会更深刻的理解这句话的含义)

        【数据偏移】- 4bit

        其实它本质上就是“首部长度”,因为“数据偏移”是指TCP报文段的数据部分的起始处距离TCP报文段的起始处的距离。(仍然很拗口,但相信你能明白)。

        数据偏移总共占4bit,因此最大能表示的数值为15。而数据偏移的单位是“4字节”,此处的设计和IP数据报的设计是完全相同的,所以说TCP报文段首部的长度最长为15×4=60字节,且首部长度必须为4字节的整数倍。

        【保留字段】- 6bit

        这6bit在标准中是保留字段,我猜测,有两个目的,第一个是预留除URG/ACK/PSH/RST/SYN/FIN/之外的冗余功能位;第二个是为了对其字节位。

        【紧急字段URG】- 1bit

        此字段告诉系统此报文段中有紧急数据,应尽快传送。当URG=1时,

        【确认字段ACK】- 1bit

        当ACK=1时,表示确认,且确认号有效;当ACK=0时,确认号字段无效。

        【推送字段PSH】- 1bit

        当PSH=1时,则报文段会被尽快地交付给目的方,不会对这样的报文段使用缓存策略。

        【复位字段RST】- 1bit

        当RST为1时,表明TCP连接中出现了严重的差错,必须释放连接,然后再重新建立连接。

        【同步字段SYN】- 1bit

        当SYN=1时,表示发起一个连接请求。

        【终止字段FIN】- 1bit

        用来释放连接。当FIN=1时,表明此报文段的发送端的数据已发送完成,并要求释放连接。

        【窗口字段】- 16bit

        此字段用来控制对方发送的数据量,单位为字节。

        一般TCP连接的其中一端会根据自身的缓存空间大小来确定自己的接收窗口大小,然后告知另一端以确定另一端的发送窗口大小。

        【校验和字段】- 16bit

        这个校验和是针对首部和数据两部分的。

        【紧急指针字段】- 16bit

        紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

  • 相关阅读:
    centos中pipelinedb安装及初步使用
    sqlalchemy 的操作
    存储引擎,索引,慢日志,权限管理
    python使用mysql
    mysql数据库查找数据的方法。
    mysql 数据库的基本操作
    epoll 数据库安装以及相关概念
    IO模型,非阻塞IO模型,select实现多路复用
    线程回调,线程中的队列,事件,greenlet模块,gevent模块,自定义补丁, 单线程实现并发,协程
    GIL全局解释器锁,线程池与进程池 同步异步,阻塞与非阻塞,异步回调
  • 原文地址:https://www.cnblogs.com/CrabMan/p/5132496.html
Copyright © 2020-2023  润新知