您现在的位置是:首页 > 正文

http知识点整理记录

2024-04-01 01:41:47阅读 4

TCP的三次握手四次挥手:


三次握手(建立连接):

    第一次握手: 建立连接时,客户端向服务器端发送TCP连接请求数据包(SYN=1,seq=x),客户端进入SYN_SEND状态

    第二次握手: 服务器确认数据包,并返回自己的数据包(SYN=1,ACK=1,ack=x+1,seq=y),服务器进入SYN_RECV状态

    第三次握手: 客户端确认并再次发出确认(ACK=1,ack=y+1,seq=x+1),确认发送完毕后,客户端和服务端处于ESTABLISHED状态

    意义:如果客户端发起一个连接请求报文段没有丢失,延误到连接释放后才发送到服务端,服务端认为客户端发起了连接请求,如果没有

              三次握手,那么就会直接建立起连接,但实际并不需要建立连接(浪费资源),三次握手需要客户端再次确认后,才会建立起连接

 

四次挥手(四次挥手):

    第一次挥手:客户端发起释放连接的请求报文(FIN=1,seq=u),客户端进入FIN-WAIT-1状态

    第二次挥手:服务端收到连接释放的请求报文,发出确认报文(ACK=1,seq=v,ack=u+1),服务端进入CLOSE-WAIT状态,客户端                        向服务端发送数据的连接关闭,客户端收到确认消息后,客户端进入FIN-WAIT-2状态,等待服务端发送释放连接报文

    第三次挥手:服务端将最后的数据发送完后,向客户端发送释放连接报文(FIN=1, ACK=1,ack=u+1,seq=w),服务端进入LAST-                            ACK 状态,等待客户端确认

    第四次挥手:客户端收到连接释放的报文后,发出确认报文(ACK=1,ack=w+1,seq=u+1),客户端进入TIME-WAIT状态,等待2分

                    钟后关闭连接,服务端收到确认报文后立即关闭连接

    2MSL:为了保证最后一个消息一定到达服务端,如果确认报文丢失,则服务端会重新发起关闭请求,客户端再次确认;如果客户端直接

                关闭的话,可能会导致消息无法到达服务端,连接无法关闭。而且可以保证在这段时间发送的消息不会滞留在网络中,让其消

                失,防止出现在下次连接中

    意义:TCP是全双工模式,可以在两个方向上同时传递,所以每次关闭都要进行单独关闭,并要另一方确认

 

 

OSI七层网络模型:


由下往上:

    物理层、数据链路层、网络层(IP)、传输层(TCP、UDP)、会话层(RPC)、表示层(加密解密)、应用层(HTTP、FTP)

 

TCP\IP四层模型:

    连接层(物理层、数据链路层):负责建立电路连接,是整个网络的物理基础,典型的协议有以太网、ADSL等

    网络层:负责分配地址和传送二进制数据,主要协议是IP协议,ARP协议等

    传输层:负责传送文本数据,主要协议是TCP协议等

    应用层(应用层、表示层、会话层):负责传送各种最终形态的数据,是直接与用户打交道的层,典型的协议有HTTP,FTP等

 

 

传输层协议:


tcp:

    传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通讯协议

    特点:

        通过三次握手建立连接

        所有的数据都会传输完成,不丢失数据

        不限制数据大小

        适用于保证数据的完整性场景,如QQ、DNS的数据传输等

    缺点:

        连接只能是一对一的

        传输速率较UDP慢

        首部开销较大,20字节

 

udp:

    用户数据报协议,是一种面向事务的,基于流、简单不可靠的信息传输协议

    特点:

        无需建立连接传输快

        可实现一对一、一对多、多对一、多对多交互通信

        没有阻塞控制,因此网络出现拥塞不会使源主机的发送速率降低

        首部开销小,只有8字节

        适用于传输速率要求较高但允许丢包场景,通常用于视频资源传输

    缺点:

        不保证可靠交付

        数据包大小不能超过64K

TCP重传机制:


滑动窗口

todo

 

 

http\https:


http:

    超文本传送协议,是建立在TCP协议之上的一种应用协议,默认端口号是80,由请求和响应构成

    请求报文Request:

        请求行:包含请求类型、要访问的资源、HTTP版本

        请求头:有KV组成

        空行:空行之前全都是请求头,结束请求头

        请求数据:存放body体数据

    

    响应报文Response:

        状态行:HTTP版本、状态码、状态码描述

        消息头:由KV组成

        空行:空空隔行之前全是消息头,结束消息头

        响应体:存放返回结果

    http1.0\http1.1:

        在http1.0中认为每台服务器绑定唯一的IP地址,因此请求消息中没有传递主机名,在HTTP1.1中请求消息和响应消息中都支持host头,且请求消息中如果没有host会报400错误

        在http1.0中每次请求使用一个TCP连接,在http1.1中支持了长连接,默认即keep-alive,即在一个TCP连接上可以有多个请求,减少建立关闭连接耗费的时间

    http1.1\http1.2:

        http1.1采用管道机制实现基于一个TCP连接发送多个请求,会造成对头阻塞

        http1.2中提供如下优化:

            header压缩、基于https加密协议传输(必须使用 https ,http1.2才会生效)、多路复用(避免了对头阻塞)、请求优先级(在多路复用的同时保证高优先级请求先发送)、服务端推送、二进制协议

https:

    默认端口443

    内容加密:中间者无法直接查看明文内容

    验证身份:通过证书认证客户端访问的是自己的服务器

    保护数据完整性:防止传输的内容被中间人冒充或串改

    是对客户端信任服务端的一种方式,可通过在黄色区域拦截进行伪造服务端

 

        

 

常用的HTTP方法:


    HTTP1.0只支持GET、POST、HEADE

    GET、POST、HEAD(响应体无内容)、PUT、DELETE、TRACE、OPIONS(查看资源支持的请求方法)、CONNECT

 

 

无状态协议:


无状态是指,每一次请求都不会有上下文,即在下一次连接不会记录这次连接的信息。

HTTP\UDP是无状态的, TCP\FTP是有状态的

HTTP协议是无状态无连接的,无连接是指一次请求一次连接,可以通过cookie来解决无状态的问题,

 

 

缓存:


cookie: 如果不设置过期时间,则保存在内存中,有效时间截止到会话结束;如果设置过期时间则保存在硬盘中,直到过期才消失。保存在

    客户端,包含path及domain,不允许跨域访问及设置(子域除外)。单个cookie保存的数据不超过4K,且只能保存字符串。向服务端发

    起请求会自动在请求头中携带上cookie,可以被用户禁用

session: 保存在服务端,默认有效期30分钟,每次访问会刷新有效期。通常通过cookie存储sessionId保存在浏览器,当禁用cookie时会重

    写URL拼接sessionId。可以保存对象且无长度限制

localStorage: 将数据保存在硬盘中,下次访问仍有效,只能通过清除才会失效,类似前端数据库,一般可以达到5M.

sessionStorage: 保存在内存中,数据有效时间为当前会话,会话失效即数据失效,一般可达到5M

 

 

抓包:


tcpdump -s0 -A

wireshark

 

网站文章

  • Nodejs中when库的实例介绍

    Nodejs中when库的实例介绍

    假设一个业务场景:通过rss地址,获取rss并保存于文件,rss地址保存于文件中。完成该场景的业务需要完成3个任务:1.从文件中读取rss地址。2.获取rss。3.保存于文件。最后将这三个任务进行整合。 准备:存放rss地址的文件,address.txt。http://programmer.csdn.net/rss_p

    2024-04-01 01:41:40
  • 做支付遇到的HttpClient大坑

    做支付遇到的HttpClient大坑

    前言 HTTPClient大家应该都很熟悉,一个很好的抓网页,刷投票或者刷浏览量的工具。但是还有一项非常重要的功能就是外部接口调用,比如说发起微信支付,支付宝退款接口调用等;最近我们在这个工具上栽了一个大跟头,不怕大家笑话,拿出来跟大家分享一下; 过程描述 项目代码比较复杂,我为了直达问题,单独写了程序来说明; 我这里先重复一下导致问题的过程:程序源自于从.NET到Java的重构,开发...

    2024-04-01 01:41:16
  • 1003 我要通过! (20 分)

    #include <cstdio>#include <cstring>int main() { int n; scanf("%d", &n); // 之前一直用c++过不了,因为会有空格的关系,所以改用了scanf; while (n--) { char s[110]; int np =...

    2024-04-01 01:41:09
  • NOI-1.5(09) 奇数求和

    NOI-1.5(09) 奇数求和

    2024-04-01 01:41:03
  • 建Stable-Diffusion-Webui的AI

    建Stable-Diffusion-Webui的AI

    人工智能,丹青圣手,全平台(原生/Docker)构建Stable-Diffusion-Webui的AI绘画库教程(Python3.10/Pytorch1.13.0) - 知乎

    2024-04-01 01:40:39
  • golang panic recover return defer的逻辑顺序问题

    package main import &quot;fmt&quot; //验证golang return defer recover 之间的顺序关系 func main() { defer func...

    2024-04-01 01:40:33
  • Unity Shader中的基础光照与标准光照模型(自发光、环境光、高光反射、漫反射)、BRDF光照模型

    Unity Shader中的基础光照与标准光照模型(自发光、环境光、高光反射、漫反射)、BRDF光照模型

    我们是如何看到这个世界的 从宏观上来说,渲染包含了两大部分 决定一个像素的可见性 决定这个像素上的关照计算 而光照模型就是用于决定一个像素上进行怎样的光照计算 通常来讲,我们要模拟真实的光照环境来生成...

    2024-04-01 01:40:27
  • Eclipse的使用(二)Eclipse插件的安装、升级和卸载

    Eclipse的使用(二)Eclipse插件的安装、升级和卸载

    Eclipse作为一个集成的IDE开发工具,为我们的软件开发提供了便利,eclipse除了自带的强大功能外,还支持功能丰富的插件。我们可以通过Eclipse官方市场 (http://marketplace.eclipse.org/)找到并下载我们需要的插件。  可以说Eclipse一切都是基于插件的,所以每使用一个功能就要装一次插件,所以掌握插件的安装、升级卸载是十分有必要的。  由于新版

    2024-04-01 01:40:20
  • 过滤html标记的函数

    过滤html标记的函数

     /**////   /// 过滤html  ///   ///   ///   public static string FilterSQL(string text)  ...{   string validSql = "";   if (text != null)   ...{    text = text.Replace(""", """);    text = text.

    2024-04-01 01:39:54
  • 分治算法

    分治算法

    一.分治算法的基本思想分治算法的基本思想是将一个计算复杂的问题分为规模较小、计算简单的小问题求解,然后综合各个小问题,得到最终的答案。大致执行的流程如下:1.对于一个规模为N的问题,若该问题比较容易解...

    2024-04-01 01:39:46