计算机网络基础
TCP三次握手
- 客户端->发送带有SYN标志的数据包->一次握手->服务端
- 服务端->发送带有SYN/ACK标志的数据包->二次握手->客户端
- 客户端->发送带有ACK标志的数据包->三次握手->服务端
为什么需要三次握手
三次握手的目的是建立可靠的通信信道,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己的与对方的发送与接收是正常的。
- 第一次握手:客户端什么都不能确认;服务端确认了对方发送正常,接收正常;
- 第二次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务端确认了:对方发送正常,自己接收正常;
- 第三次握手:客户端确认了:自己发送、接收正常,对方发送、接收正常;服务端确认了:自己发送、接收正常,对方发送、接收正常
所以三次握手就能确认双方收发功能都正常,缺一不可。
为什么要回传SYN
接收端回传发送端发送的SYN是为了告诉发送端,我接收到的信息却是就是你所发送的信息。
传了SYN为什么还要传ACK
双方通信无误必须是两者互发信息都无误。传了SYN,证明发送方到接收方的通道没有问题,但是接收到发送方的通道还需要ACK信号进行验证。
TCP四次挥手
- 客户端->发送一个FIN,用来关闭客户端到服务器的数据传送;
- 服务器->收到这个FIN,它发回一个ACK,确认序号为收到的序号加1和SYN一样,一个FIN占用一个序号;
- 服务器->关闭与客户端的连接,发送一个FIN给客户端;
- 客户端->发回ACK报文确认,并将确认序号设置为收到序号加1.
为什么需要四次挥手
任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全,关闭了TCP连接。
举个列子:A和B打电话,通话即将结束,A说“我没有要说的”,B回答“我知道了”,但是B可能还有话要说,A不能要求B跟着自己的节奏结束通话,B可能又说了一些,最后B再说“我也说完了”,A回答“我知道了”,才结束通话。
TCP如何保证可靠传输
- 校验和:接收端可以检测出来数据是否有差错和异常,如果有差错会直接丢弃TCP段重新发送;
- 超时重传:当TCP发出一个段,启动一个定时器,等待目的端确认收到这个报文段,如果不能及时收到一个确认,将重发这个报文段;
- 拥塞控制:网络拥塞时,减少数据的发送;
- 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送缓冲区能接纳的数据,当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失;
- 重复丢弃:接收端会丢弃重复的数据;
- ARQ协议(停止等待协议):为了实现可靠传输,原理就是每发完一个分组就停止发送,等待对方确认。确认后再发下一个分组。
- 序列号/确认应答:TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
TCP与UDP协议区别
浏览器中输入URL->显示主页的过程(重点)
打开一个网页,整个过程使用哪些协议
总体分为以下过程:
- DNS解析
- TCP连接
- 发送HTTP请求
- 服务器处理请求并返回HTTP报文
- 浏览器解析渲染页面
- 连接结束
HTTP长连接与短连接
- 短连接:客户端与服务器端每次进行一个HTTP操作,就建立一次连接,任务结束就中断连接。
- 长连接:客户端与服务器端之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时候,可以继续使用这一条已经建立的连接。
HTTP不保存状态的协议,如何保存用户状态?
HTTP是一种无状态协议。也就是说HTTP协议自身不对请求和响应之间的通信状态进行保存。
Session机制就是为了解决这个问题,Session主要作用就是通过服务端记录用户的状态。 大部分情况下,通过Cookie中附加一个Session ID方式跟踪。
Cookie被禁用
利用URL重写把Session ID直接附加到URL路径的后面。
Cookie的作用?和Session区别?
- Cookie用于保存用户的信息(保存在客户端,即浏览器)
- Session用于通过服务端记录用户状态(保持在服务器端,所以安全性更高)
HTTP与HTTPS区别
- 端口:HTTP的URl是“http://”,默认端口是80。HTTPS的URL是“https://”,默认端口是443;
- 安全性和资源消耗:
- HTTP协议所有传输内容都是明文,客户端和服务端无法验证对方身份。HTTPS传输内容都经过加密,安全性更高
- 由于HTTPS需要加密解密,所以比HTTP消耗更多服务器资源
Enjoy Reading This Article?
Here are some more articles you might like to read next: