http报文格式_理解数据通信协议的报文格式有何用?
以太网头里的源MAC,代表自己的MAC地址,6个字节。
以太网头里的目的MAC,代表接收者的MAC地址,6个字节。
以太网头里的Ethetype,代表着封装的是什么协议,这里为 0x0800,代表IP协议,2个字节。
以太网尾的FCS,代表着帧校验码,一般为CRC校验算法,4个字节。
网卡还需要将这些0、1二进制流进行编码,什么样电流波形代表0,什么代表1,然后0、1二进制流就变成了在网线里传输的电流波形。为了使得接收方提前做好接收的准备,还需要在发这些波形前,发送8个字节(64个二进制位)的同步信号。帧与帧之间还需要时间间隙(Inter-Frame Gap),以便于接收方识别每一个帧。Okay,将视角切换到接收方,接收方的检测到完整的64位的同步信号,做好了接收的准备。忽略掉64同步位,开始接收第65位开始的信号,并按照解码规范,将其解码成0或者1,并放入接收缓冲区。在此过程中,一旦接收到完整的目的MAC地址,和自己的MAC地址相比较,如果不同,放弃接收过程。如果相同则继续接收。接收过程一直持续到检测到空的的时间间隙(Inter-Frame Gap),这个帧接收完毕。网卡首先将最末尾的32位(4个字节)提取出来,按照协议规范,这个是FCS校验码,对接收到的帧(FCS除外)计算FCS校验码,看是否与提取出的FCS校验码相同。
如果相同,说明帧的是完好的,可以继续处理。
如果不同,说明帧出错,丢弃处理。
然后,网卡根据Ethetype = 0x0800,检索是哪个软件模块(回调函数)负责处理这个IP协议,IP模块将缓冲数据取走,并释放缓冲区。IP模块
IP模块就可以这个图片中的格式,对接收到的数据做报文格式合法性检查(Sanity Check)。只要有不合法的字段,丢弃处理。比如检查到TTL= 0,丢弃,还需要给源IP对应的主机发送ICMP出错消息。如果一切正常,IP模块提取出“Source IP”字段并查找路由表,进行路由选择,找到对应的出接口,将IP报文继续下沉到物理出接口(Outgoing Interface),物理接口按照接口的数据链路层封装类型(Ethernet /HDLC等),完成封装和编码,步骤雷同。经过N多中继路由器的接力,报文最终到达知乎服务器的IP层。IP层查找路由,发现自己就是真正的接收者,IP层提取出“Protocol”协议字段,假定“Protocol”= 0x06。IP层检索为“Protocol”= 0x06服务的模块为TCP模块。 IP层将IP头完全剥离,并将剥离掉IP头的数据提交给TCP模块处理。TCP模块
TCP模块同样要做报文合法性检查(Sanity Check)以及Checksum的校验工作。如果一切正常,TCP根据提取到的五元组{, , , , }来查找TCP Session ID。
如果找到,将报文转交到次Session ID处理
如果没有找到,且SYN = 1, 视为新建连接,创建一个新连接
如果没有找到,且SYN=0,视为非法链接,发Reset处理。
假设找到Session ID, 该Session ID负责该报文头的读取处理工作,更新滑动窗口,发送确认报文。同时依据“Destination Port”来检索谁为该报文继续处理。这里“Destination Port”= 443, 由TLS协议来处理,TCP剥离掉TCP头,将剩余部分提交给TLS处理。TLS模块如下图所示,TLS依据“Type”字段是“Hand Shake”、“Change_Spec”、“Alert”、“Application”其中之一,可以知道是握手报文、还是应用数据报文。
假设这里“Type” = “Application”,表示这是加密的上层数据,如灰色部分所示。TLS根据TLS Session ID检索出解密的密钥(Session Key)、HMAC Key ,将加密数据加密出来,然后完成数据的完整性校验工作。如果一切正常,解密出明文数据,在明文数据的头部,有一个字段名字叫“Application Protocol”,有HTTP 1.1,HTTP 1.2,SPDY等,TLS检索为该类型负责的模块。假定这里为HTTP 1.2。HTTP模块如下图所示,http也有自己的协议格式,规范每一个字段偏移量的意义,这通常是使用TLV(Type Length Value)来完成。HTTP模块只要将每个字段的信息提取出来,并按照协议规范的意义理解之,并做出响应的动作即可。知乎服务器看到这原来是拉取用户主页的请求,由于请求页面已经嵌入了用户的“Access Token”,完成了用户的身份认证工作,知乎服务器将用户的主页按照HTTP 1.2协议格式组织好,并返回给Alice。数据需要再次从高层下沉到底层,这个过程和上浮过程是逆向的,如果理解了上浮过程,那么这个下沉过程就非常好理解!
http报文格式_理解数据通信协议的报文格式有何用?相关推荐
- 数据包格式_理解MQTT协议数据包结构
在本教程中,我们将更详细地介绍MQTT协议,以及MQTT消息或数据包的格式. 我们将研究: MQTT消息格式. MQTT消息头 消息字段和编码 控制消息编码示例 介绍 MQTT是基于二进制的协议,控制 ...
- python分析数据的相关性质_理解数据的性质_Python数据分析实战应用_数据挖掘与分析视频-51CTO学院...
为什么学Python: 重要:数据分析是职业技能必备,Python是大数据分析** 趋势:Python是目前非常火的编程语言,使用人多 好学:学习简单,容易上手,使用灵活,可扩展强 **:会Pytho ...
- Java读取mapinfo格式_求助:如何把mapinfo格式的地图数据放到网页中显示
声明,我可不是做广告哦 mapXtreme Java,是目前用于Internet或企业Intranet唯一的100%纯Java地图服务器.mapInfo mapXtreme Java与J2EE兼容,为 ...
- vue数据定义格式_用好单元格自定义格式,让Excel按照你的要求显示数据
[温馨提示]亲爱的朋友,阅读之前请您点击[关注],您的支持将是我最大的动力!#百校助力高考加油站# Excel表格中的数据,我们通常会根据需求,选择设置单元格格式,然后再选择数据类型:数值.文本.日期 ...
- sql怎么导出带标题的csv格式_导出数据为csv格式
1.创建存储过程 CREATE OR REPLACE PROCEDURE SQL_TO_CSV ( P_QUERY IN VARCHAR2, -- PLSQL文 P_DIR IN VARCHAR2, ...
- xml格式的word转为标准格式_保持的怎么保证Word格式不变?4个技巧需要带走
来自word妹,侵联系删 在处理文档时,我们时常需要复制或者插入内容等,那如何保持格式不发生变化呢?本期与大家分享4个保持格式不变的Word技巧. 1.复制内容,如何保持与文本格式一致? 复制文本内容 ...
- python excel条件格式_关于python调用Excel“条件格式”——二探openpyxl
熟悉我的人大概,知道我早期写过 "监控自觉系统","日报自处理程序" 日报那个程序就是有用到openpyxl 来操作Excel 不过还是要道歉本期的质量,还是第 ...
- 各种说明方法的答题格式_说明方法的作用答题格式
说明方法的作用答题格式2020-02-20 10:26:50文/颜雨 举例子:具体.准确地说明了--,使说明更具体,更有说服力.列数字:科学.具体.准确地说--,使说明更有说服力,令读者信服.打比方: ...
- php java转换为字符串格式_在PHP中将“原始”字符串格式转换为Java UUID
小编典典 您的问题没有多大意义,但是假设您想以Java正确的格式读取UUID,则可以执行以下操作: import java.util.UUID; class A { public static voi ...
最新文章
- Android NDK开发-3-环境搭建
- struts2+jquery之form插件实现异步上传图片并显示
- 解决安卓中单个dex方法数超过65535的方法
- JSON 之 SuperObject(6): 方法
- 众望所归!中国机器狗能【后空翻】了。。。
- 【译】 WebSocket 协议第八章——错误处理(Error Handling)
- python处理文本数据
- 【BZOJ4289】Tax,堆优化dijsktra的最短路问题
- 微软Skype即将抛弃Windows Phone 8和8.1用户
- 计算机网络知识汇总(超详细整理)
- Barcode模块管理条码扫描识别
- c语言学习指南app,c语言学习手册app
- 【游戏逆向】老飞飞怀恋魅力爱玩等老飞飞瞬移分析代码
- office安装双击setup后点击‘立即安装’无反应(闪退)
- 计算机视觉入门CV之街道字符识别—01赛题理解
- 蓝牙耳机电脑玩游戏进入没声音设置
- 阿里云域名注册详解与Github绑定
- 塔望食品品牌策划:中国鳗鱼行业市场现状及发展趋势分析
- 揭秘清道夫轮巡码制作流程
- 多用户商城系统 KgMall2.1发布!
热门文章
- python观察日志(part1)--字典反向查找
- 网络编程(part8)--传输层服务之TCP和UDP
- HTML基础(part7)--常用标签之超链接标签
- SAP 电商云 Spartacus UI Component 级别的延迟加载实现(Lazy Load)
- 关于 HANA CE Function
- Angular 应用里的 vendor.js 是用来干什么的?
- Angular CLI 全局 ng.cmd 文件内容分析
- SAP Spartacus CMSFlexComponent
- Angular依赖注入的一个例子和注入原理单步调试
- 将ABAP数据库表的定义导入到PostgreSQL