一.http与https的区别
1.http是无状态的超文本传输协议,http是安全的(SSL+http)超文本传输协议
2.使用http不需要证书,使用https需要SSL证书
3.http默认使用80端口,https默认使用443端口
http请求方式:
- get:请求目标信息,返回响应体
- post:向指定资源提交数据进行处理请求,提交的数据包含在请求体中。
- head:与get相似,但是无响应体,用于获取报头
- put:从客服端到服务器传送的数据取代指定的文档内容
- delete:请求服务器删除指定页面
- connect:HTTP/1.1协议中能够将连接改为管道方式的代理服务器
- trace:回显服务器收到的请求,主要用于测试或诊断
- options:允许客服端查看副武器的性能
二.网络模型
OSI中的层 | 功能 | TCP/IP协议族 |
---|---|---|
应用层 | 文件传输,电子邮件,文件服务,虚拟终端 | TFTP,HTTP,SNMP,FTP,SMTP,DNS,RIP,Telnet |
表示层 | 数据格式化,代码转换,数据加密 | 无 |
会话层 | 控制应用程序之间会话能力;如不同软件数据分发给不同软件 | ASAP、TLS、SSH、ISO 8327 / CCITT X.225、RPC、NetBIOS、ASP、Winsock、BSD sockets |
传输层 | 端到端传输数据的基本功能 | TCP、UDP |
网络层 | 定义IP编址,定义路由功能;如不同设备的数据转发 | IP,ICMP,RIP,OSPF,BGP,IGMP |
数据链路层 | 定义数据的基本格式,如何传输,如何标识 | SLIP,CSLIP,PPP,ARP,RARP,MTU |
物理层 | 以二进制数据形式在物理媒体上传输数据 | ISO2110,IEEE802 |
三.TCP/IP的区别与应用
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP建立连接必须有三次握手、断开连接必须有四次挥手。
UDP(User Data Protocol,用户数据报协议)是一个非连接的协议,传输数据之前源端和终端不建立连接, 当它想传送时就简单地去抓取来自应用程序的数据,并尽可能快地把它扔到网络上
TCP | UDP | |
---|---|---|
连接性 | 面向连接 | 面向非连接 |
传输可靠性 | 可靠 | 不可靠 |
报文 | 面向字节流 | 面向报文 |
效率 | 传输效率低 | 传输效率高 |
流量控制 | 滑动窗口 | 无 |
拥塞控制 | 慢开始、拥塞避免、快重传、快恢复 | 无 |
传输速度 | 慢 | 快 |
应用场合 | 对效率要求低,对准确性要求高或要求有连接的场景 | 对效率要求高,对准确性要求低 |
四.客户端与服务端建立TCP连接时所需的“三次握手”具体流程
三次握手:服务端与客服端建立连接的过程中需要发送三次数据包。
具体流程:
第一次握手:客户端请求建立连接,向服务端发送syn包(SYN=1,seq=j(随机值)),客户端进入SYN_SENT阶段,等待服务端响应;
第二次握手:服务端收到客户端发来的syn包,检查syn=1知道客户端请求连接,如果同意连接,则发送(syn+ack)包(SYN=1,ACK=1,ack=j(客户端seq值)+1,seq=k(随机值))给客户端以确认连接请求;客户端进入SYN_RCVD状态,等待客户端响应;
第三次握手:客户端收到服务端发来的syn包,检查ACK=1和ack=j+1知道服务端同意连接;那么发送ack包(ACK=1,ack=k(服务端seq值)+1)给服务端;服务端接收到ack包后检查ACK=1和ack=k+1后则连接建立成功,客户端与服务端进入ESTABLISHED状态。
三次握手完成后,客户端和服务端可进行数据传输了。
SYN(Synchronize Sequence Numbers):同步序列编号
seq:序列号
SYN_SENT:同步序列编号已发出
SYN_RCVD(SYN_Received):同步序列编号已收到
ACK (Acknowledge character):确认收到字符
ESTABLISHED:已建立的
五.客户端与服务端断开TCP连接时所需的“四次握手”具体流程
四次挥手:服务端与客服端断开连接的过程中需要发送四次数据包。因为TCP连接是全双工的,所以两个方向的连接关闭“请求关闭-确认”需要做两次,总共四次挥手。
第一次挥手:服务端请求关闭连接,发送fin数据包(FIN=1,seq=u(随机值))到服务端,进入FIN-WAIT-1状态(白话:客户端告诉服务端,我已经没有数据再传输给你啦,想请求关闭连接了,但如果你还有未传输完则不必着急关闭连接);
第二次挥手:服务端接收到FIN数据包,检查FIN=1知道客户端已无数据传输而请求关闭了,于是发送ack数据包(ACK=1,ack=u(客户端seq)+1,seq=v(随机值))给客户端,进入CLOSE-WAIT状态,这个状态对于客户端来说是半关闭状态,即 "客户端-->服务端" 传输通道已关闭,但服务端仍可发消息到客户端,而且客户端必须接收(白话:服务端告诉客户端,你的关闭请求我已经收到了,但是我还有数据要发送,请继续等我消息);客户端收到ack数据包后,进入FIN-WAIT-2状态;
第三次挥手:服务端数据传输完后,向客户端发送(fin+ack)数据包(FIN=1,ACK=1,ack=u(客户端seq)+1,seq=w),进入LAST_ACK状态(白话:服务端告诉客户端,我已经完事了,可以关闭了);
第四次挥手: 客户端收到(fin+ack)数据包,检查FIN=1知道服务端已经准备好了,于是发送ack数据包(ACK=1,ack=w(服务端seq值)+1,seq=u+1)给服务端后客户端进入TIME_WAIT状态,服务端收到客户端的ack数据包后,检查ACK=1和ack=w+1知道一切OK了,于是立即关闭了服务端-->客户端的连接,而客户端再等待2MSL时间后也关闭了连接。(白话:客户端告诉服务端,我已经知道你已经准备好关闭了,我给你说一声,那你就关闭吧,(服务端收到信息于是就关闭了)。。。。一段时间后,我已经半天没收到你的回复了,肯定正常关闭了,那我也关闭了)
FIN:finish