码农知识堂 - 1000bd
Python
PHP
JS/TS
JAVA
C/C++
C#
GO
Kotlin
Swift
各报文段格式集合
【1】数据链路层--
以太网
V2的MAC帧
前导码8B:数据链路层将封装好的MAC帧交付给物理层进行发送,物理层在发送MAC帧前,还要在前面添加8字节的前导码(分为7字节的前同步码+1字节的帧开始定界符)
MAC地址长度6B
数据长度46~1500B,首部和尾部是18B,因此最短帧长64B
满足最小帧长64B的要求(6+6+2+46+4=64)
以太网在传递时,各帧之间必须有一定的间隙,因此不需要帧结束符(但要有帧尾部)
【2】数据链路层-- 802.1Q帧(
VLAN
)
它对以太网V2的MAC帧格式进行了扩展:在源地址字段和类型字段之间插入了4B的VLAN标签(tag)字段
802.1Q帧一般不由用户主机处理,而是由以太网交换机来处理:
当交换机收到普通的以太网MAC帧时,会给其插入4B的VLAN标签使其成为802.1Q帧,该处理简称为“打标签”
当交换机转发802.1Q帧时,可能会删除其4B的VLAN标签使之成为普通的以太网MAC帧,该处理简称为“去标签”。交换机转发802.1Q帧也有可能不进行“去标签”处理,取决于交换机的接口类型
【3】数据链路层–802.11无线局域网的MAC帧
持续期:用于实现CSMA/CA的虚拟载波监听和信道预约机制。在数据帧、RTS帧和CTS帧中用该字段指出将要持续占用信道的时长
序号控制:802.11使用可靠传输,这个字段是对数据帧进行编号
地址1、地址2、地址3、地址4:取决于帧控制字段中的“去往DS”和“来自DS”。具体如下:
【4】数据链路层-- PPP帧
使用PPP的数据链路层,向上提供的是不可靠的数据传输服务:接收方每收到一个PPP帧,就进行CRC校验,若检验正确就收下这个帧,否则就丢弃这个帧
网络层-- IP分组
首部固定部分20B,最大为60B
最小取值为0101(
5 × 4 = 20 5\times 4=20
5
×
4
=
20
)
最大取值为1111(
15 × 4 = 60 15\times 4=60
15
×
4
=
60
)
用于分片的三个字段:例如以太网规定MTU取值为1500B,当IPv4数据报长于MTU时,无法封装成帧,需要将原IPv4数据报分片为若干个更小的IPv4数据报
标识:同属于一个IPv4数据报的各分片数据报应该具有相同的标识
标志:
MF:为1表示本分片后面还有分片;为0表示本分片后面没有分片
DF:为0表示允许分片;为1表示不允许分片
片偏移:其开始的字节号(从0开始)/8
生存时间TTL:以跳数为单位,路由器收到该数据报就将其TTL字段-1,若结果不为0就转发,否则就丢弃
协议:用来指明IPv4数据报的数据载荷是何种协议数据单元PDU
首部校验和:只校验首部。数据报每经过一个路由器,路由器都要重新计算一下首部检验和
发送方首部检验和的计算方法:
接收端检验是否出错的方法:
源地址和目的地址字段长度都为4B
填充:当首部长度(20+可变)的长度不是4字节的整数倍时,就填充相应数量的全0字节,以确保IPv4数据报的首部长度是4字节的整数倍
单位:(一种八片首饰)
总长度(首部+数据载荷):1
片偏移:8
首部长度:4
传输层-- TCP报文段
TCP实现可靠传输的相关字段
序号:用来指出本TCP报文段的数据载荷的第一个字节的序号
确认号:用来指出期望收到对方下一个TCP报文段的数据载荷的第一个字节的序号,同时也是对之前收到的所有数据的确认。只有当确认标志位ACK为1时,确认号字段才有效。
确认标志位ACK:TCP规定,在TCP连接建立后,所有传送的TCP报文段都必须把ACK置1
数据偏移:以4字节为单位,指出TCP报文段的首部长度(是TCP报文段的数据载荷部分的起始处距离TCP报文段的起始处有多远)
标志位:
同步标志位SYN:用于TCP三报文握手建立连接
SYN=1且ACK=0时:是一个TCP连接请求报文段
SYN=1且ACK=1时:对方同意建立连接,发送这样首部的响应报文
因此,SYN=1时,要么是一个连接请求报文段,要么是一个连接响应报文段
终止标志位FIN:用于TCP四报文挥手释放链接
FIN=1时,表示此TCP报文段的发送方已经将全部数据发送完毕,现在要求释放TCP连接
复位标志位RST:用于复位TCP连接
RST=1时,表明TCP连接中出现严重差错,必须释放连接,然后再重新建立连接;此外,还可通过将RST置1来拒绝一个非法的TCP报文段或拒绝打开一个TCP连接
推送标志位PSH:出于效率,TCP发送方可能会延迟发送数据以一次发送更多的数据。但当两个应用进行交互式通信时,需要高实时性,这时应用进程可通知TCP使用推送(PSH)操作
发送方TCP把PSH置1,并立即创建一个TCP报文段发送出去,而不需要累积到足够多的数据再发送
接收方TCP收到PSH为1的TCP报文段,就尽快地交付给应用进程,而不再等到接收到足够多的数据才向上交付
紧急标志位URG:当发送方有紧急数据时,可将紧急数据插队到发送缓存的最前面,并立刻封装到一个TCP报文段中进行发送。后面的紧急指针字段会指出本报文段数据载荷部分包含了多长的紧急数据,紧急数据后是普通数据。接收方收到紧急标志位为1的TCP报文段,会按照紧急指针字段的值从报文段数据载荷中取出紧急数据并直接上交应用进程,而不必在接受缓存中排队
窗口:以字节为单位,指出接收窗口的大小,进而控制发送方的数据发送量。这就是所谓的流量控制
检验和:用来检查整个TCP报文段在传输中是否出现误码。和UDP一样,在计算检验和时,要在TCP报文段的前面加上12字节的伪首部,伪首部的格式与UDP也一样
(发送方)计算检验和的方法:
将TCP首部中检验和字段的值置为0;
将伪首部、TCP首部以及数据载荷这三部分划分成若干个2字节的字;
对划分出的全部2字节的字进行反码算术运算求和,并将求和结果取反码;4)将步骤三得到的结果写入TCP首部中的检验和字段
(接收方)通过检验和字段判断TCP报文段在传输过程中是否误码的方法
给接收到的TCP报文段前面添加一个12字节的伪首部
将伪首部、TCP首部、数据载荷三部分划分成若干个2字节的字
对划分出的全部2字节的字进行反码算术运算求和,并将求和结果取反码
若步骤三得到的结果为0,则表示TCP报文段在传输过程中没有误码。否则则出现了误码
其与IPv4数据报首部检验和的计算方法类似,差别仅在于IP数据报只对首部进行检验;而TCP检验和对整个TCP报文段进行检验
传输层-- UDP数据报
首部8B,由4个字段组成(都是2B)
长度字段包括首部+数据部分
检验和对伪首部、UDP报文头以及数据部分(即应用层数据)进行校验
伪首部:仅在计算校验和时存在,不发送。伪首部包括IP分组报头的一部分
应用层--
HTTP报文
HTTP报文分为请求报文和响应报文
请求报文:
请求行:请求方法(GET/POST)、请求URL、HTTP协议版本
首部行
请求体/实体主体
响应报文:
状态行
响应头部
响应体
相关阅读:
python LeetCode 刷题记录 100
博途1200PLC轴控功能块(脉冲轴)
JZ31 栈的压入、弹出序列
How to Config VS2022
多来客推出新版短视频矩阵系统,携手灰豚AI大模型引领行业革新。
给echart.js折线图设置滚动条
GPIO实验:ARM汇编代码实现LED灯亮灭控制
王江涛十天搞定考研词汇
WEB应用
给你的 SpringBoot 工程部署的 jar 包瘦瘦身吧!
原文地址:https://blog.csdn.net/qq_43527718/article/details/133420622
最新文章
沪漂五周年了:我越来越迷茫了
Agentic Skill Routing 实战:别再把所有 Skill 塞进 AI Agent 上下文
MySQL-Seconds_behind_master的精度误差
[MAF预定义ChatClient中间件-03]CachingChatClient——利用缓存省钱省时间
AI的至暗历史:从万众期待到被政府撤资,AI的两次死亡徘徊
Agent OS :五种驯服不确定性的范式
PortSwigger SQL注入LAB11
数据库即时编译JIT
[Begin]AI Learn Data Day 0
深度学习进阶(二十七)现代 LLM 的核心架构设计其二:SwiGLU
热门文章
十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
奉劝各位学弟学妹们,该打造你的技术影响力了!
五年了,我在 CSDN 的两个一百万。
Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
面试官都震惊,你这网络基础可以啊!
你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
心情不好的时候,用 Python 画棵樱花树送给自己吧
通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
13 万字 C 语言从入门到精通保姆级教程2021 年版
10行代码集2000张美女图,Python爬虫120例,再上征途
小工具
小游戏
Copyright © 2022 侵权请联系
2656653265@qq.com
京ICP备2022015340号-1
京公网安备 11010502049817号