网络技术入门 :HTTP报文和TCP/IP数据包

本章把HTTP报文和TCP/IP数据包放在一起。是因为:
报文是一个完成的有意义的数据。
数据包可以理解为组成报文的传输单元。

应用程序的数据一般都比较大,因此TCP会按照网络包的大小对数据进行拆分。这些被拆分的数据块,编上号,在经过传输层,网络层,数据链路层后被拼接成数据包发送。接收端收到数据包后,将数据包按顺序组装起来,就是一个完整的数据报数据。

本系列文章
网络技术入门(一):网络技术基础知识系统归结
网络技术入门(二):两个主机(客户端和服务器)通信过程(硬件转发角度)
网络技术入门(三):两个主机(客户端和服务器)通信过程(数据包交换角度)
网络技术入门(四):两个主机(客户端和服务器)通信过程(TCP/IP通信角度)
网络技术入门 :HTTP报文和TCP/IP数据包

.待更新
.
.


这里添加一个拓展

完整的数据是在什么时候被拆分成小的数据包的?
内核的网络模块会将缓冲区(write buffer)的消息进行分块传输。是在传输层被拆分的。

为了详细说明数据被拆分。
1 简单描述数据传输的整个流程
2 详细描述数据被拆分

1 简单描述一下数据的传输:

1 应用层当我们发出一个HTTP请求时,如果访问的是域名,首先会向DNS服务器请求获取域名对应的IP地址。
2 IP和数据会交给socket网络组件(socket库),socket库相关API的实现实际是操作系统内部的协议栈的操作。
3 TCP/IP协议栈对数据处理(包括握手,分手,数据拆分等),然后数据会被送往网卡驱动程序,然后送往网卡,最后经过路由器在互联网转发找到目标主机所在子网络。
4 在子网络内广播或者单播后数据会送达目标服务器(主机)。

2 数据被拆分详细描述:

TCP网络连接时。 UDP这里不做描述。
1 服务器端创建socket套接字,bind绑定IP和端口号,listen监听,accept等待连接,write和read 读写,close关闭套接字。
2 客户端 创建socket套接字,bind绑定IP和端口号,connect发起连接(三次握手),write和read
读写,close关闭套接字。
3 实际数据被拆分就是在调用socket组件的write写方法时。当write被调用,实际会向操作系统内核所维护的buffer中写数据。然后数据会被线程送往网卡。如果数据包太大被差分就是在这个过程,操作系统来做。

关于详细的基于TCP/IP协议栈的文章等后续文章更新。
网络技术入门(四):两个主机(客户端和服务器)通信过程(TCP/IP通信角度)


一、HTTP报文结构

在这里插入图片描述

1 HTTP请求报文和HTTP响应报文

HTTP请求报文:
请求行:通过这一行可以大致了解请求的内容。请求方法post get等。
消息头:每一行包含一个头字段,用于表示请求的附加信息。消息头的行数根据具体情况可变,一直延伸到空行为止
消息体:包含客户端向服务器发送的数据,例如POST方法向Web服务器发送的网页表单数据

HTTP响应报文:
状态行
消息头:同上
消息体:包含服务器向客户端发送的数据,例如从文件中读取的数据,或者CGI应用程序输出的数据等。消息体的内容作为二进制数据来处理

2 查看HTTP请求报文和响应报文的方式。

无论在开发还是测试中,我们都可以借助工具来查看HTTP报文,比如浏览器开发工具,fiddler,wireshark等,这些工具功能强大,关于如何使用这些工具,以及这些工具抓包的区别,请自行查阅。这里只介绍HTTP报文查看。

1 chrome开发工具

在这里插入图片描述

2 fillder查看报文

在这里插入图片描述
上半部分是请求报文,下半部分是响应报文。通过Headers,TextView,WebForms,HexView等标签也可以查看更多内容,可自行尝试。

3 wireshark查看报文

请求报文:
在这里插入图片描述
响应报文:
在这里插入图片描述

wireshark抓包,请求和响应是分两条记录的,因为wireshark是从网卡抓取数据包,所以OSI七层协议的详细记录都能获取。(这里非常建议结合OSI七层协议和wireshark分析一下,每个层次抓包数据,后面会单独拿出两章来分析wireshark抓取的七层协议记录和抓取rtmp数据流

总结:
1 Fiddler主要来捕获应用层的数据包,HTTP,HTTPS,websocket等,并且能够解析HTTPS包数据。
2 Wireshark是从网卡抓取数据包,网络七层的数据都能抓取。但是对于抓取本地回环(127.x.x.x)和HTTPS的数据包需要额外的辅助配置才能分析(本地回环的包可以配合RawCap分析)。
3 对于cookie和cache也被记录在http消息头(请求头)。
4 这里建议对于HTTPS和HTTP的包使用fiddler抓包。对于TCP,UDP,rtmpt,websocket等用wireshark抓包。

报文(message):是网路中交换与传输的数据单元,也是网络传输的单元,报文包含了将要发送的完整的数据信息,其长短不一。报文在传输过程中会不断地封装成分组、包、帧来传输,封装的方式就是添加一些控制信息组成的不受,那些就是报文头


二、TCP/IP数据包

在这里插入图片描述
以太网帧报头:以太网控制信息。
IP协报头:IP控制信息。
TCP协议报头和数据块:包的内容。
FCS:帧校验序列。
MSS:最大分段大小。除去头部之后,一个网络包所能容纳的 TCP 数据的最大长度。
MTU:最大传输单元。一个网络包的最大长度,以太网中一般为 1500 字节。

关于数据包在网络层次中的封装过程,在后续章节会更新,等待贴链接…

数据包(packet):在TCP/IP协议通信传输中的数据单元,也称为“包”。指自包含的,带有足够寻址信息,可独立地从源主机传输到目的主机,而不需要以来早期地源主机和目的主机之间交换信息以及传输网络地数据包


附加:TCP,IP和以太网帧头部格式表

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章