数据的封包和拆包
封包:
- 应用层数据(例如HTTP请求)被传递给传输层。
- 传输层(TCP)在数据前添加TCP头部(包含端口号、序列号等)。
- 网络层(IP)在TCP段前添加IP头部(包含源IP地址、目的IP地址等)。
- 链路层在IP包前添加链路层头部和尾部(例如以太网帧头)。
拆包:
- 链路层从以太网帧中提取IP包。
- 网络层从IP包中提取TCP段。
- 传输层从TCP段中提取数据,
- 应用层使用数据。
--> 帧:
位于链路层(OSI七层模型),是链路层传递的基本单元(不一定最小)
其中包含:帧的长度,源MAC地址,目的MAC地址(MAC地址也称物理地址,硬件地址,全球唯一)其装的数据,以及各种校验位
其数据段最多能存放1500字节,最少要保证其一帧有64字节数据(也就是说数据段+其他段不够64字节时,会添加填充字节来时该帧大小达到64字节,填充字节不包含有效信息)
-->管道
用于IPC(进程间通信),最大大小可自定义,其最小大小为4k(称为1页,不管设置多小,系统会补全到至少1页,且大于1页时,会设置为1页的整数倍(n*4k))
-->套接字缓冲区
一般为4kb,与ubuntu中文件缓冲区一致,输入缓冲区为1kb
www(万维网)
一个大型的,交互式的信息储藏空间,万维网利用网页之间的链接将不同网站的网页链接成一张逻辑上的信息网,从而用户可以方便的从internet上的一个站点去访问另一个站点 。其中站点由一个或多个处于不同地理位置的源服务器(数据的来源)托管。
URL:标识万维网文档
HTTP:应用层协议,用于实现链接
HTML:使用超链接,将标签与资源链接起来,显示给用户
统一资源定位器URL(uniform resource locator )
统一资源定位符 URL 是用来表示从互联网上得到的资源位置和访问这些资源的方法,其实际上是资源的地址(“资源” 是指在互联网上可以被访问的任何对象,包括文件目录、文件、文档、图形、声音等,以及与互联网相连的任何形式的数据。)
URL的一般形式一般由以下四个部分组成:
<协议>://<主机>:<端口号>/<路径>
主机指的的是主机在因特网上的域名,端口号和路径可省略
使用http的URL:
一般形式:http://<主机>:<端口号>/<路径>
http的默认端口号为80,通常可省略(https:http的加密版本,默认端口号为443),如果省略其路径项,URL就指到了某个主页:
1.一个www服务器最高级别的页面
2.可以连接到与本组织相关的其他站点
清华大学主页:
http://www.tsinghua.edu.cn
路径指向的从属界面:
http://www.tsinghua.edu.cn/chn/yxsz/index.htm
超文本传输协议http
操作过程:
HTTP是Web通信的基础,它定义了客户端和服务器之间如何请求和响应资源。
HTTP 规定在 HTTP 客户与 HTTP 服务器之间的每次交互,都由一个 ASCII 码串构成的请求和一个类似的通用互联网扩充,即 “类 MIME(MIME-like)” 的响应组成。(如Content-Type: text/html; charset=UTF-8
,这告诉浏览器响应的内容类型是HTML,并且应该使用UTF-8字符集,类型+填充值)HTTP 报文通常都使用 TCP 连接传送。(包含三次握手,4次挥手)
http访问目标过程:
(1)浏览器分析链接指向页面的URL。
(2)浏览器向DNS请求解析www.tsinghua.edu.cn 的IP地址。
(3)域名系统DNS解析出清华大学服务器的IP地址为166.111.4.100。
(4)浏览器与服务器建立TCP连接(在服务器端IP地址是166.111.4.100,端口是80)
(5)浏览器发出取文件命令:GET /chn/yxsz/index.htm。
(6)服务器www.tsinghua.edu.cn 给出响应,把文件index.htm 发送给浏览器。
(7)释放TCP连接。
(8)浏览器显示“清华大学院系设置”文件index.htm中的所有文本。
分析URL->尝试连接->取文件->释放连接->显示
HTTP本身是无连接的(不需要建立http的连接,实际上用的是tcp的连接)
HTTP协议是无状态的(服务器不会记录用户数据,每次访问的数据都与第一次相同)
http1.0
首先,建立一个http链接需要2倍RTT(往返时间),也就是3次握手(最后一次握手发送http请求报文),加一次服务器返回数据,在http1.0中每请求一次文档,就要产生一次TCP连接,这样会大大增加服务器的负担
http1.1
使用了持续连接来改善这个问题,所谓持续连接就是与服务器取得连接后的一段时间仍然在该线路上发送请求报文与数据。
-->流水线方式与非流水线方式
流水线方式:客户在收到前一个响应后才能发出下一个请求。这比非持续连接要用去两倍 RTT 的开销,节省了建立 TCP 连接所需的一个 RTT 时间。但是,在发送完一个对象后,其TCP连接就处于空闲状态,浪费了服务器资源
流水线方式:客户在收到 HTTP 的响应报文之前就能够接着发送新的请求报文。减少了TCP连接中的空闲时间,提高了效率
http报文结构
其中,请求报文的开始行应该以get开始,以版本号结束,如:HTTP/1.1
请求报文示例:
3种常见的错误: