请滑走,自用,无营养警告⚠
目录
一、 三次握手四次挥手
2、2MSL(最大报文段生存时间)才能CLOSE?
3、已建立了连接,客户端突然出现故障?
4、三次握手过程中可以携带数据吗?
5、SYN洪泛攻击?
二、tcp可靠传输
四、UDP优势?
五、HTTPS和HTTP的区别
【SSL握手】
六、状态码 请求报文 响应报文格式
九、输入一个url,发生什么?
十、http1.0、1.1和2.0区别
十一、 GET和POST
十三、Cookie和Session
Socket IP地址+协议+端口号 唯一标识网络中的一个进程
物理层:定义物理设备标准,传输比特流,数模转换。 网卡。会产生错传,数据不完整的可能
数据链路层:如何格式化数据,错误检测和纠正数据传输可靠性,封装成帧,差错检测,透明传输。
网络层:网络地址-->物理地址 ,怎样将数据从发送方传到接受方,节点最佳路径。 IP 路由器。
通信中要发送海量的数据,可能要好长时间,会发生网络中断,为了准确性,要将数据切分-->传输层
传输层:主机间的数据传输 ,流量控制,分割数据包. TCP/UDP
难道每次要自己用TCP打包,用IP去找路由?-->应用层
会话层:建立和管理程序之间通信,应用程序自动收发包和寻址。 系统不一样?-->表示层
表示层:按照网络能够理解的方式进行格式化,不同系统间的通信。
虽然发送方知道自己发的是什么东西,转换成字节多长?-->应用层
应用层:发送方接受方使用固定长度固定组成的消息头记录消息体的长度等信息,保证接受方正确解析数据
【三次握手】
指建立一个TCP连接时,需要客户端和服务器总共发送3个包。全双工通信,占用两个通信线路。
作用:确认双方的接收能力和发送能力、指定自己的初始化序列号为后面的可靠性传送做准备。
【not 2】重复连接 死锁
首次握手的隐患:SYN超时
【四次挥手】
客户端收到服务器的确认后,客户端就进入(终止等待2)状态,等待服务器发送连接释放报文
4)发送ACK。TIME-WAIT(时间等待)状态。注意此时TCP连接还没有释放,必须经过2∗MSL(最长报文段寿命)的时间后,当客户端撤销相应的TCB后,才进入CLOSED状态。服务器收到了客户端发出的确认,立即进入CLOSED状态
TIME-WAIT:确保服有足够时间让对方收到ACK包
服务器出现大量CLOSE_WAIT原因:对方关闭SOCKET之后,我方忙于读写,没有及时关闭连接
全双工,发送和接受方都需要FIN报文和ACK报文。为当Server端收到Client端的SYN连接请求报文后,可以直接发送SYN+ACK报文。ACK用来应答,SYN报文用来同步。但是关闭连接时,当Server端收到FIN报文时,可能不会立即关闭SOCKET,所以只能先回复一个ACK报文,告诉Client端,"你发的FIN报文我收到了"。只有等到我Server端所有的报文都发送完了,我才能发送FIN报文
有可能最后一个ACK丢失。TIME_WAIT状态就是用来重发可能丢失的ACK报文。Server如果没有收到ACK,将不断重复发送FIN片段。如果在这段时间内再次收到FIN,会重发ACK并等待2MSL。如果直到2MSL,Client都没有再次收到FIN,那么Client推断ACK已经被成功接收,则结束TCP连接。
TCP设有一个保活计时器。服务器每收到一次客请求后都会复位计时器,通常为2小时,若2h没有收到客户端的任何数据,服务器每隔75秒钟发送一个探测报文,10个仍然没反应认为客户端出了故障,关闭连接。
第一次握手带:攻击者不管服务器接收、发送能力是否正常,恶意攻击服务器, SYN 报文中放入大量的数据。疯狂发 SYN 报文让服务器消耗时间和内存。第三次,客户端已在建立状态,知服务器接、发能力正常,能带。
A向服务器发数据,在服务器发出ACK之后不进行确认,连接挂起,服务器不停重发,浪费服务器资源
(1):SYN Cache 在收到SYN数据报文时不急于去分配TCB,而是先回应SYN+ACK报文,并在一个专用区域中保存这种半连接信息,直到收到正确的回应ACK报文再分配TCB。
(2)SYN Cookie 不使用任何存储资源。在服务器收到客户端 syn包,根据这个SYN包(根据ip,时间等)计算出一个cookie值,这个cookie作为将要返回的SYN+ACK包的初始序列号,收到对方ACK包时,服务器再根据cookie值检查 ACK包的合法性。如果合法,再分配TCP连接。
校验和:进行数据校验。数据段都当做一个16位的整数。加起来。进位不丢弃补在后面,最后取反,得到校验和。
序列号:不仅是应答作用,还能够排序,去掉重复序列号的数据。
确认应答:接收方收到数据后,发送ACK报文告诉发送方,收到了哪些数据,下一次从哪发。
超时重传:a 数据传输时直接全体丢包,对方没收到。b.ACK报文丢。发方发数据一定时间,没收到ACK,重发。
连接管理:三次握手与四次挥手的过程
流量控制:TCP根据接收端对数据的处理能力,决定发送速度拥塞控制:
UDP简单、传输快,直播、实时游戏。(1)网速的提升令UDP丢包率很低,如果使用应用层重传,能够确保传输的可靠性。(2)TCP为实现可靠性,使用了复杂的拥塞控制算法,握手过程,很难改进。(3)一旦发生丢包,TCP会将后续的包缓存,等前面的包重传并接收到后再继续发送,延时会越来越大,
HTTP:超文本传输协议,基于请求与响应,无状态,无链接。应用层的协议,常基于TCP/IP协议传输数据,所有的WWW文件都必须遵守这个标准。Http明文传输,易窃听篡改冒充
无状态:协议对客户端没有状态存储,访问一个网站需要反复进行登录操作
无连接:HTTP/1.1之前,由于无状态特点,每次请求需要通过TCP三次握手四次挥手,和服务器重新建立连接。短时间多次请求同一个资源每次重新响应,耗费时间和流量。
HTTPS:是通过网络进行安全通信的传输协议,身披SSL外壳的HTTP,进行加密数据,验证对方身份。结合Hash加密/数据证书/对称加密等一系列的操作,保护隐私与完整性。
【区别】1.https协议需要申请证书,免费证书很少。2.http是明文传输;https 加密。3.连接方式不同,默认端口也不一样,80,443。
【解决无状态】
场景:购物时间较长,需对用户一段时间的HTTP通信状态进行保存
1.通过Cookie/Session技术
2.HTTP/1.1持久连接(请求首部Connection: keep-alive),任意一端没有明确提出断开连接,保持连接状态,
【Hash】加密:任意长度的字符串加密成固定长度的字符串,任何人无法破解,用来验证数据的完整性,如md5 数字证书:在信息后面加上一段内容(hash之后的值)再和信息一起传送,保证信息不被修改,公钥是真的公钥
100continue/200ok/重定向4:客户端错误5.服务器端错误
HTTP方法GET/POST/PUT/HEAD/DELETE/OPTION(用于获取当前URL所支持的方法)
请求报文:a、请求行:请求方法、URI、版本信息b、请求头部(浏览器、主机名等):c、空行d、请求体
响应报文:a、状态行:HTTP版本、状态码、状态描述b、响应头部字段c、空行d、响应内容实体
利用TCP/IP协议族进行网络通信时,会通过分层顺序与对方进行通信。分层由高到低分别为:应用层、传输层、网络层、数据链路层。发送端从应用层往下走,接收端从数据链路层网上走。
1、根据URL逐层访问DNS服务器缓存,解析IP地址
2、浏览器与目标服务器建立TCP连接
3、客户端应用层根据解析得到的IP地址,向服务器发送HTTP请求
HTTP请求:请求报头和请求主体两个部分,其中请求报头,包括请求的方法、目标url、遵循的协议等信息
启动一个新的子进程去处理这个请求,解析请求,定位资源等,将资源副本写入socket。同时父进程继续监听。
浏览器根据返回的响应报文里的状态码,来做出判断。
浏览器没有完整接受全部HTML文档时,它就已经开始显示页面了,如果是个静态的页面,到此就基本结束了
如果是是动态的,那么在浏览器显示HTML时,会获取嵌入在HTML中的对象,浏览器会发送获取请求来重新获得这些文件静态的页面内容,浏览器通常会进行缓存,动态不会
1长连接:1.0连接无法复用 1.1长连接keep-live 减少握手次数,减少慢启动影响
2支持请求的流水线处理:在一个TCP连接上可以传送多个HTTP请求和响应
例如:一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输,但每个单独的网页文件的请求和应答仍然需要使用各自的连接。
客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收请求的顺序回送响应.
3节约带宽:支持先发送报头,服务端认为它有权限处理返回100再发body。否则401,就不发了
http1.1和http2.0的主要区别:
2、多路复用:连接共享,不同的request可以使用同一个连接传输(每个request有自己的id号组)
3、header压缩:1.X中header带有大量的信息,并且得重复传输,2.0使用encoder来减少需要传输的hearder大小。C和S可以各自缓存一份header,避免重复传输。
4、服务端推送:可以通过解析html中的依赖,只能的返回所需的其他文件(css或者js等),而不用再发起一次请求.
HTTP报文层面:Get将请求信息放在url,post放在报文体。Get参数长度有限制,post没有
Get参数只能是ascii字符,post没有要求。get只支持url编码,post支持多种(如标准字符集可以传中文)
数据库层面:Get符合幂等性和安全性,POST不符合
其他层面:get请求可以被缓存、被存储,post不可。GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生一个TCP数据包;POST产生两个TCP数据包。:GET:把 header和data一并发送出去,。POST:先发header,服务器响应100 continue,再发送data,服务器响应200 ok。Post产生两个数据包,耗时长。
【Cookie】服务端发给客户端的特殊信息,以文本的形式存在客户端。
客户端发送请求2.服务端进行响应应并且传了cookie(存在http响应头)3.每次客户端发送请求时都会带上cookie(在请求头),服务器发送行响应到客户端。
【Session】在服务器上保存信息。Session 代表着服务器和客户端一次会话的过程
实现方式1:浏览器第一次发送request,服务器创建Session,生成一个Session id(要求不重复不易找规律),并将其返回到浏览器,浏览器将id存到cooike。当浏览器第二次发送请求,从cooike获取 ID放在请求中一并发给服务器,服务器按照查找用户信息,找到证明已登录,进行后续操作。
实现方式2:使用URL回写实现:服务器发给浏览器的所有页面中都携带session id,客户端任一个请求都会将参数带回服务器。
【区别】:cookie数据保存在客户端,session服务器端,若考虑减轻服务器负担应用cookie。默认关闭浏览器之后cookie销毁,session不销毁。cookie不可靠,session可靠。
【生命周期】
Cookie:创建:在服务器端创建,保存在客户端 销毁:默认浏览器关闭就销毁,(可setMaxAge设置到期时间)。
默认存在浏览器进程中(内存里),设置后存在硬盘上
Session:创建:用户访问第一次访问服务器时创建,销毁:服务器一定时间没有活动后销s毁