OSI协议
横向看(为哪两个平行的东西提供服务) 纵向看(为上层提供什么服务)
专有名词
报文 | 应用层 |
---|
报文段(TCP),数据报(UDP) | 传输层 | 分组,包,数据报 | 网络层 | 帧 | 数据链路层 | 数据单元 | 物理层 |
- 应用层
。为应用程序提供通讯和交互的协议 。DNS, HTTP, SMTP,DHCP,FTP - 传输层
。为两台主机之间的进程提供通用的数据传输服务 。为上层:把应用层的报文封装成TCP报文段或UDP数据报进行传送 。TCP, UDP - 网络层
。为两台主机间的通信提供服务 。为上层:把报文段或数据报封装成IP数据报进行传送 。ICMP, ARP - 数据链路层
。也是为两台主机之间的数据传输提供服务。两台主机之间的传输,总是在一段一段的链路上传送的,这就需要链路层协议。 。为上层:把IP数据报封装成帧,在链路上进行传递。 。CSMA, PPP - 物理层
。在传输媒体上进行比特流传输 。为上层:把帧拆分成比特流在传输媒介上进行传输。尽可能为数据链路层屏蔽传输媒体和通信手段的差异。 。时分复用,频分复用
应用层
DNS协议
域名解析协议,提供了域名和IP之间的相互转换
可以使用UDP或TCP,但一般使用UDP 1.UDP更快,一个请求,一个应答就可以了 而TCP三次握手连接。 2.但UDP协议传输的内容不能超过512字节,一般客户端向DNS服务器查域名,返回的内容都不超过512字节,UDP就够了。
但区域传送要用TCP
区域传送:主DNS服务器上的数据有变化了,要向下传送变化的那部分数据时,因为1.数据很大,2.要保证可靠传输,所以不能用UDP。
DHCP
自动为用户配置IP地址,子网掩码,网关等信息。用户不需要再手动配置IP地址。
Web页面的请求过程
特别详细深入的过程 1.DHCP获取主机自己的IP,DNS服务器IP,默认网关IP 主机生成一个DHCP请求报文放入UDP报文中,然后再封装成IP数据报,再封装成帧,将该帧广播到与交换机连接的所有设备上,DHCP服务器收到后发送报文给主机包括(主机IP,DNSIP, 默认网关IP),主机收到后配置自己的相关信息。 2. 主机生成一个DNS查询报文 将字符串www.google.com放入DNS报文段,封装成UDP数据报,放入具有DNS服务器为目的IP地址的IP数据报,封入帧,将帧发送到默认网关路由器,但刚刚只拿到了IP,不知道MAC地址。 3.主机生成一个具有默认网关IP的ARP查询报文 将该ARP报文放在帧中广播,网关路由器收到后,准备一个ARP回答。主机从回答报文中抽取网关路由器的MAC地址。 4.拿到网关地址后,把生成的DNS查询报文转发给网关 网关路由器根据DNS查询的IP数据报,把它转发给对应的DNS服务器。DNS服务器在它的数据库中找www.google.com对应的IP,并反向转发给主机。 5.主机从DNS报文中抽出服务器(google)的IP 主机首先与服务器进行三次握手连接
主机 | 服务器 |
---|
向服务器发送TCP SYN报文段 | | | 服务器收到,回一个SYN ACK报文段 | 主机收到,再发送一个ACK确认连接报文段到HTTP服务器 | 三次连接建立完毕 | HTTP GET报文写入套接字,交给HTTP服务器 | | | 服务器从套接字读取HTTP GET 报文,生成一个响应报文,将对应的WEB资源放入HTTP响应体,并将报文写进TCP套接字 | 浏览器收到HTTP响应,抽取WEB页面的内容进行渲染 | |
HTTP状态码
1xx | 浏览器可以忽略或继续请求 |
---|
2xx | 成功 | 3xx | 重定向 | 4xx | 客户端请求错误(404资源没找到) | 5xx | 服务器错误 |
HTTP长连接和短连接
- 长连接: 当浏览器访问一个包含多张图片的网站时,如果是短连接就会建立大量TCP连接,这样很消耗资源,长连接允许只建立一个TCP连接,就能进行多次HTTP通信。
1.1之前默认短连接,1.1之后默认长连接 - 流水线: 默认情况下,HTTP请求按顺序发送,只有当当前请求收到响应,才会发送下一个请求。
而流水线就是在一个HTTP长连接下连续发出请求,不用等待响应返回,减少延迟。
Cookie&&Session
cookie是保存在客户端浏览器里的一种信息载体。可以实现免登陆功能。
how?:服务器发送的响应报文段首部有一个set-cookie字段。客户端拿到这个响应后,把这个字段保存在浏览器,当客户端再次发送请求相同资源时,会把cookie一起携带在请求中,发送到服务端。
Session: 服务器给每个浏览器创建一个session对象,保存在服务器里,存储在浏览器的cookie不安全,一些js脚本可能拿到cookie。
how?
- 用户登陆时,把用户名密码表单放入http请求报文中。
- 服务器收到后,为其创建一个session,并创建一个sessionID映射这个session。
- 把这个sessionID作为cookie发给客户端,客户端会保存在自己的cookie。
- 之后客户端对同一个服务器进行请求时,会带上这个cookie,服务器收到后提取sessionID,找到对应session,读取用户信息。
浏览器如果禁用了cookie,可以用URL重写技术,把sessionID作为URL的参数进行传递
session,cookie的作用域(哪些路径支持)可以设置;生命周期(过期时间)可以设置。
HTTP1.1和1.0主要区别
1.0 | 1.1 |
---|
长连接 | 短连接 | 支持断点续传,指定字节位置传送 | | 新增一些错误状态响应码 | | 增加了host信息(此时一台物理机可以存在多个虚拟主机) | |
请求转发和重定向
参考
https://blog.csdn.net/u011386173/article/details/123901024
|