socket模拟http的登陆_不为人知的网络编程(八):从数据传输层深度解密HTTP

1、引言

在文章《理论联系实际:Wireshark抓包分析TCP 3次握手、4次挥手过程》中,我们学会了用wireshark来分析TCP的“三次握手,四次挥手”,非常好用。这就是传说中的锤子,拿着 锤子,看什么都像 钉子!在这本文中,我对将准 HTTP这颗钉子,狠狠地砸下去。。。

为了对网络数据包的“流转”有更加深刻的理解,我在docker(远程)上部署一个服务,支持http方式调用。从客户端(本地)用http方式请求其中的一个接口,并得到响应数据。同时本地通过wireshark抓包,远程用tcpdump抓包,然后分析过程中的所有通信细节(悲剧是把美好的东西撕碎给人看,而我则是把复杂的东西撕碎了给人看)。

本文的主要内容是:先通过工具获取HTTP通信的数据包,再来抽丝剥茧,深入传输层二进制的天地里,解密HTTP所有的通信细节。分析过程中,由点到面,将相关知识串接起来。市面上讲HTTP协议的文章很多,但深入到传输层从2进制的角度来解析,则相当少见。保证全篇读完之后,你对HTTP的理解会上升一个台阶!

本文稍长,请在看本文时保持耐心。

28faa10f5804853c0f8b4c991dfd3e85.png

(本文同步发布于:http://www.52im.net/thread-2456-1-1.html)

2、关于作者

4d1b00efbdc8ba173b67aff738107420.png

饶全成:毕业于华中科技大学,中科院计算所硕士,滴滴出行后端研发工程师。微信公众号: 码农桃花源,个人博客:https://www.cnblogs.com/qcrao-2018/。

3、系列文章

1)本文是系列文章中的第8篇,本系列文章的大纲如下:

《不为人知的网络编程(一):浅析TCP协议中的疑难杂症(上篇)》

《不为人知的网络编程(二):浅析TCP协议中的疑难杂症(下篇)》

《不为人知的网络编程(三):关闭TCP连接时为什么会TIME_WAIT、CLOSE_WAIT》

《不为人知的网络编程(四):深入研究分析TCP的异常关闭》

《不为人知的网络编程(五):UDP的连接性和负载均衡》

《不为人知的网络编程(六):深入地理解UDP协议并用好它》

《不为人知的网络编程(七):如何让不可靠的UDP变的可靠?》

《不为人知的网络编程(八):从数据传输层深度解密HTTP》(本文)

2)如果您觉得本系列文章过于专业,您可先阅读《网络编程懒人入门》系列文章,该系列目录如下:

《网络编程懒人入门(一):快速理解网络通信协议(上篇)》

《网络编程懒人入门(二):快速理解网络通信协议(下篇)》

《网络编程懒人入门(三):快速理解TCP协议一篇就够》

《网络编程懒人入门(四):快速理解TCP和UDP的差异》

《网络编程懒人入门(五):快速理解为什么说UDP有时比TCP更有优势》

3)《脑残式网络编程入门》也适合入门学习,本系列大纲如下:

《脑残式网络编程入门(一):跟着动画来学TCP三次握手和四次挥手》

《脑残式网络编程入门(二):我们在读写Socket时,究竟在读写什么?》

《脑残式网络编程入门(三):HTTP协议必知必会的一些知识》

《脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)》

4)其它跟HTTP有关的文章:

《从HTTP/0.9到HTTP/2:一文读懂HTTP协议的历史演变和设计思路》

《美图App的移动端DNS优化实践:HTTPS请求耗时减小近半》

《一分钟理解 HTTPS 到底解决了什么问题》

《一篇读懂HTTPS:加密原理、安全逻辑、数字证书等》

《小白必读:闲话HTTP短连接中的Session和Token》

《IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理》

《从HTTP到MQTT:一个基于位置服务的APP数据通信实践概述》

《基于APNs最新HTTP/2接口实现iOS的高性能消息推送(服务端篇)》

《Comet技术详解:基于HTTP长连接的Web端实时通信技术》

《WebSocket详解(四):刨根问底HTTP与WebSocket的关系(上篇)》

《WebSocket详解(五):刨根问底HTTP与WebSocket的关系(下篇)》

4、在传输层捕获HTTP报文

4.1 背景介绍

我手头现在有一个地理几何相关的服务,它提供一组接口对外使用。其中有一个接口是Fence2Area. 使用方传入一个围栏(由点的列表组成,点由表示)、点的坐标系类型(谷歌地图用的是wgs84, 国内腾讯、高德用的是soso, 而百度用的是另一套自己的坐标系),接口输出的则是围栏的面积。

我请求服务的“Fence2Area”接口,输入围栏(fence)顶点(lng, lat)坐标、坐标系类型(coordtype),输出的则是多边形的面积(area).

一次正常的请求示例url, 这个大家都不陌生(我用docker_ip代替真实的ip):

http://docker_ip:7080/data?cmd=Fence2Area&meta={"caller":"test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值