zoukankan      html  css  js  c++  java
  • TCP协议报文段的解析

    1. 由应用程序产生应用进程,应用进程产生进程端口号,端口号提供相应服务。

    2.TCP发送进程以字节流的形式传递数据,而接收进程也把数据作为字节流来接收,类似于假想的管道

    3.UDP发送进程发送的数据报文都是独立的,一次UDP不是面向流协议。

    4.缓存:数据流向的每一个方向上都有两种缓存:发送缓存,接收缓存

    5.在传输层想IP层发送数据是要以报文分组为单位,而不是按字节流来发送,TCP协议把若干字节构成一个分组,我们可以把这样的分组成为报文段,这种报文段的长度是不定的,可以是几个字节,也可以是几千个字节

    6.字节号:

    以字节为单位

    字节号的定义范围为:0~(2^32 -1)

    编号机制:随机

    举例:加入随机好正好是1057,而要发送6000个字节,那么字节编号范围:1057~ 7056

    7序号:

    以字节为基础,TCP给每一个报文段指派一个序号

    每个报文段的序号就是在这个报文段中第一个字节数据的序号。

    举例:

        比如TCP要传输6000个字节的文件。第一个字节的编号是10001.如果数据用5个报文段来发送,前四个报文段个携带1000字节的数据,最后一个报文段携带2000个数据:

    报文段1 –> 序号:10001 (字节号范围: 10001~ 11000)

    报文段1 –> 序号:11001 (字节号范围: 11001~ 12000)

    报文段1 –> 序号:12001 (字节号范围: 12001~ 13000)

    报文段1 –> 序号:13001 (字节号范围: 13001~ 14000)

    报文段1 –> 序号:10001 (字节号范围: 14001~ 16000) 

    TCP报文段格式及解析

    1. 源端口和目的端字段---各占两个字节。端口是运输层与应用层的服务接口。运输层的复用和分用功能都要通过端口才能实现。
    2. 序号字段---占4个字节。TCP连接中传输的数据流中的每一个字节都边上一个编号,序号字段的值则是指本报文所发送的数据第一个字节的序号。
    3. 确认字段---占4个字节,是期望收到对方的下一个报文段的数据的第一个字节的序号
    4. 收不长度---占4bit,它指出TCP首部共有四个字节,首部长度可以在20 ~ 60字节之间。因此,这个字段的值可以在5 (5 x 4 =20 )至 15(15 x 4 =60 )之间。
    5. 保留字段---占6bit,保留为今后使用,但目前应置为0
    6. 紧急URG---当URG =1 ,表名紧急指针字段有效,它告诉系统此报文段中有紧急数据,应当尽快传送(相当于高优先级的数据)。
    7. 确认比特ACK---只用当ACK = 1 是确认号字段才有效,当ACK = 0 时,确认好无效。
    8. 推送比特PSH(push)---接收TCP收到推送比特置1的报文段,就尽快地交付给应用进程,而不再等到整个缓存都填满了后再向上交付。
    9. 复位比特RST(ReSeT)---当RST =1 时 ,表明TCP连接中出现最严重差错,(如由于主机崩溃或其他原因),必须释放连接,然后再重新建立运输连接。

    10.同步比特SYN---同步毕业SYN置为1,就表示这是一个连接请求或连接接收报文。

    11.终止比特FIN(FINAL)---用来释放一个连接,当FIN = 1 时,表名此报文段的发送端的数据已发送完毕,并要求释放运输连接。

    12.窗口字段---占2字节。窗口字段用来控制对方发送的数据量,单位是字节。TCP连接的一端根据设置的缓存空间的大小确定自己的接收窗口的大小,然后通知对方以确定对方的发送窗口的上限。

    13.检验和---占2字节。检验和字段检验的范围包括首部和数据这两部分,在计算校验和时,要在TCP报文段的前面加上12字节的伪首部。(TCP协议必填,UDP可有可无)

    14.紧急指针字段---占16bit.紧急指针指出在本报文段中的紧急数据的最后一个字节的序号。

    15.选项字段---长度可变。TCP只规定了一种选项,即最大报文段的长度MSS(Maximum Segment Size)。MSS告诉对方TCP:“我的缓存所能接受的报文段的数据字段的最大长度是MSS个字节”

    MSS(Maximum Segment Size):最大报文段长度

    MTU(Maxium Transmission Unit):最大传输单元

    MSS = MTU – 20BYTE(IP首部) – 20BYTE(TCP首部)

    16.填充字段---这是为了使整个首部长度是4字节的整数倍。(目前基本用不到)

  • 相关阅读:
    模拟队列
    代理模式及java简易实现
    归并排序模板(Java)
    快排Java模板
    durid配置jdbc报错 com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server
    File类
    数据库范式、多表查询,事务
    valuestack(值栈) 和 actioncontext(上下文)
    Action
    Cookie 和Session
  • 原文地址:https://www.cnblogs.com/Lovis/p/10061046.html
Copyright © 2011-2022 走看看