OSI的七层模型分别是什么?各自的功能是什么?
应用层:各种软件应用,包括Web应用表示层:数据格式标识,基本压缩加密功能会话层:控制应用程序之间的会话能力传输层:端到端传输数据的基本功能,如TCP UDP网络层:定义ip编址,定义路由功能,如不同设备的数据转发数据链路层:定义数据的基本格式,如何传输,如何标识,如网卡MAC地址物理层:底层数据传输,如网线,网卡标准传输层数据被称为段 segment网络层数据被称为包 Package数据链路层数据被称为帧 Frames物理层数据被称为 比特流 Bits总结:网络七层模型是一个标准,而非实现网络四层模型是一个实现的应用模型网络四层模型是由七层模型简化而来(网络四层模型分别是 数据链路层 网络层 传输层 应用层)
为什么需要三次握手?两次不行?
三次握手的目的就是为了确定客户端和服务端的接受与发送能力是否正常。最开始客户端除了closed状态,服务端处于listen状态然后第一次握手:客户端给服务端发送一个SYN报文,并指明客户端的初始化序列号(ISN),此时客户端处于SYN_Send状态第二次握手:服务端收到客户端的SYN报文后,会以自己的SYN报文作为应答,并且指定了自己的初始化序列号ISN,同时把客户端的ISN+1最为ACK的值,表示自己已经收到了客户端的SYN,此时服务其处于SYN_RCVD的 状态第三次握手:客户端收到SYN报文后,会发送一个ACK报文,当然,也是一样把服务器的ISN+1最为ACK的值表示已经收到了服务端的SYN报文,此时客户端处于established状态服务器收到ACK报文后,也处于established状态,此时双方建立起了连接两次握手为啥不行?两次握手服务端无法确定自己的发信能力三次握手的作用:确定双方的接受能力,送能力是否正常指定自己的初始化序列号,为后面的可靠传送做准备
为啥需要四次挥手?三次不行?
刚开始客户端和服务端处于established状态第一次挥手:客户端发送一个FIN报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态第二次挥手:服务端收到FIN之后,会发送ACK报文。且把客户端的序列号值+1作为ACK报文的序列号值表明已经收到客户端的报文,此时服务端处于CLOOSE_WAIT状态第三次挥手:如果服务端也想断开连接,和客户端的第一次挥手,发给FIN报文,且指定一个序列号。此时服务端处于LAST_ACK状态第四次挥手:客户端收到FIN后,一样发送一个ACK报文作为应答,且把服务段的序列号值+1作为自己ACK的序列号值,次数客户端处于TIMW_WAIT状态。需要过一阵子以确保服务端收到自己的ACK报文之后,就处于关闭连接,处于CLOSED服务端收到ACK报文之后,就处于关闭连接了,处于CLOSED状态为什么客户端发送ACK后不直接关闭,而是要等一阵子关闭。为了确保服务端是否收到我们的ACK报文,如果没有收到服务端会重发FIN报文给客户端,客户端再次收到FIN报文之后,就知道之前的ACK报文丢失了,然后再次发送ACK报文。至于TIME_WAIT持续时间至少是一个报文的来回时间,一般会设置一个计时,如果过了这个计时没有再次收到FIN报文,则代表对方成功就是ACK报文,此时处于CLOSED状态。
TCP和UDP的区别?各自的应用场景
TCP协议的主要特点:1.TCP是面向连接的运输层协议;所谓面向连接就是双方传输数据之前,必须先简历一条通道,例如三次握手就是简历通道的一个过程,而四次挥手则是结束销毁通道的一个其中过程。2.每一条TCP连接只能有两个端点(即两个套接字),只能是点对点3。TCP提供可靠的传输服务,传送数据无差错,不丢失,无重复,按序达到4.TCP提供全双工通信,允许通信双方的应用进程再热河时候都可以发送数据,因为两端都设有发送缓存和接收缓存5.面向字节流TCP的可靠性原理:可靠性传输有两个特点:a.传输信道无差错,保证传输数据正确b.不管发送方以多快的速度发送数据,接收方总是来得及处理收到的数据UDP协议特点:UDP是无连接的传输层协议,UDP使用尽最大努力交付,不保证可靠交付UDP是面向报文的,对应用层交下来的报文,不合并不拆分,保留元报文的边界。UDP没有拥塞控制,因此即使网络出现拥塞也不会降低发送速率并且UDP支持一对一,一对多 多对多UDP的首部开销较小,只有8字节TCP和UDP得区别:TCP是可靠传输,UDP是不可靠传输TCP是面向连接的,而UDP无连接TCP传输数据有序,UDP不保证数据的有序性TCP不保存数据边界,而UDP保留数据的边界、Tcp传输速度相对udp较慢TCP有拥塞控制和流量控制,而udp没有TCp是重量级协议,而Udp是轻量级协议Tcp首部较长20字节,UDP首部较短8个字节基于tcp和udp的常用协议HTTP HTTPS FTP TELNET SMTP(简单邮件传输协议)协议基于可靠的TCP协议DNS DHCP TFTP SNMP(简单网络管理i协议) RIP 基于不可靠的UDP协议
HTTP1.0 1.1 2.0得区别
HTTP/1.0
POST和GET有哪些区别
使用场景不同GET用于获取资源,而POST用于传输实体主体参数GET和POST得请求都可以使用额外得参数,但是GET得参数是以查询字符串出现在URL中,而POST得参数存储再实体主体中。并且GET得参数中存在中文等字符需要先进行编码URL只支持ANSCII编码,而POST参数支持标准字符集安全性:安全的HTTP方法不会改变服务器得状态,也就是说他是可读的GET方法是安全的,而POST方法却不是,因为POST得目的就是传送主体内容,这个内容可能是用户上传得表单数据,上传成功后,服务器可能吧这个数据存储到数据库中,因此状态发生了改变。安全得方法除了GET还有:HEAD,OPTIONS不安全的方法除了POST之外还有:PUT,DELETE幂等性:幂等得HTTP方法,同样的请求被执行一次与连续多次的效果是一样的,服务器的状态也是一样的。换句话说,幂等方法不应该具有副作用(统计用途除外)所有安全的方法也都是幂等的在正确实现的条件下,GET HEADPUT DELETE等方法都是幂等的,而POST不是可缓存:请求报文的HTTP方法本身是可缓存的,包括GET和HEAD ,但是PUT和DELETE不可缓存,POST在多数情况下不可缓存。
HTTP哪些常用的状态码以及使用场景
状态码分类:1XX:表示当前是协议的中间状态,还需要后续请求2XX:表示请求成功3XX:表示重定向状态,需要重新请求4XX:表示请求报文错误5XX:服务端错误常用状态码:101 切换请求协议 从HTTP切换到WebSocket200 请求成功,有响应体301 永久重定向,会缓存302 临时重定向 不会缓存304 协商缓命中403 服务器禁止访问404 资源未找到400 请求错误500 服务器错误503 服务器繁忙
301和302的区别
301是重定向,值页面永久转移,百事为资源或页面永久性的转移到另一个位置。301是HTTP协议中的一种状态码。当用户或搜索引擎向服务器发出浏览请求时,服务器返回HTTP数据流头信息中包含301,表示资源已经永久性的改变了位置。
在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维护?
再HTTP响应体的Connection字段设置为keep-alive
TCP如何保证有效传输以及拥塞控制原理
tcp时面向连接的,可靠的,传输层协议可靠体现在:有状态 可控制有状态时只TCP会确定发送了哪些报文,接收方收到了哪些报文,哪些没有收到,保证数据包按需到达,不允许有差错可控制是指,如果出现豆包或者网络状况不佳,则会跳转自己的行为,减少发送的速度或者重发拥塞控制原理愿意是有可能整个网络环境特点差,容易丢包,那么发送端就应该注意了主要有三种方法:慢转动阈值+拥塞避免快速重传快速恢复慢启动阈值+拥塞避免对于拥塞控制来说,TCP主要维护两个核心状态拥塞窗口慢启动阈值
IP地址与分类
A类地址 1-126 :网络号占前八位,以0开头,主机号占后24位
B类地址 128-0191 网络号占前16位,以10开头,主机号占16位
C类地址 192-223 网络号占24位,以110开头 主机号占8位
D类地址 224-239 以1110开头 保留位多地址
E类地址 240-255 以1111开头 保留位今后使用
什么SQL注入
