一、概述:
1、七层模型、四层模型和五层模型关系。
OSI七层协议模型主要是:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。
五层协议中 ,应用层相当于七层协议中的应用层+表示层+会话层。
TCP/IP四层协议中,网络接口层相当于五层协议中的数据链路层+物理层。
2、五层体系结构及其常见端口号分布
五层体系结构包括:应用层、运输层、网络层、数据链路层和物理层。
3、各层的作用
3.1、物理层:
主要定义物理设备标准,代表设备:网线,集线器等
3.2、数据链路层:
定义了如何让格式化数据以进行传输。还提供错误检测和纠正,以确保数据的可靠传输。代表设备:网桥,交换机
3.3、网络层:
在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。代表设备:路由器
3.4、运输层:
定义了一些传输数据的协议和端口号(WWW端口80等),如:
TCP(transmission control protocol –传输控制协议,传输效率低,可靠性强,用于传输可靠性要求高,数据量大的数据)
UDP(user datagram protocol–用户数据报协议,与TCP特性恰恰相反,用于传输可靠性要求不高,数据量小的数据,如QQ聊天数据就是通过这种方式传输的)。 主要是将从下层接收的数据进行分段和传输,到达目的地址后再进行重组。常常把这一层数据叫做段。
3.5、应用层:
是最靠近用户的OSI层。这一层为用户的应用程序提供网络服务。
4、2021年实习面试多次碰到的面试题
1、三次握手、四次挥手
2、HTTP返回状态码(301,302,304,404等)
3、GET和POST区别
4、从输入URL到页面加载发生了什么
5、其他同学接触过科留言评论哦
二、运输层(TCP)
1、TCP与UDP区别
- TCP 是面向连接的,UDP 是面向无连接的
- TCP比UDP程序结构复杂。
- TCP 是面向字节流的,UDP 是基于数据报的
- TCP 保证数据正确性,UDP 可能丢包
- TCP 保证数据顺序,UDP 不保证
2、TCP三次握手全过程
三次握手目的
第一次握手:客户端请求服务器建立连接
第二次握手:服务器要求客户端确认连接
第三次握手:客户端跟服务器确认连接
简单理解:
A:面试官好(确认码SYN=1),我是 A(随机码seq=x)。
B:A吗(ack=x+1),好(SYN=1 ),没问题的话(ACK=1),那就先简单自我介绍一下(随机码seq=y)。
A:好的(ACK=1),面试官好(ack=y+1),我叫A(seq=x+1),来着XXX(第三次握手可携带的其他数据)。
正常描述:一开始,客户端A和服务器B是关闭连接的。假设A和B要连接,那么A就是主动创建连接,B是被动接受连接的。那么:
B就创建TCB(任务控制块),等待A连接。
A创建TCB,主动向B发起连接,先第一次握手,发送一个首部SYN=1、随机序号seq=x的报文段给B,然后等待B发送回复报文。
B收到上述报文后,发送回复报文给A,报文中SYN=1,ACK标记位=1,确认号ack=x+1(表示自己收到你发的上述报文段),还有自己的随机码seq=y
A收到B的回复报文后,确认已经和B连接了,就再发送一个已确认连接的报文,及ACk=1,随机码seq=x+1,确认号ack=y+1;这段报文可夹杂数据
3、两次握手行不行
两次握手后,服务器B认为连接,传送数据给B,但中途数据丢失或者在网络滞留时间过长。A收不到,以为没连接,会建立新的连接,重传第一次握手,服务器B接收到新的连接,开始第二次握手。后果:造成多次无效连接,即分配无效客户端资源,浪费资源。(SYN攻击)
4、TCP四次挥手全过程
我拿我初中兼职的例子来简单说一下:
要下班了,老板找我闲聊最近的生活情况(互相发送消息)。一段时间后,老板沉默一会后:
—————————开始四次挥手—————————
(一次)老板:公司有规定,上个月盈利多少才能有多少员工,上个月盈利不足(seq=u),所以嘛,你理解不(FIN=1)。
(二次)我:好的(ACK=1),我明白(ack=u+1),感谢这近一个月的时间里给我的照顾(seq=V)。
(服务器继续之前没传送完的数据)我向老板继续说最近我在公司生活的感受,我:在这段时间里,贵公司…我…
(三次)我:我收拾好东西后就离开(ack=u+1)感谢近一个月时间里贵公司的照顾(seq=w),本人也理解贵公司的做法(FIN =1,ack=u+1)。
(四次)老板:好(ACK=1),还没一个月啊,虽然公司上个月盈利不够好(seq=u+1),不过我给你按一个月的工资结算(ack=w+1)。
—————————结束四次挥手—————————
拿到工资后,打电话跟老妈说:“老妈,我辞掉兼职了,我要抽时间写作业学习了,老板心挺好的,我才干了三个星期,老板就给我开一个月的工资”。
——————————正常描述——————————
第一次挥手:发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN_WAIT1(终止等待1)状态,等待服务端的确认。
第二次挥手:服务端收到连接释放报文段后即发出确认报文段(ACK=1,确认号ack=u+1,序号seq=v),服务端进入CLOSE_WAIT(关闭等待)状态,此时的TCP处于半关闭状态,客户端到服务端的连接释放。
客户端收到服务端的确认后,进入FIN_WAIT2(终止等待2)状态,等待服务端发出的连接释放报文段。
第三次挥手:客户端收到服务端的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),客户端进入TIME_WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,客户端才进入CLOSED状态。
5、time_wait状态是第几次挥手之后
第四次。
6、time_wait持续多久?为什么?
2MSL,因为假象网络是不可靠的,有可能最后一个ACK丢失。所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。
7、TCP拥塞控制全过程
我同学2021年去腾讯还碰到这题,挺高频率的…
参考链接:TCP拥塞控制机制
三、应用层(HTTP)
1、状态码
状态码分类表
类别 | 原因短语 | |
---|---|---|
1xx | Informational(信息性状态码) | 接受的请求正在处理 |
2xx | Success(成功状态码) | 请求正常处理完毕 |
3xx | Redirection(重定向) | 需要进行附加操作以完成请求 |
4xx | Client error(客户端错误) | 客户端请求出错,服务器无法处理请求 |
5xx | Server Error(服务器错误) | 服务器处理请求出错 |
例:**200 OK:**表示从客户端发送给服务器的请求被正常处理并返回。
例:**303 See Other:**表示请求的资源被分配了新的URL,应使用GET方法定向获取请求的资源;
例:403服务器拒绝该次访问(访问权限出现问题)
该部分内容摘抄于:HTTP常见状态码(14种)
2、从输入URL到页面加载发生了什么
-
DNS域名解析
自己电脑(浏览器——操作系统)——本地——权限——顶级——根域名服务器(自己电脑查找,没有就一直回溯到根,找到目标服务器,逐步回来把结果告诉主机)
-
三次握手
-
客户端发送 HTTP请求
-
服务器处理请求返回HTTP响应
返回HTTP状态码200即成功
-
浏览器解析和渲染页面
-
关闭连接,如:四次挥手
3、HTTP与HTTPS的区别
HTTPS | HTTP | |
---|---|---|
安全性 | 安全超文本协议,HTTPS≈HTTP+TLS/SSL | |
证书 | HTTPS需要使用CA申请证书 | |
传输协议 | 具有SSL 加密传输协议 | 明文传输 |
连接及端口号 | 困难(加密),443 | 无状态,80 |
连接方式与端口上,http的连接简单,是无状态的,端口是 80; https 在http的基础上使用了ssl协议进行加密传输,端口是 443
4、GET和POST区别
从作用上看(正常情况下):
get是为了获取服务器中的某个数据,不尝试修改数据。
post是为了提交某个表单或者请求信息并且需要修改服务器数据(post也被一些ui框架使用于取回数据)。
从安全性上看:
从服务器的数据角度:get只是获取服务器中的某个数据,不修改服务器的状态,因此是较安全的。post表单提交的过程中会导致数据库状态改变,因此有可能导致一些安全问题,post是不安全的。
从传输的角度:get中使用的编码原因,get容易被截获,因此是不安全的。post是可以使用多种编码的,较安全。
但是归根到底http是明文传输的,作者认为两者都是不安全的,只是而言的。
从浏览器缓存的角度:
get的每次请求对于服务器来说都是无状态的,因此浏览器会采取缓存措施进行缓存。
post的每次请求对于服务器都是有状态改变的,因此浏览器不会进行缓存,如果进行缓存会导致同个请求多次发送,是一种不合理的表现。
从请求发送的角度:
get发送是一次将请求头与请求体发送过去,post是分两次,先头后体。
因此有了这样子一个说法:get是回退无害的,post是回退有害的。
从请求数据编码的角度:
get一般只可以使用ASCII编码,post由于其请求的类型可能是表单等其他数据,因此其请求体可以是多种编码。
并且post请求体的长度没有限制,get的请求体长度有限制(因为浏览器限制,非http协议限制)。
个人见解参考来源与同学的blog:HTTP中post和get的区别简介
四、备注
此blog个人准备(不全,是个人无目标公司时的准备),无针对公司进行准备,面试对应公司时,最好先了解对应公司的招聘信息及以往面经。