问题总结
1、cookie和session的区别
2、TCP的三次握手过程?为什么要三次握手?
【三次握手的过程】【三次握手的原因】
3、TCP四次挥手
【TCP四次挥手的过程】
【为什么连接的时候是三次握手,关闭的时候却是四次握手?】
【等待 2MSL 的原因】
4、TCP和UDP的区别
5、HTTP 和 HTTPS的区别
6、TCP的拥塞控制
7、滑动窗口
8、HTTP请求中GET和POST的区别
计算机网络详解
🌟一、cookie和session的区别(农+1,)
(1)cookie只能存储ASCII码,而session可以存储任何类型的数据
(2)session存储在服务器中,而cookie存储在客户端中,容易被恶意查看
(3)session运行依赖于session ID,而session ID为存在cookie中的JSESSIONID。如果浏览器禁用了cookie,同时session也会失效(可以通过其他方法实现,比如在URL中传递session)
待增加:cookie和session的机制是什么?
🌟二、TCP的三次握手过程?为什么要三次握手?(农+1)
1、三次握手的过程
(1)建立TCP连接时,客户端发送syn包到服务器,此时客户端进入SYN_SENT状态,等待服务器确认。
(2)服务器收到syn包,必须确认客户的SYN,并向客户端发送SYN/ACK包,此时服务器进入SYN_RECV状态。
(3)客户端收到SYN/ACK包,向服务器发送确认包ACK,此包发送完毕,客户端和服务器进入established状态,TCP连接成功,完成三次握手
2、三次握手的原因(农+1)
(1)从信息对等角度看,客户端和服务器端分别要确认自己的发送和接受能力均正常,第二次握手后,服务器还不能确认自己 的发送能力和对方的接收能力。
(2)客户端的超时连接请求可能会在双方释放连接后后到达服务器,服务器端会误以为是客户端发送了新的请求,然后创建连接,造成服务器资源的浪费。
image.png
🌟三、TCP四次挥手(农+1)
【问题1】TCP四次挥手的过程
(1)当客户端没有要发送的数据时会向服务器端发送终止连接报文FIN,发送后客户端进入FIN-WAIT-1状态。
(2)服务器端收到FIN后发给客户端一个ACK确认报文,客户端进入FIN-WAIT-2状态,服务端进入CLOSE-WAIT状态,TCP进入半关闭状态。
(3)当服务器端数据全部发送完毕就向客户端发送终止连接报文FIN,之后服务器端进入LAST-ACK状态。
(4)客户端收到FIN报文后,还需向服务器端发送ACK报文进行再一次确认,发送之后客户端进入TIME-WAIT状态,等到2MSL后进入CLOSED状态,服务器收到确认后进入CLOSED状态
【问题2】为什么连接的时候是三次握手,关闭的时候却是四次握手?
因为当服务器端收到客户端的SYN的连接请求报文之后,可以直接发送SYN+ACK报文,其中ACK报文是用来应答的,SYN报文是用来同步的。但是关闭连接时,当服务器端收到FIN报文时,很可能并不会直接关闭SOCKET,所以只能先回复一个ACK报文,告诉客户端收到了FIN报文的消息,只有等到服务器端数据全部发送完毕,服务器端才向客户端发送FIN报文,所以需要四次挥手。
【问题3】等待 2MSL 的原因
(1)MSL是最大报文寿命,等待2MSL可以保证客户端发送的最后一个确认报文ACK被服务器端接收,如果该报文丢失,服务器端会超时重传之前的FIN报文,保证服务器端进入正常的CLOSED状态。
(2)2MSL后,本连接中的所有报文就会从网络中消失,防止已失效请求造成异常。
🌟四、TCP和UDP的区别
1、TCP是面向连接的,发送数据之前必须建立连接,发送某些预备报文段;UDP是无连接的,发送数据之前不需要建立连接。
2、TCP连接是点对点的,只支持单个发送方和单个接收方的连接;UDP支持一对一、一对多和多对多通信。
3、TCP提供可靠的交付服务,通过TCP传送的数据无差错、不丢失、不重复,按序到达;UDP适用尽最大努力交付,不保证可靠性,主机不需要维持复杂的连接状态。
4、TCP是面向字节流的,TCP不保证接收方的数据块和发送方数据块大小对应,但接收方的字节流必须保证和发送方的字节流完全一样。应用程序必须有能力识别收到的字节流,把它还原成应用层数据。UDP面向报文,对应用层添加首部后就交付IP层。
总结:TCP是面向连接的,点对点的,可靠的字节流服务;UDP是面向无连接的,支持一对一、一对多、多对多通信的,不可靠的数据报服务。
🌟五、HTTP 和 HTTPS的区别(农+1)
1、HTTP是互联网上应用最为广泛的一种网络协议,是一个客户端和服务器端请求和应答的标准,用于从WWW服务器传输超文本到本地浏览器的传输协议。(它可以使浏览器更加高效,使网络传输减少)
2、HTTPS是以安全为目标的HTTP通道,即在HTTP传输上增加了SSL安全套接字层,通过机密性、数据完整性、身份鉴别为HTTP事务提供安全保证。
3、HTTPS过程
(1)客户端使用https的URL访问Web服务器,要求与Web服务器建立SSL连接。
(2)Web服务器收到客户端请求后,会讲将网站的证书信息(证书包含公钥)传送一份给客户端。
(3)客户端浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息的加密等级。
(4)浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
(5)Web服务器利用自己的私钥解密出会话密钥。
(6)Web服务器利用会话密钥加密与客户端之间的通信。
4、 http和https的区别
- https协议需要到CA(Certificate Authority,证书颁发机构)申请证书,一般免费证书较少,因而需要一定费用。
- http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
- http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
- http的连接很简单,是无状态的。Https协议是由SSL+Http协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。(无状态的意思是其数据包的发送、传输和接收都是相互独立的。无连接的意思是指通信双方都不长久的维持对方的任何信息。)
🌟六、 TCP的拥塞控制(农+1)
- 拥塞控制:在某段时间内,对某一资源的需求超过了该资源可提供的可用部分,网络性能将变坏,这种情况就叫做网络拥塞。若出现拥塞而不控制,网络的吞吐量将随输入负荷的增大而下降。拥塞控制是减少注入网络中的数据,减轻路由器和链路的负担。这是一个全局性的问题,设计网络中所有主机和路由器,而流量控制是一个端到端的问题。
- RTT表示从发送端发送数据开始,到发送端收到来自接收端的确认(接收端收到数据后便立即发送确认,不包含数据传输时间)总共经历的时间。
TCP拥塞控制算法:慢启动,拥塞避免,快恢复,快重传
原理请观看视频
- 慢启动:在TCP双方建立连接关系时,拥塞窗口cwnd被设置为1,还需设置慢开始门限ssthresh。每经过一个RTT往返时间,拥塞窗口的值就会翻倍,发送速率也会翻倍。当拥塞窗口的值达到慢开始门限时,停止慢启动算法,转而开始拥塞避免算法
- 拥塞避免算法:当拥塞避免算法开始后,每经过一个RTT往返时间即将拥塞窗口的值线性加1,直到发生报文段丢失,超时重传的情况,则发送方将慢开始的门限调整为发生超时重传窗口值的一半,并将cwnd设置为1,重新开始慢启动算法。
有的时候报文段丢失并不是因为网络拥塞,发送方将其认定为网络拥塞容将降低传输效率,此时可以通过快重传和快恢复解决这个问题
- 快重传:快重传要求服务器收到客户端发送的数据后立即发送确认,即使收到了失序的报文段时也要立即发出对已收到报文段的重复确认。发送方一旦收到3个连续的重复确认,即将相应的报文段立即重传,而不是等该报文的超时重传计时器超时再重传。
- 快恢复:发送方在执行快重传的同时,将慢开始门限和拥塞窗口值改为当前窗口值的一半,并开始执行拥塞避免算法。
🌟七、滑动窗口
滑动窗口以字节为单位。发送端有一个发送窗口,窗口中的序号是允许发送的序号,窗口后沿是以发送且确认的序号,窗口前沿是不允许发送的序号。没有收到确认时,窗口不会移动。当收到确认的序号,即窗口向前移动,将已确认的序号置于窗口的后沿。发送端可以根据自己的状况调整滑动窗口大小,从而控制发送端的接收,进行流量控制。
🌟 八、HTTP请求中,GET和POST的区别
- GET请求:向服务器请求特定资源,并获取返回实体主体
- POST请求:向服务器提交数据处理请求,将请求数据放在请求报文主体中,该请求可能导致新的资源建立或已有资源的更改
- POST请求:
(1)GET是从服务器上获取数据,POST是向服务器传送数据。
(2)GET请求的数据会暴露在地址中,而POST将请求的数据放在请求报文主体中。
(3)GET限制最多提交2k数据,而POST对于提交的数据量没有限制
(4)GET请求只能进行URL编码,而POST请求编码方式没有限制
(5)GET产生一个TCP数据包,浏览器会将http header和data一起发送过去,服务器返回200;POS产生两个TCP数据包,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器返回200
(6)GET在浏览器回退时是无害的,而POST会再次提交请求
以下情况最好使用POST:
- 向服务器发送大量数据
- 无法使用缓存文件
- 发送包含未知字符的用户输入
网友评论