zoukankan      html  css  js  c++  java
  • TCP报文

    源端口和目的端口

        各占16位 ,服务相对应的源端口和目的端口。

    序列号

          占32位,它的范围在[0~2^32-1],序号随着通信的进行不断的递增,当达到最大值的时候重新回到0在开始递增。TCP是面向字节流的,在一个TCP连接中传送的字节流中的每一个字节都按照顺序编号。整个要传送的字节流的起始号必须在连接建立时设置。下个序列号(发送)等于上个序列号(接受)加上报文长度。

    确认号

           占32位,用于确认对上个数据包接收成功。确认号(发送)等于上个序列号(接受)加一

    数据偏移:

           占4位,指出TCP报头从起始端到数据端的距离,该字段描述了TCP报头的长度。由于option字段的存在,所以TCP报头的长度往往是不确定的,因此该字段很有存在的必要了。需要注意的是“数据偏移”计算的单位是32位字(即4个字节为一个计算单位)。因此“数据偏移”有4个位所以能够表达的最大的十进制为15,也就说TCP报头的最大长度为60字节。

    保留位:

          占6位,保留为今后使用,目前该字段为全0.

    标志位:

          占6位,用于标志数据包

    URG:  字段为1时紧急发送数据。相当于提高数据发送的优先级,不按照原来队列顺序来进行发送,同时启用紧急指针。

    ACK: 该字段为1时表示确认号有效,当该位为0是表示确认号无效。TCP规定,建立链接后所有数据报文段ACK都设为1。

    PSH:  该字段为1时紧急接收数据。该字段允许数据包不需要等到接收端的缓存(窗口)满了后才上交数据,而是直接上交数据。

    RST: 该字段为1时表示该连接出现严重的错误,必须释放该连接再重新建立连接进行数据传输。RST置1还用来拒绝一个非法的报文段或拒绝打开一个连接。

    SYN: 该字段位1时表示发送连接请求,用来在建立连接时进行同步序号。

    FIN: 该字段为1时表示发送释放请求,用于释放当前的连接。

    窗口:

       占16位。窗口指的是接收窗口。用于限制发送方当前允许发送的数据量。这是因为接收方的数据缓存空间是有限的。

    检验和:

       占16位。检验和字段检验的范围包括首部和数据两部分。

    紧急指针:

       占16位。当URG=1的时候才生效,它指出本报文段中的紧急数据的字节数(紧急数据结束后就是普通数据)。因此紧急指针指出了紧急数据的末尾报文段中的位置。当所有的紧急数据都处理完毕时,TCP就告诉应用程序恢复正常的操作。

    选项:

       长度可变,最长可达40字节(320位)。当没有使用option字段的时候TCP报文首部长度为20字节。

    流量控制:

      发送端发送的流量不可以无限大,因为接收端的缓存区是有限的,因此需要在TCP报文当中添加windows字段

    windows字段可以表示当前发送的流量大小,如果发送的流量大于接收端处理流量的缓存,接收端会在回复TCP报文

    时置窗口大小为自身所能处理的大小。这样下次发送端会依照此窗口大小来调整所发的数据流量大小,避免重复丢包。

    另外当发送端刚好发完一次窗口大小的流量,那么他会等待接收端的确认包后才继续下次发送。

  • 相关阅读:
    Python的垃圾回收机制
    标准库
    常用数据库命令备忘录(持续增量更新)
    Springboot配置excludePathPatterns不生效问题 (2020-06-28 22:21)
    Android 子线程无法刷新UI界面
    如何实现Java线程的 阻塞/唤醒(和暂停/继续 类似)
    Android Studio 如何获取 text文本内容
    Css设置最优先
    CentOS7下MySQL服务启动失败原因及解决方法
    Js/Jquery获取input file的文件名
  • 原文地址:https://www.cnblogs.com/demonxian3/p/6260733.html
Copyright © 2011-2022 走看看