3.计算机网络

4 篇文章 0 订阅
本文深入探讨了计算机网络的分层模型,包括TCP/IP五层协议和OSI七层模型,阐述了分层的优点,并解析了TCP与UDP的区别。同时,讲解了HTTP响应码、GET与POST方法的不同,以及JSONP的实现原理和跨域解决方案。重点讨论了TCP的三次握手必要性,TCP粘包现象,以及HTTP中的301和302重定向含义。
摘要由CSDN通过智能技术生成

3.计算机网络

1.TCP/IP五层协议的体系结构

5应用层
4运输层
3网络层
2数据链路层
1物理层

物理层:中继器、集线器、还有我们通常说的双绞线也工作在物理层
数据链路层:网桥(现已很少使用)、以太网交换机(二层交换机)、网卡(其实网卡是一半工作在物理层、一半工作在数据链路层)
网络层:路由器、三层交换机
传输层:四层交换机、也有工作在四层的路由器

2.OSI七层模型

物理层:设备之间比特流的传输,物理接口,电气特性等等。常见的设备有网线,网卡等等。数据单位是比特
数据链路层:成帧,用Mac地址访问媒介,错误检测与修正。数据单位是帧
网络层:提供逻辑地址(IP地址)、选路(选择传输路线)。数据单位是报文
传输层:确定传输的可靠性以及每种协议的端口号,传输前的错误检测,流控。数据单位是TPDU
会话层:对应用会话的管理,同步。确定网络数据是否要经过远程会话 。数据单位是SPDU
表示层:数据的表现形式,特定功能的实现,比如加密压缩等。数据单位是PPDU
应用层:用户接口,无限接近用户。数据单位是APDU
在这里插入图片描述

扩展:
七层协议和四层协议

3.分层的优点

(1)人们可以很容易的讨论和学习协议的规范细节。
  (2)层间的标准接口方便了工程模块化。
  (3)创建了一个更好的互连环境。
  (4)降低了复杂度,使程序更容易修改,产品开发的速度更快。
  (5)每层利用紧邻的下层服务,更容易记住各层的功能。
  大多数的计算机网络都采用层次式结构,即将一个计算机网络分为若干层次,处在高层次的系统仅是利用较低层次的系统提供的接口和功能,不需了解低层实现该功能所采用的算法和协议;较低层次也仅是使用从高层系统传送来的参数,这就是层次间的无关性。因为有了这种无关性,层次间的每个模块可以用一个新的模块取代,只要新的模块与旧的模块具有相同的功能和接口,即使它们使用的算法和协议都不一样。
  网络中的计算机与终端间要想正确的传送信息和数据,必须在数据传输的顺序、数据的格式及内容等方面有一个约定或规则,这种约定或规则称做协议。

4.协议的主要组成

语义
  是对协议元素的含义进行解释,不同类型的协议元素所规定的语义是不同的。例如需要发出何种控制信息、完成何种动作及得到的响应等。
语法
  将若干个协议元素和数据组合在一起用来表达一个完整的内容所应遵循的格式,也就是对信息的数据结构做一种规定。例如用户数据与控制信息的结构与格式等。
时序
  对事件实现顺序的详细说明。例如在双方进行通信时,发送点发出一个数据报文,如果目标点正确收到,则回答源点接收正确;若接收到错误的信息,则要求源点重发一次。

5.Socket

这不是一个协议,而是一个通信模型。其实它最初是伯克利加州分校软件研究所,简称BSD发明的,主要用来一台电脑的两个进程间通信,然后把它用到了两台电脑的进程间通信。所以,可以把它简单理解为进程间通信,不是什么高级的东西。主要做的事情不就是:

A发包:发请求包给某个已经绑定的端口(所以我们经常会访问这样的地址182.13.15.16:1235,1235就是端口);收到B的允许;然后正式发送;发送完了,告诉B要断开链接;收到断开允许,马上断开,然后发送已经断开信息给B。

B收包:绑定端口和IP;然后在这个端口监听;接收到A的请求,发允许给A,并做好接收准备,主要就是清理缓存等待接收新数据;然后正式接收;接受到断开请求,允许断开;确认断开后,继续监听其它请求。

可见,Socket其实就是I/O操作。Socket并不仅限于网络通信。在网络通信中,它涵盖了网络层、传输层、会话层、表示层、应用层——其实这都不需要记,因为Socket通信时候用到了IP和端口,仅这两个就表明了它用到了网络层和传输层;而且它无视多台电脑通信的系统差别,所以它涉及了表示层;一般Socket都是基于一个应用程序的,所以会涉及到会话层和应用层。

6.简述 tcp 和 udp的区别?

1)TCP提供面向连接的传输,通信前要先建立连接(三次握手机制);UDP提供无连接的传输,通信前不需要建立连接。
2)TCP提供可靠的传输(有序,无差错,不丢失,不重复);UDP提供不可靠的传输。
3)TCP面向字节流的传输,因此它能将信息分割成组,并在接收端将其重组;UDP是面向数据报的传输,没有分组开销。
4)TCP提供拥塞控制和流量控制机制;UDP不提供拥塞控制和流量控制机制。

7.http 响应码 301 和 302 代表的是什么?有什么区别?

301 Moved Permanently
被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。
302 Found
请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

扩展:
http响应码

8.http的get和post的区别

1.参数编码
get:仅支持url编码,参数需要编码和解码
post:多种编码方式
2.报文
get:参数放在url
post:参数放在请求体
3.缓存
get请求会被浏览器缓存
post不会
4.长度限制
浏览器允许get请求url长度为8k,过长会影响效率
post没有限制
5.请求次数
get请求一次
post:有的浏览器post的head和body会分开请求,head到达server后,会响应100,然后继续发送body,返回200。所以也会有效率问题,不过网络好的情况下影响不大。
6.幂等性/副作用
幂等性可查看下方参考链接
get:幂等性,根据语义,get请求只在服务端获取数据,所以每次获取的结果都是一样的。
post:非幂等性,会在服务端更改状态,比如调用了删除接口,下次在调用可能就是返回不存在当前商品了。所以post存在副作用。不过这些都是根据接口有关的认为因素,跟http本身没有关系。
7.安全性
至于安全性,两个http请求本身都是不安全的,因为http传递数据都是明文发送的,所以加上ssl才能更安全。
但是从表面上看,get请求把参数放在url上是不安全的,所以一定不要在get请求中把敏感信息放在url上。
从副作用的角度上讲,get请求对数据是安全的,因为它只获取数据,不会更改状态。

9.说一下 JSONP 实现原理?

理解JSONP原理及使用

10.如何实现跨域?

1、jsonp
利用了 script 不受同源策略的限制
缺点:只能 get 方式,易受到 XSS攻击
2、CORS(Cross-Origin Resource Sharing),跨域资源共享
当使用XMLHttpRequest发送请求时,如果浏览器发现违反了同源策略就会自动加上一个请求头 origin;
后端在接受到请求后确定响应后会在后端在接受到请求后确定响应后会在 Response Headers 中加入一个属性 Access-Control-Allow-Origin;
浏览器判断响应中的 Access-Control-Allow-Origin 值是否和当前的地址相同,匹配成功后才继续响应处理,否则报错
缺点:忽略 cookie,浏览器版本有一定要求
3、代理跨域请求
前端向发送请求,经过代理,请求需要的服务器资源
缺点:需要额外的代理服务器
4、Html5 postMessage 方法
允许来自不同源的脚本采用异步方式进行有限的通信,可以实现跨文本、多窗口、跨域消息传递
缺点:浏览器版本要求,部分浏览器要配置放开跨域限制
5、修改 document.domain 跨子域
相同主域名下的不同子域名资源,设置 document.domain 为 相同的一级域名
缺点:同一一级域名;相同协议;相同端口
6、基于 Html5 websocket 协议
websocket 是 Html5 一种新的协议,基于该协议可以做到浏览器与服务器全双工通信,允许跨域请求
缺点:浏览器一定版本要求,服务器需要支持 websocket 协议
7、document.xxx + iframe
通过 iframe 是浏览器非同源标签,加载内容中转,传到当前页面的属性中
缺点:页面的属性值有大小限制

11.tcp 为什么要三次握手,两次不行吗?为什么?

两次握手只能保证单向连接是畅通的。
Step1 A -> B : 你好,B。
Step2 A <- B : 收到。你好,A。
这样的两次握手过程, A 向 B 打招呼得到了回应,即 A 向 B 发送数据,B 是可以收到的。
但是 B 向 A 打招呼,A 还没有回应,B 没有收到 A 的反馈,无法确保 A 可以收到 B 发送的数据。
只有经过第三次握手,才能确保双向都可以接收到对方的发送的 数据。
Step3 A -> B : 收到,B。
这样 B 才能确定 A 也可以收到 B 发送给 A 的数据。
12.tcp 粘包是怎么产生的?
TCP粘包就是指发送方发送的若干包数据到达接收方时粘成了一包,从接收缓冲区来看,后一包数据的头紧接着前一包数据的尾,出现粘包的原因是多方面的
,可能是来自发送方,也可能是来自接收方。

什么是TCP粘包?怎么解决这个问题

13.forward 和 redirect 的区别?

从地址栏显示来说:
1)forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
2)redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
从数据共享来说:
1)由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
2)redirect不能共享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值