大家好,我是小白程序员阿猪
反正bug是改不完的了,那么我们一起来回顾一下计算机网络的常见知识点吧~
以下是我总结的一些关于计算机网络的知识,如果有什么大家面试过程遇到的问题,欢迎提出补充。
- TCP/IP 五层模型 / TCP/IP四层模型 / OCI七层模型
- TCP和UDP的区别
- HTTP和HTTPS的区别
- 从输入网址到获得页面的过程
- HTTP长连接和短连接
- TCP三次握手和四次挥手(重点)
- GET和POST的区别
-
TCP/IP 五层模型 / TCP/IP四层模型 / OCI七层模型
上面就是TCP/IP 五层模型 / TCP/IP四层模型 / OCI七层模型这三个模型的结构图,可能会有朋友和我一样,啥也记不住,那怎么记住这么多层,别慌,记住一个七字真言:阿婆死踢你的屁(但是面试的时候不能这样说啊!!!)
应用层(Application Layer):是最靠近用户的OSI层。这一层为用户的应用程序(例如电子邮件、文件传输和终端仿真)提供网络服务。
表示层(Presentation Layer):可确保一个系统的应用层所发送的信息可以被另一个系统的应用层读取。
会话层(Session Layer):通过传输层(端口号:传输端口与接收端口)建立数据传输的通路。
传输层(Transport Layer):定义了一些传输数据的协议和端口号(WWW端口80等)
网络层(Network Layer):在位于不同地理位置的网络中的两个主机系统之间提供连接和路径选择。
数据链路层(Data Link Layer):定义了如何让格式化数据以进行传输,以及如何让控制对物理介质的访问。
物理层(Physical Layer):主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。 -
TCP和UDP的区别
UDP协议和TCP协议都是传输层协议。
TCP(Transmission Control Protocol,传输控制协议)提供的是面向连接,可靠的字节流服务。即客户和服务器交换数据前,必须现在双方之间建立一个TCP连接,之后才能传输数据。并且提供超时重发,丢弃重复数据,检验数据,流量控制等功能,保证数据能从一端传到另一端。
UDP(User Data Protocol,用户数据报协议)是一个简单的面向数据报的运输层协议。它不提供可靠性,只是把应用程序传给IP层的数据报发送出去,但是不能保证它们能到达目的地。由于UDP在传输数据报前不用再客户和服务器之间建立一个连接,且没有超时重发等机制,所以传输速度很快。
可以总结成为以下表格:
-
HTTP和HTTPS的区别
Http协议运行在TCP之上,明文传输,客户端与服务器端都无法验证对方的身份;Https是身披SSL(Secure Socket Layer)外壳的Http,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP。
二者之间存在如下不同:
1、端口不同:Http与Http使用不同的连接方式,用的端口也不一样,前者是80,后者是443;
2、资源消耗:和HTTP通信相比,Https通信会由于加减密处理消耗更多的CPU和内存资源;
3、开销:Https通信需要证书,而证书一般需要向认证机构购买;
4、Https的加密机制是一种共享密钥加密和公开密钥加密并用的混合加密机制。 -
从输入网址到获得页面的过程
不知道当你看到这个问题的时候是不是和我一样的内心世界
其实也不难,只要我们简单地记住三个步骤就可以了:
1、域名解析,根据用户输入的网址去寻找他所对应的ip地址
2、建立TCP连接
3、根据SpringMVC后台业务返回数据,并把数据填充到HTML页面上,然后返回给浏览器
别看只有这三个步骤,其实这个过程涉及到了很多协议,在这里我就不作细讲了(偷懒)~
- HTTP长连接和短连接
在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
-
三次握手和四次挥手
来了,重点来了,如果你以前没有了解过三次握手和四次挥手,那你接下来可就要好好坐下来认真看一看了。
所谓的三次握手,不是让你去和面试官握三次手,如果你这样做,面试官也只能对你四次挥手说拜拜了。
我们这里所讲的其实是TCP的三次握手和四次挥手,目的是为了准确把数据送达目标处。
第一次握手:客户端向服务端发送一个含有同步序列号(SYN=1)标志位的数据段,向服务端请求建立连接。通过这个数据段,客户端告诉服务端两件事:1、我想要和你通信。2、你可以用哪个序列号作为起始数据段来回应我。
第二次握手:服务端接收到客户端的请求后,用一个带有确认应答和同步序列号标志位的数据段响应客户端,也告诉客户端两件事:1、我已经收到你的请求了,你可以传输数据了。2、你要用哪个序列号作为起始数据段来回应我。
第三次握手:客户端在收到服务端的回应后,再向服务端发送一个确认应答,确认已收到服务端的数据段,客户端告诉服务端:1、我已收到回复,我现在要开始传输实际数据了。
而四次挥手则是客户端和服务端断开TCP连接时的操作,如下:
第一次挥手:客户端向服务端发送一个FIN,关闭从客户端到服务端发送数据的这条通道。客户端进入FIN_WAIT状态。此时服务端还可以发送数据给客户端,客户端还可以接受服务端发送的数据。
第二次挥手:由于服务端可能还会发送数据给客户端,所以客户端不是即时关闭对客户端的通道。所以服务端向客户端发送ACK给客户端,确认序号为收到的序号+1。服务端进入CLOSE_WAIT状态。
第三次挥手:待服务端的数据发送给客户端的数据全部在客户端接收完成以后,服务端向客户端发送一个FIN,关闭服务端向客户端发送数据的这条通道。服务端进入LAST_ASK状态。
第四次挥手:最后在客户端接收到服务端的FIN后,客户端进入TIME_WAIT状态,并向服务端回应一条Ack(确认号),确认编号为收到的序号+1。服务端进入CLOSED状态。
那么有一些朋友就会有疑问:为什么连接要三次,断开连接要四次?
这是因为服务端在LISTEN状态下, 收到建立连接请求的SYN报文后, 把ACK(确认)和SYN(建立联机)放在一个报文里发送给客户端。而关闭连接时,当收到对方的FIN报文时, 仅仅表示对方不在发送数据了, 但是还能接收数据, 己方也未必全部数据都发送对方了, 所以己方可以立即close, 也可以发送一些数据给对方后, 再发送FIN报文给对方来表示同意现在关闭连接, 因此, 己方ACK(确认)和FIN(结束)一般都会分开发送。 -
GET和POST的区别
Get请求和Post请求都是TCP连接。如果用一句话来描述:GET是获取数据,POST是提交数据。
HTTP安全(Safe) 指的是是否改变服务器资源的状态,即我们平常说的是否有副作用。从这个角度来讲,Get请求比Post请求要安全得多,因为Get请求只是获取数据,并不会改变服务器资源的状态,所以可以说是没有副作用的。而Post请求恰好相反。
安全性(Security) 指的是数据安全。由于Get请求会把数据放置在URL中,而Post请求会把数据放置在请求体中。所以说Post请求比Get请求要安全。但是数据放置在请求体中可以被抓包提取出来,所以Post请求也不适用于传输机密数据。只有HTTPS才是安全的。
幂等性(Idempotent) 指的是多次请求,效果一致。Get请求是幂等的,Post请求是不幂等的。Post请求在刷新页面的时候,会弹框要求重复确认是否刷新。
缓存性指的是GET 是会被浏览器主动缓存的,如果下一次传输的数据相同,那么就会返回缓存中的内容,以求更快地展示数据。而Post请求默认是不可缓存的。
Get方法只产生一个 TCP 数据包,浏览器会把请求头和请求数据一并发送出去,服务器响应 200 ok(返回数据)。POST 方法会产生两个 TCP 数据包,浏览器会先将请求头发送给服务器,待服务器响应100 continue,浏览器再发送请求数据,服务器响应200 ok(返回数据)。从理论的角度上看。Get请求会比Post请求要快。
长度限制指的是Get请求,在HTTP规范对URL长度是没有限制的,只是不同浏览器对URL长度做了限制。而Post请求的大小没有限制。
这次就写到这里啦,如果知识点有什么错误希望大家多多包涵并且指出改正~觉得写得还可以的朋友希望关注支持一下博主!