
- 在浏览器中输入一个网址,会发生什么?
- 第一步,浏览器获取域名后向DNS服务器请求获得该域名对应的服务器的IP地址,这一步使用了UDP协议
- 第二步,浏览器和该服务器发起TCP的三次握手,建立TCP连接
- 第三步,连接建立后,浏览器发起Http请求,服务器响应该请求并返回html代码
- 第四步,浏览器解析html代码,并向服务器请求html中的图片等资源
- 第五步,浏览器对html进行渲染后呈现给用户,并将TCP连接进行释放
- Http是什么?和Https的区别?
Http是超文本传输协议,是应用层协议,由请求和响应构成,常见的两种请求方法是GET和POST。GET是从指定的资源请求数据,POST是向指定的资源提交要被处理的数据,POST比GET更安全一些,因为其参数不会被保存在浏览器历史中而且数据也不会显示在URL中。
Https是Http的安全版本,Http不安全是因为其传输的是明文内容且不对传输双方进行身份验证,在数据传输路径的任何一个环节上都能看到传输的内容。Https在Http的基础上通过传输加密和身份认证保证了传输过程中的安全性。
- TCP三次握手的过程是什么?两次握手不行吗?
TCP采用三次握手的目的是确保客户端和服务器建立连接。
初始状态下客户端处于Closed状态,服务端处于Listen状态:
- 第一次握手:客户端发送SYN报文,并指明客户端的初始化序列号,此时客户端处于SYN_SEND状态。
- 第二次握手:服务器端收到客户端的SYN报文后,会以自己的SYN报文作为应答,并且指定服务端的初始化序列号,同时把客户端的初始化序列号+1作为ACK的值,此时服务器处于SYN_REVD状态。
- 第三次握手:客户端收到服务端的SYN报文后,会发送一个ACK报文,其值是服务器的初始化序列号+1,此时客户端处于Established状态;服务器收到客户端的ACK报文后,将也处于Established状态,此时完成三次握手,客户端和服务器正式建立连接。
之所以不使用两次握手,是因为TCP只有通过三次握手后,客户端才能知道客户端和服务器端的发送接收能力都正常,服务器端也才能知道客户端和服务器端的发送接收能力都正常。如果只进行两次握手,服务器端没有收到客户端的ACK报文,于是服务器端就不知道服务器端的发送能力和客户端的接收能力是否正常。
- TCP的四次挥手是什么?
TCP的四次挥手用来断开服务器和客户端的通信。
初始状态下双方都处于连接建立状态,谁先提出关闭请求则谁为客户端:
- 第一次挥手:客户端的数据传输完毕时,客户端会发送一个FIN报文,报文中会指定一个序列号,此时客户端处于FIN_WAIT_1状态。
- 第二次挥手:服务端收到FIN报文后,会发送ACK报文,其值是客户端的序列号+1,此时服务端处于CLOSE_WAIT状态。客户端收到ACK报文后,处于FIN_WAIT_2状态。
- 第三次挥手:如果服务器端的数据也传输完毕,便向客户端发送FIN报文,并指定一个序列号,此时服务端处于LAST_ACK状态。
- 第四次挥手:客户端收到服务端的FIN报文后,也会发送一个ACK报文作为应答,此时客户端处于TIME_WAIT状态。等待一段时间后,如果服务器端没有再发送FIN报文,表明服务端收到了客户端的ACK报文,则客户端处于CLOSE状态。服务端收到客户端的ACK报文后,也处于CLOSE状态。此时,TCP断开连接。

- TCP的四次挥手中为什么要有一个TIME_WAIT状态?
因为客户端发送的ACK包可能会因为某些网络原因而丢失,所以客户端要等待一个包往返的时间来确保服务器端收到了ACK包,如果在TIME_WAIT时间里客户端没有再次收到服务端的FIN报文,则说明ACK包没有丢失,客户端可以正常关闭。
- TCP和UDP有什么区别?
- TCP是可靠的,UDP是不可靠的,UDP可能会丢包
- TCP需要建立连接,因此速度比UDP要慢
每日学习笔记,写于2020-05-21 星期四