zoukankan      html  css  js  c++  java
  • TCP报文段的首部格式

    一---导读

      我们知道TCP相对于UDP来说多了很多,那么多的这些功能是如何实现,靠什么来承载的呢?这就是TCP首部,接下来我们介绍TCP首部格式

    二---图解TCP首部

    序号:占32个比特,用来指出本TCP报文段数据部分的第一个字节的序号。


    确认号:占32比特,取值范围[0-2的32次方减1].确认号增加到最后一个后,下一个确认号就又回到了0.指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。若确认号为n,表示n-1之前的数据已经收到了,你发序号为n的来吧。

    确认标志位ACK:取值为1的时候确认号字段才有效,取值为0的时候确认号字段无效。
    TCP规定:在连接建立后,所有传输完的字段ACK都必须设置为1.

    数据偏移:占4个比特,并以4字节为单位。用来指出TCP报文段的数据载荷的部分距离TCP首部有多远。这个字段实际上就是TCP报文段首部的长度。首部固定的字节为20,因此数据偏移字段的最小值为(0101)2.
    首部最大的字节为60字节,因此数据偏移字段的最大值为(1111)

    保留字段占6比特,为以后使用,目前应置为0。

    窗口字段占16比特,指出发送本报文段的一方的接收窗口。窗口值作为接收方让发送方设置其发送窗口的依据。这个是以接收方的能力来控制发送的发送能力,称为流量控制。注意发送窗口的大小应该从接收窗口和拥塞窗口中取小点的一个。

    校验和字段占16比特:
    用来检验传输过程中是否出现了误码。在计算校验和的时候,要在TCP报文段的前面加上12字节的伪首部。

    同步标志位SYN
    在TCP连接建立的时候用来同步序号。

    终止标志位FIN:
    用来释放TCP连接。FIN=1表明是TCP连接释放报文段

    复位标志位RST:
    用来复位TCP连接,当RST=1的时候,表明TCP连接出现异常,必须释放连接,然后再重新建立连接。RST=1还可以用来拒绝一个非法的报文段或拒绝打开一个TCP连接。

    推送标志位PSH:
    用来实现推送操作,当接收方的TCP收到标志位为1的报文段会尽快上交应用进程,而不必等到接收缓存都填满后再向上交付。

    紧急标志位URG和紧急指针字段用来实现紧急操作。当URG为1的时候,紧急指针字段有效,当URG为0的时候,紧急指针字段无效。

    紧急指针:
    占16比特,以字节为单位,用来指明紧急数据的长度。
    当发送有紧急数据的时候,可以插队到 发送缓存的最前面,然后封装成TCP报文段进行发送。紧急指针会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据之后是普通数据。

    接收方收到URG为1的报文段的时候,,直接将紧急数据上交给应用进程,而不必在接收缓存中排队。

    选项占40个字节:
    增加选项可以增加TCP的功能。目前有以下选项:
    最大报文段长度MSS选项:TCP报文段数据在和部分的最大长度。
    窗口扩大选项:为了扩大窗口(提高吞吐率)
    时间戳选项
    用来计算往返时间RTT,
    用于处理序号超范围的情况,又称为防止序号绕回PAWS。
    选择确认选项:用来实现选择确认功能。

    填充:
    由于选项的长度可变,因此使用填充来确保报文段首部能被4整除(因为数据偏移字段,是以4字节为单位的)

  • 相关阅读:
    手机端不加载js文件,PC端要加载js文件
    JS数组去重和取重
    jquery遍历一个数组
    2个轮播地址
    动感Loading文字
    仿265网站LOGO,会盯着你看的眼睛
    git学习
    c++ primer 5th 笔记:第十一章
    c++ primer 5th 笔记:第十章
    c++ primer 5th 笔记:第九章
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/14266324.html
Copyright © 2011-2022 走看看