一、IOS/OSI七层模型和TCP/IP五层模型简述

OSI七层模型包括:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
图片说明
TCP/IP五层模型包括:物理层、数据链路层、网络层、传输层、应用层。
图片说明

二、http和https区别

Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。主要是:

  1. 端口不同:http:80;https:443;
  2. 资源消耗:https由于加减密处理消耗更多的CPU和内存资源
  3. 开销:https通信需要证书,一般要购买的

https加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。

三、HTTP 协议包括的请求及区别

1.GET:请求读取由URL所标志的信息。
2.POST:给服务器添加信息(如注释)。
3.PUT:在给定的URL下存储一个文档。
4.DELETE:删除给定的URL所标志的资源。
HTTP 中,POST 与 GET 的区别?(可看Tiny Http开源项目)
1.Get是从服务器上获取数据,Post是向服务器传送数据。
2.Get是把参数数据队列加到提交表单的Action属性所指向的URL中,值和表单内各个字段一一对应,在URL中可以看到。
3.Get传送的数据量小,不能大于2KB;Post传送的数据量较大,一般被默认为不受限制。
4.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。

http常见状态码
200:服务器成功处理请求
304:上次请求后,请求网页未修改过
403:服务器拒绝请求
404:服务器找不到要请求的网页
500:服务器遇到错误,无法完成请求

四、TCP和UDP(TCP如何保证可靠)

  • TCP:面向连接、可靠的、只支持点对点通信、具有拥塞机制、首部开销20字节、面向字节流,分段传输、慢
  • UDP:一个数据报就完成数据通信;无连接、不可靠、无拥塞、首部8字节、支持一对一、一对多、多对一、多对多通信、快

TCP可靠传输实现方式:以字节位单位的滑动窗口技术、超时重传三次机制、确认ack机制

避免网络拥塞方式: 动态改变窗口
慢开始:从1开始以2倍增长,到达慢门限以+1增长,出现拥塞,开始丢包至0,重设慢开始门限为0.5倍上限值。
快恢复:大致与慢开始相似,但丢包只丢至新的门限值再执行拥塞避免算法+1法;

五、cookie和session

  1. 实现机制:Session的实现常常依赖于Cookie机制,通过Cookie机制回传SessionID;
  2. 大小限制:Cookie有大小限制并且浏览器对每个站点也有cookie的个数限制,Session没有大小限制,理论上只与服务器的内存大小有关;
  3. 安全性:Cookie存在安全隐患,通过拦截或本地文件找得到cookie后可以进行攻击,而Session由于保存在服务器端,相对更加安全;
  4. 服务器资源消耗:Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。

六、三次握手和四次挥手(建议直接看博客中图解)

三次握手
第一次A—>B:客户A主动发送 连接请求的报文段 至服务器B。SYN=1,代表请求建立会话;seq=x,同时序号=x代表数据段的第一个字节是整个文件的第x个字节。A进入SYN_SENT状态。
第二次B—>A:服务器B接收到 连接请求 后发出回应。同意则发送 同意连接请求 至A。同步位SYN=1,代表同意建立会话;ACK=1,表明确认字节段生效;seq=y,同时序号=y代表发送的数据段的第一个字节是整个文件的第y个字节;ack=x+1,代表确认收到上一数据段。A的TCP通知上层应用进程,连接已建立。B进入SYN_RECV状态。
第一次A—>B:客户A收到B回复后。发送 回复报文段 至服务器B。SYN=0,会话已建立,归0;ACK=1,表明确认字节段生效;seq=x+1,代表发出 的数据段的第一个字节是x+1,即B发送的确认号。ack=y+1,代表确认收到B数据段。B的TCP通知上层应用进程,连接已建立。
A发送后进入ESTAB-LISHED状态。B接收后进入ESTAB-LISHED状态。

四次挥手
第一次A—>B:传输结束后,客户机A的应用进程表示要释放连接,TCP发出 释放连接报文段 至服务器B,并主动关闭TCP连接。FIN=1,代表释放连接;序号seq=u,发送一个数据等待B的确认。A处于 等待释放1——FIN-WAIT1状态。
第二次B—>A: 服务器B收到 释放连接报文段后,向A发送 确认收到 报文段。ACK=1,代表确认号生效;seq=v,代表发送数据的序号;ack=u+1,代表确认已收到释放连接的报文段。服务器B的TCP通知上层应用进程即将关闭连接。A到B连接释放。但B依然可连接A;若B还有数据发送,A仍要接收。B处于等待关闭——CLOSE-WAIT状态,A接收到此报文段后处于 等待释放2——FIN-WAIT2状态.
第三次B—>A: 服务器B向A的数据传送完成,B则向A发送 释放连接 报文段。FIN=1,代表释放连接;ACK=1,代表确认号生效;seq=w,发送一个数据等待A的确认;ack=u+1,表明确认已收到A释放连接的报文段。B处于最后确认——LAST-ACK状态;
第四次A—>B:客户端A收到B的报文段,发送确认报文段 至B;ACK=1,代表确认号生效;seq=u+1,代表发送数据序号;ack=w+1,代表确认收到了B的释放连接报文段。TCP 连接必须经过时间2MSL 后才真正释放掉,此时A处于计时等待——TIME-WAIT状态;当B收到时,关闭连接。计时结束后A关闭连接。