1. OSI 7层协议,会画出来,知道主要几层的各自作用
- 应用层(数据):确定进程之间通信的性质以满足用户需要以及提供网络与用户应用
- 表示层(数据):主要解决拥护信息的语法表示问题,如加密解密
- 会话层(数据):提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制,如服务器验证用户登录便是由会话层完成的
- 传输层(段):实现网络不同主机上用户进程之间的数据通信,可靠
与不可靠的传输,传输层的错误检测,流量控制等 - 网络层(包):提供逻辑地址(IP)、选路,数据从源端到目的端的
传输 - 数据链路层(帧):将上层数据封装成帧,用MAC地址访问媒介,错误检测与修正
- 物理层(比特流):设备之间比特流的传输,物理接口,电气特性等
2. TCP/IP 4层协议
- 应用层:TCP/IP模型将OSI参考模型中的会话层和表示层的功能合并到应用层实现。应用层面向不同的网络应用引入了不同的应用层协议。其中,有基于TCP协议的,如文件传输协议(File Transfer Protocol,FTP)、虚拟终端协议(TELNET)、超文本链接协议(Hyper Text Transfer Protocol,HTTP),也有基于UDP协议的。
- 传输层:在TCP/IP模型中,传输层的功能是使源端主机和目标端主机上的对等实体可以进行会话。在传输层定义了两种服务质量不同的协议。即:传输控制协议TCP(transmission control protocol)和用户数据报协议UDP(user datagram protocol)
- 网络互连层:网络互连层是整个TCP/IP协议栈的核心。它的功能是把分组发往目标网络或主机。同时,为了尽快地发送分组,可能需要沿不同的路径同时进行分组传递。因此,分组到达的顺序和发送的顺序可能不同,这就需要上层必须对分组进行排序。
网络互连层定义了分组格式和协议,即IP协议(Internet Protocol)。
网络互连层除了需要完成路由的功能外,也可以完成将不同类型的网络(异构网)互连的任务。除此之外,网络互连层还需要完成拥塞控制的功能 - 主机到网络层:实际上TCP/IP参考模型没有真正描述这一层的实现,只是要求能够提供给其上层-网络互连层一个访问接口,以便在其上传递IP分组。由于这一层次未被定义,所以其具体的实现方法将随着网络类型的不同而不同
3 TCP/UDP
TCP协议是一个面向连接的、可靠的协议。它将一台主机发出的字节流无差错地发往互联网上的其他主机。在发送端,它负责把上层传送下来的字节流分成报文段并传递给下层。在接收端,它负责把收到的报文进行重组后递交给上层。TCP协议还要处理端到端的流量控制,以避免缓慢接收的接收方没有足够的缓冲区接收发送方发送的大量数据。
UDP协议是一个不可靠的、无连接协议,主要适用于不需要对报文进行排序和流量控制的场合。
- TCP面向连接,UDP面向无链接
- TCP面向报文,UDP面向字节流
- TCP提供可靠传输服务(数据顺序、正确性),UDP传输不可靠
- TCP协议传输速度慢,UDP协议传输速度快
- TCP协议对系统资源要求多(头部开销大),UDP协议要求少
4 TCP3次握手,4次挥手
握手
- 第一次握手:建立连接。客户端发送连接请求报文段,将SYN位置为1,Sequence Number为x;然后,客户端进入SYN_SEND状态,等待服务器的确认;
- 第二次握手:服务器收到SYN报文段。服务器收到客户端的SYN报文段,需要对这个SYN报文段进行确认,设置Acknowledgment Number为x+1(Sequence Number+1);同时,自己自己还要发送SYN请求信息,将SYN位置为1,Sequence Number为y;服务器端将上述所有信息放到一个报文段(即SYN+ACK报文段)中,一并发送给客户端,此时服务器进入SYN_RECV状态;
- 第三次握手:客户端收到服务器的SYN+ACK报文段。然后将Acknowledgment Number设置为y+1,向服务器发送ACK报文段,这个报文段发送完毕以后,客户端和服务器端都进入ESTABLISHED状态,完成TCP三次握手。
挥手
- 第一次挥手:主机1(可以是客户端,也可以是服务器端),设置Sequence Number和Acknowledgment Number,向主机2发送一个FIN报文段;此时,主机1进入FIN_WAIT_1状态;这表示主机1没有数据要发送给主机2了;
- 第二次挥手:主机2收到了主机1发送的FIN报文段,向主机1回一个ACK报文段,Acknowledgment Number为Sequence Number加1;主机1进入FIN_WAIT_2状态;主机2告诉主机1,我“同意”你的关闭请求;
- 第三次挥手:主机2向主机1发送FIN报文段,请求关闭连接,同时主机2进入LAST_ACK状态;
- 第四次挥手:主机1收到主机2发送的FIN报文段,向主机2发送ACK报文段,然后主机1进入TIME_WAIT状态;主机2收到主机1的ACK报文段以后,就关闭连接;此时,主机1等待2MSL后依然没有收到回复,则证明Server端已正常关闭,那好,主机1也可以关闭连接了。
5 为什么建立连接时是三次握手,两次行不行
不行。只有三次握手过程,客户端能够确认双方的发送和接收功能正常,服务端能够确认双方的发送和接收功能正常。
6 四次挥手能够变成三次吗
请注意在服务器接收到客户端的断开请求时,服务器向客户端发送的数据可能还没有发送完。如果是三次挥手的话,那么要等到服务器将数据发送完,再发送给客户端一个ACK,那么就麻烦了。因为客户端迟迟接收不到服务器的确认,那么就会不断地发送断开请求,这种情况使我们不希望出现的,因为对服务器和客户端都是一种不好的情况。但是如果是四次挥手的话,服务器一接收到断开请求,立即回复给客户端一个ACK,那么客户端接收到了ACK,就不会再发送断开请求了,只需等待到服务器发送完数据,然后通过一个服务器发送到客户端的断开请求来确认断开就ok了,那么上面出现的情况就完美解决了
7 第三次握手失败,应该怎么处理
第三次握手失败时的处理操作,可以看出当失败时服务器并不会重传ack报文,而是直接发送RTS报文段,进入CLOSED状态。这样做的目的是为了防止SYN洪泛攻击。客户端如果还想重新建立TCP链接,就必须重新开始第一次握手
8 关闭连接时,第四次握手失败怎么处理
在关闭链接时,最后一个ACK丢失,实际上在第三步中,客户端收到FIN包时,它会设置一个计时器,等待相当长的一段时间,如果客户端返回的ACK丢失,那么服务器还会重发FIN并充值计时器。假设在计时器失效前服务器重发的FIN包没有到达客户端,客户端就会进入CLOSE状态,从而导致服务端永远无法收到ACK确认,也就无法关闭链接。
9 TCP采用哪些方式保证传输可靠
1、应用数据被分割成TCP认为最适合发送的数据块。
2、超时重传:当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
3、TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
4、校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
5、TCP的接收端会丢弃重复的数据。
6、流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的我数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
7、拥塞控制:当网络拥塞时,减少数据的发送
10 HTTP
HTTP是基于TCP/IP通信协议来传递数据的协议
11 HTTP状态码
- 100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息
- 200 OK 正常返回信息
- 201 Created 请求成功并且服务器创建了新的资源
- 202 Accepted 服务器已接受请求,但尚未处理
- 301 Moved Permanently 请求的网页已永久移动到新位置。比如说我们在地址栏输入baidu,虽然没写完整,但是浏览器会通过永久重定向去加上http://www.baidu.com,仍然会让用户访问的到,服务器重定向会防止搜索引擎干预,搜索引擎收到301永久重定向就会把http://baidu.com和http://www.baidu.com看成一个网站;
- 302 Found 临时性重定向。
- 303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。
- 304 Not Modified 自从上次请求后,请求的网页未修改过。
- 400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。
- 401 Unauthorized 请求未授权。
- 403 Forbidden 禁止访问。
- 404 Not Found 找不到如何与 URI 相匹配的资源。
- 500 Internal Server Error 最常见的服务器端错误。
- 503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)
12 HTTP 协议包括哪些请求
- GET:对服务器资源的简单请求
- POST:用于发送包含用户提交数据的请求
- HEAD:类似于GET请求,不过返回的响应中没有具体内容,用于获取报头
- PUT:请求文档的一个版本
- DELETE:发出一个删除指定文档的请求
- TRACE:发送一个请求副本,以跟踪器处理进程
- OPTIONS:返回所有可用的方法,检查服务器支持哪些方法
- CONNECT:用于SSL隧道的基于代理的请求
13 HTTP请求GET和POST区别
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET产生的URL地址可以被Bookmark,而POST不可以。
- GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- GET请求只能进行url编码,而POST支持多种编码方式。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的,而POST没有。
- 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)
14 Cookie 和 Session的区别
- cookie是存储在客户端
cookie确切的说分为两大类:会话cookie和持久化cookie。
会话cookie是存放在客户端浏览器的内存中,他的生命周期和浏览器是一致的,当浏览器关闭会话cookie也就消失了,
持久化cookie是存放在客户端硬盘中,持久化cookie的生命周期是我们在设置cookie时候设置的那个保存时间 - 而session是存放在服务器的内存中里,所以session里的数据不断增加会造成服务器的负担,所以会把很重要的信息存储在session中,而把一些次要东西存储在客户端的cookie里。
session的信息是通过sessionID获取的,而sessionID是存放在会话cookie当中的,当浏览器关闭的时候会话cookie消失,所以sessionID也就消失了
15 HTTP请求的完整过程
DNS解析(通过访问的域名找出其IP地址,递归搜索)
HTTP请求,当输入一个请求时,建立一个Socket连接发起TCP的3次握手
客户端向服务器发送请求命令(一般是GET或POST请求)
客户端发送请求头信息
服务器发送应答头信息
服务器向客户端发送数据
服务器关闭TCP连接(4次挥手)
客户端根据返回的HTML,CSS,JS进行渲染
16 HTTP和HTTPS
1、HTTP
HTTP协议建立在TCP连接之上,所有传输的内容都是明文。
HTTP用的端口是80。
2、HTTPS
HTTPS建立在SSL/TLS之上,SSL/TLS建立在TCP连接之上,所有的传输内容都是经过加密的。
HTTPS用的端口是443。
参考文章
https://www.jianshu.com/p/a1f5daf7ada5
http://www.cnblogs.com/BlueTzar/articles/811160.html
https://www.jianshu.com/p/1c0eb9e67941
https://www.jianshu.com/p/80a97488faa9
https://www.jianshu.com/p/c2f0e2cb6180
https://blog.csdn.net/luobo140716/article/details/51880289
https://www.cnblogs.com/wrm1995/p/5627758.html
https://blog.csdn.net/q179886903/article/details/52741327
http://www.w3school.com.cn/tags/html_ref_httpmethods.asp