TCP如何保证传输过程的可靠性?
校验和:发送方在发送数据之前计算校验和,接收方收到数据之后同样需要计算,如果不一致,那么代表传输有问题。
确认应答序,序列号:TCP进行传输时数据都进行了编号,每次接收方都通过首部ACK字段进行确认字段号。
超时重传:如果发送房发送一段数据后,长时间没有收到ACK的确认后,会重新发送该数据。
连接管理:三次握手和四次挥手。
流量控制:TCP协议报头包含16位的窗口大小,接收方会在返回ACK时,同时把窗口值传递回发送方,发送方根据报文中窗口的大小控制发送速率。
拥塞控制:通过慢开始、拥塞避免、快重传、快恢复等四个算法来进行拥塞控制,降低整个网络的拥塞程度,避免网络中发送的数据包数量过多,造成数据包阻塞延迟丢失。
Session和Cookie有什么区别?
保存位置:Cookie通过客户端浏览器,以文件形式保存在本地机器,数据容量受浏览器限制,一般不超过3kb;Session以对象形式保存在服务器端内存。
数据内容:Cookie中不允许出现特殊内容(中文、特殊符号);Session中允许保存任意内容;
存储周期:Cookie的存储周期由Max Age属性设置,可以长期保存;Session的实现依靠一个名叫JSESSIONID的Cookie,Max Age过期时间默认为-1,关闭浏览器窗口,该Cookie则失效,对应的Session从而也失效
浏览器请求一个网址的过程
1.首先通过DNS服务器把域名解析成IP地址,通过IP和子网掩码判断是否属于同一个子网;
2应用层构造用于请求http报文,传输层添加TCP头部,网络层添加IP头部,数据链路层添加以太网协议头部
3数据经过路由器、交换机转发,最终达到目标服务器,目标服务器同样解析数据,最终拿到http报文,按照对应的程序的逻辑响应回去。
谈谈http协议get和Post的区别
GET和P6OST是HTTP请求的两种请求方法,本质上都是通过TCP连接进行通信;
GET用于获取数据,POST用于提交数据;
GET使用URL传递请求参数,POST使用Request Boby提交数据;
GET和POST的请求报文格式不同
POST方法请求报文第一行是这样的 POST /uri HTTP/1.1 \r\n
GET方法请求报文第一行是这样的 GET /uri HTTP/1.1 \r\n
GET是幂等且可缓存,POST非幂等且不可缓存;
谈谈http有哪些请求方式,各有什么特点?
GET 获取资源:GET方法用于使用给定的URI从给定服务器中查询获取信息或数据。
HEAD 获取响应消息报头:HEAD 和 GET方法类似,但是不返回响应报文内容主体部分,仅传输响应报头部分。
POST 提交数据增加资源:POST方法用于将数据发送到服务器以创建或更新资源。使用post方法,如果两个请求相同,后一个请求不会会把第一个请求覆盖掉,所以post用于增加资源。
PUT 修改资源:PUT方法用来修改资源。使用put方法,如果两个请求相同,后一个请求会把第一个请求覆盖掉,所以put用于修改资源。
DELETE 删除资源:DELETE方法用来删除指定的资源,它会删除URI给出的目标资源的所有当前内容。
●OPTIONS 查询支持的方法:查询指定的 URL 能够支持的方法。会返回 Allow: GET, POST, HEAD, OPTIONS 这样的内容。
谈谈BIO和NIO的区别?
BIO:同步阻塞IO,每一个客户端连接,服务端都会对应一个处理线程,对于没有分配到处理线程的连接就会被阻塞或者拒绝。相当于是一个连接一个线程。
NIO:同步非阻塞IO,基于Reactor模型,客户端和channel进行通信,channel可以进行读写操作,通过多路复用器selector来轮询注册在其上的channel,而后再进行IO操作。这样的话,在进行IO操作的时候再用一个线程去处理就可以了,也就是一个请求一个线程。