目录
七、如果第三次握手中,如果客户端ACK未发送达到服务器,会怎样
一、http的请求过程
(1)对网址进行DNS域名分析,得到对应的IP地址;
(2)根据这个IP,找到对应的服务器,发起TCP三次握手;
(3)建立TCP连接后发起http请求;
(4)服务器响应在http请求,浏览器得到html代码;
(5)浏览器解析html代码,并请求html代码中资源(js/css);
(6)浏览器对页面进行渲染呈现给用户。
二、http长连接与短链接
短链接:连接--传输数据--关闭连接
长连接:连接--传输数据--保持连接 (connection:keep-alive)
三、https与http的区别
(1)http明文传输,数据未加密;安全性较差;https数据传输过程是加密的,安全性较好;
(2)使用https需要申请证书;
(3)http页面响应速度比https块;主要是因为http使用TCP三次握手建立连接,客户端和服务器端需要交换3个包;而https除了tcp三个包,还需要加上ssL握手的9个包,一共12个包;
(4)https与http端口号不一样:前者是443,后者是80;
四、请解释下Tcp三次握手
注:SYN:同步请求;ACK:请求响应;ack:确认序号;seq:序列号
tcp状态转移解释:
CLOSED | 阻塞或关闭状态,表示主机当前没有正在传输或者建立的链接 |
LISTEN | 监听状态,表示服务器做好准备,等待建立传输链接 |
SYN RECV | 收到第一次的传输请求,还未进行确认 |
SYN SENT | 发送完第一个SYN报文,等待收到确认 |
ESTABLISHED | 链接正常建立之后进入数据传输阶段 |
第一次:C端发送SYN=1的请求报文,此时C端进入SYN SENT状态,等待服务器确认。
第二次:S端收到C端发送的SYN报文(建立链接请求)后,S端必须返回确认号并且同时发送一条SYN报文,此时进入SYN RCVD状态。
第三次:C端收到S端发的ACK+SYN报文,需要返回一个应答ACK的报文,此时该连接会进入半连接状态的队列,当S端收到ACK后,一条完整的全双工TCP链接建立完成,双方进入ESTABLISHED状态。
五、解释一下TCP四次挥手
注:tcp状态解释
FIN WAIT1 | 主动发送第一个FIN报文之后进入该状态 |
FIN WAIT2 | 已经收到第一个FIN的确认信号,等待对方发送关闭请求 |
TIMED WAIT | 完成双向链接关闭,等待分组消失 |
CLOSING | 双方同时关闭请求,等待对方确认时 |
CLOSE WAIT | 收到对方的关闭请求并进行确认进入该状态 |
LAST ACK | 等待最后一次确认关闭的报文 |
第一次:当C端的应用程序结束数据传输,会向S端发送一个带有FIN附加标记的报文段(FIN表示英文finish),此时C端进入FIN_WAIT1状态,C端不能在发送数据到S端。
第二次:S端收到FIN报文会响应一个ACK报文,S端进入CLOSE_WAIT状态。进入此状态后S端把剩余未发送的数据发送到C端,C端收到S端的ACK之后,进入FIN_WAIT2状态。
同时继续接受S端传输的其他数据包。
第三次:S端处理完自己待发送的数据之后,也会发送FIN断开链接的请求,S端进入LAST_ACK状态。
第四次:C端收到S端的断开链接请求后会启动一个定时器,该定时器时长是2MSL(2MSL是报文一个往返的最长时间,假设小于这个时间会发生,ACK丢了,但是还没接收到对方重传的FIN我方就重新发送了ACK。),同时发送最后一次ACK报文。
六、建立连接可以两次握手吗
不可以。那客户端就根本不知道服务器接收到这个数据没有,就会一直等待,另一方面,服务器也在等客户端发送数据,现在两边就都在等待对方,那建立的这条 TCP 通道就白白浪费了。
七、如果第三次握手中,如果客户端ACK未发送达到服务器,会怎样
server端:每隔3S,重发之前的SYN+ACK(默认重发5次,之后会自动关闭连接进入closed状态)
client端:
(1)server进入超时过程中,如果client向服务器发送数据,数据头部为1的,所以服务器收到数据之后会读取ACK number,进入establish状态。
(2)server进入closed状态后,如果client向服务器发送数据,服务器会以RST包应答。
八、TCP与UDP区别
TCP:传输控制协议,是一种面向连接的可靠传输协议,提供可靠的字节流传输服务;
UDP:用户数据报协议,是一种无连接的非可靠的传输协议,当数据段发出之后,发送方是无法得知其是否完整且安全到达了接收方向。