网络层各级协议报文样式
概述
协议 | 所属层次 | 单位 | 长度 |
---|---|---|---|
点对点协议 PPP | 数据链路层 | Mac帧 | 64~1518 |
IP协议 | 网络层 | 分组 packet | 20~65535 |
UDP | 运输层 | 数据报 | 8~65535 |
TCP | 运输层 | 数据段 | 4GB |
HTTP | 应用层 | 数据 | N/A |
PPP
-
首部
-
目的地址:包含目的MAC地址信息
-
源地址:包含源MAC地址信息
-
类型字段:里面包含的信息用来标志上一层使用的是什么协议,以便接收端把收到的MAC帧的数据部分上交给上一层的这个协议、
-
-
尾部
- FCS:CRC检验字段
IP
-
版本
-
0.5字节
-
IP协议的版本
-
-
首部长度
-
0.5字节
-
最大可表示15
-
最小值是5
-
单位是4字节
-
如果不是4字节的整数的时候记号填充字段
-
-
区分服务
-
1字节
-
只有需要区分服务的时候才有用
-
-
总长度
-
2字节
-
单位字节
-
IP数据报最大为65535字节
-
如果IP数据包超过了下称协议的最大传送单元MTU:传送的帧的数据部分的长度上限,则需要分片处理
-
-
标识
-
占2字节
-
没发送一个计数器就加1,并将此值赋给报
-
用来在分片的时候确定是否是同一片
-
-
标志
-
3/8 字节
-
只有前两位有意义
-
最低为MF,为1表示还有分片,为0表示是最后一个
-
中间一位是DF,为1表示不能分片
-
-
片偏移
-
13/8字节
-
某片在原分组中的相对位置
-
单位:8字节
-
分片的长度一定是8字节的整数倍
-
-
生存时间 TTL
-
1字节
-
数据报在网络中的寿命
-
由源点设置
-
每经过一个路由器就减一
-
现在叫跳数限制
-
最大值255
-
设置为1表示只能在局域网中发送
-
-
协议
-
1字节
-
指出携带的数据是使用何种协议
-
-
首部检验和
-
2字节
-
值检验数据报的首部,不包括数据部分
-
不采用CRC
-
先把数据报首部划分位许多2字节的序列,并把检验和字段置为0,用反码运算把所有16位相加后,把得到的和写入检验和字段。接收方收到之后再进行一次,将得到的和取反码。与接收方的检验和相加,如果没有发生变化,则结果必为0
-
-
源地址
- 4字节
-
目的地址
- 4字节
-
可选字段
UDP
-
伪首部
-
计算校验和的时候要在·UDP用户数据报之前增加12个字节的伪首部
-
只在计算校验和时临时添加
-
UDP的校验和把首部和数据部分一起都检验
-
源IP地址
-
目的IP地址
-
0
-
协议(UDP为17)
-
UDP长度
-
-
首部字段
-
源端口
2字节。在需要对方回信时选用,不需要时全0 -
目的端口
2字节,在终点交付报文时必须使用 -
长度
UDP数据报的长度 -
检验和
检测UDP用户数据报在传输中是否有错
-
-
数据字段
TCP
- 源端口:占两个字节
- 目的端口:占两个字节
- 序号:占4字节 在TCP传送的字节流中每一个字节都按顺序编号,此处的序号是本报文段所发送的第一个字节的序号
- 确认号:占4字节 希望收到对方的下一个报文段的第一个数据字节的序号
- 有4字节,可以对4GB的数据编号
- 数据偏移:占4位,TCP报文段的数据起始处距离TCP报文段的起始处有多远
- 保留:6位,保留为今后使用,目前设置为0
- CWR(Congestion Window Reduce):拥塞窗口减少标志,用来表明它接收到了设置 ECE 标志的 TCP 包。并且,发送方收到消息之后,通过减小发送窗口的大小来降低发送速率。
- ECE(ECN Echo):用来在 TCP 三次握手时表明一个 TCP 端是具备 ECN 功能的。在数据传输过程中,它也用来表明接收到的 TCP 包的 IP 头部的 ECN 被设置为 11,即网络线路拥堵。
- URG(Urgent):表示本报文段中发送的数据是否包含紧急数据。URG=1 时表示有紧急数据。当 URG=1 时,后面的紧急指针字段才有效。
- ACK(Acknowledgment Number):表示前面的确认号字段是否有效。ACK=1 时表示有效。只有当 ACK=1 时,前面的确认号字段才有效。TCP 规定,连接建立后,ACK 必须为 1。
- PSH(Push):告诉对方收到该报文段后是否立即把数据推送给上层。如果值为 1,表示应当立即把数据提交给上层,而不是缓存起来。
- RST(Reset):表示是否重置连接。如果 RST=1,说明 TCP 连接出现了严重错误(如主机崩溃),必须释放连接,然后再重新建立连接。
- SYN(Sync):在建立连接时使用,用来同步序号。当 SYN=1,ACK=0 时,表示这是一个请求建立连接的报文段;当 SYN=1,ACK=1 时,表示对方同意建立连接。SYN=1 时,说明这是一个请求建立连接或同意建立连接的报文。只有在前两次握手中 SYN 才为 1。
- FIN(Finish):标记数据是否发送完毕。如果 FIN=1,表示数据已经发送完成,可以释放连接。
- 窗口:2字节,指的是接受窗口
- 校验和:2字节 校验范围包括首部和数据两部分,也需要加@伪首部
- 紧急指针:两字节,指出紧急的字节数
- 选项:长度可变,最长40字节
- 若没有选项,TCP首部长度为20字节
HTTP
- 请求行
- 方法
- URL
- 版本
- 首部行
- 首部字段:值
- 首部主体 请求报文通常不用,有些响应报文不用