网络协议 TCP 数据段 . 帧

1. TCP数据段格式

在这里插入图片描述

  1. 源端口 ,目的端口 :16位 2字节,发送端的端口号和接收端的端口号,和ip地址就可以完整的标识一个端点,也就构成了之前说过的,套接字socket.
  2. 序号(seq):32位 4字节,用来标示计算机 A------>B 数据包序号,TCP连接中,传送的数据字节流中的每一个数据字节都要按顺序进行编号,在“数据段头”中标识的只是每个数据段的第一个数据字节的编号,这个要传送的字节流的起始序号必须在连接建立时设置。
  3. 确认号(ack):32位 4字节,客户端和服务端都可发送, ACK = seq + 1 ,是对接受数据包的序号加一,是指期望接受到对方下一个数据段中“数据”部分的第一个字节序号,注意“确认号”不是代表已经正确接收到的最后一个字节的序号,如:主机b 已接受到主机a 发来的数据段,其序号值是101,而该数据端的长度是100,这表明主机包b 已经收到主句a 前200 个字节,下一个期望收到数据段第一个字节序号201,于是b给a发送的确认数据段时要把确认号设为201. 序号和 确认号两个字段共同用于tcp 服务中的差错控制,确保tcp 数据传输的可靠性。
  4. 数据偏移:指数据段中的“数据“部分起始处距离tcp 数据段起始处的字节偏移量,占4位,其实这里的”数据偏移“也是在确定tcp数据段,头部的长度,因为”数据“部分是紧挨着数据段头的,数据段头中有不确定定的”可选项“,字段,所以数据偏移字段是非常必要的,但是注意的是,数据偏移量是已32位(即4字节) 为单位来计算的 ,而不是以单个字节来计算的。四个比特位二进制为 0000 - 1111 表示的数的范围是0-15 ,假如为1,那么就是1 * 32 位 / 8= 4字节,同理,15 * 32 位 / 8= 60字节,也就是是说偏移量最大为60字节,也是tcp数据段头部分的最大长度。
  5. 保留(reserved):这是为将来应用而保留的6个比特位,目前应全为0。
  6. URG :
    紧急指针控制位,指出当前数据段中是否有紧急数据,占一位,置1时表示有紧急数据。紧急数据会优先安排传送,而不会按照原来的排队顺序发送。
  7. ACK
    (确认控制位),指示TCP 数据段中的,“确认号”字段是否有效,占1位,仅当ack 位置1是才表示“确认号”字段有效,否则表示“确认号” 字段无效。
  8. PSH
    Push(推)控制位,指示是否需要立即把收到的数局段提交给应用进程,占1位,当psh 位置 1 时要求接收端尽快把数据段提交给应用进程,而置为0是没有这个要求,可以先缓存起来。这是因为,有时我们发送的包很小,为了节省资源,tcp不会立即将数据发送出去,而是等待一段时间或者等待积累到一定数据后才发送。
  9. RST
    reset(重置)控制位,用于重置,释放一个已经混乱的传输连接,然后重新建立传输连接,占1位,当RST 位置1时。释放当前的传输连接,然后可以冲重新建立新的传输连接。
  10. SYN
    Synchronization(同步)控制位,用来在传输连接建立时同步传输链接序号,占1位。syn位1时,表示是一个连接请求或者连接确认报文。当syn=1,而ack=0时,表明这是一个链接请求数据段,如果对方同意建立链接,则对方会返回一个syn=1,ack=1的确认。
  11. FIN
    Final(最后)控制位,用于释放一个传输链接,占1位,当fin 位置1时,表示数据已经全部传输完成。发送端没有数据要传输了,要求释放当前链接,但是接收端仍然可以继续接收还没有完全接收完的数据,正常传输时置0.
  12. 窗口大小
    指示发送此tcp数据端的主机上用来存储传入数据段的窗口大小,也即发送者当前还可以接受的最大字节数,tcp使用可变大小的滑动窗口协议来进行流量控制,“窗口大小”字段的值告诉接收本数据段的主机,从本数段中设置的”确认号“值算起,本端允许对端发送的字节数,是作为让对方设置其发送窗口大小的依据,假设本次所发送的数据段的“确认号”字段值位501,而窗口大小“字段值为100,则从501开始算,本端还可接收100 字节( 序号为 501 - 600) ,因为tcp是双通道的,发送端告诉接收端,自己还剩下最大可接受数据缓存数,同样接受端的数据包中也会包含此字段,这样他俩各自都知道了对方的的可接受最大字节数,如果发现对方没有可用接收缓存,那么就不发送,这样就会起到调节作用,控制流量,当然了,它本身会定期去发送包探测对方的可接收缓存大小。
  13. 检验和
    检验和是针对“数据段头”,数据,和 伪头部三部分进行校验,占16位,伪头部包含源主机和目的主机的32位ip 地址,tcp议号,以及tcp数据段长度。校验和具体比较复杂,后边但讲。
  14. 紧急指针
    仅当urg 控制位置1时才有意义,它指出本段数据中为紧急数据的字节数,占16位,它指明了紧急数据末尾在数据段中的位置,所有紧急数据处理完后又恢复到正常操作,紧急数据无需缓存,窗口为0也可发送。
  15. 可选项
    可选项,字段是可选的,且长度可变,最长可达40字节,当没有使用该字段是tcp头部的长度20字节。他可以包含,sack选项,时间戳选项 等。
  16. 数据(_DATA)
    应用层提交的数据,作为tcp数据段的有效载荷部分,我们平时使用tcp 发送的就是这部分数据。

2.一个完整网络包形式

在这里插入图片描述
发起握手连接:
在这里插入图片描述蓝色部分就是我们的协议头 数据段,长度正好是 20字节,最小传输单元

从上到下 分别是
1.物理层 Frame
2. 数据链路层 Ethernet
3. 网络层 局域网
4. 网络层 以太网 Internet
5. 传输层 Transmission
6. 应用层 。。。。。。。
所以上边所说的数据段格式 指的是 5,传输层的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值