系列文章:
01-计算机网络的体系结构
02-IP网络层
03-TCP和UDP的基本认识
04-TCP三握四挥
05-TCP的重传机制
06-TCP的流量控制,拥塞控制
07-Http的基础知识
08-HTTPS与加密
09-其它
一. websocket
WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。全双工就是指客户端和服务端可以同时进行双向通信,强调同时、双向通信。ping(pong)。
其实TCP本来就支持全双工,只是由于我们常用的HTTP必须是请求-响应模式的,所以Http就没法实现websocket这种。
二. 在浏览器中输入网址后会发生什么
1. DNS域名解析
我们在浏览器输入网址,其实就是要向服务器请求我们想要的页面内容,所有浏览器首先要确认的是域名所对应的服务器在哪里。将域名解析成对应的服务器IP地址这项工作,是由DNS服务器来完成的。
客户端收到你输入的域名地址后,它首先去找dns首先回去检测浏览器缓存,然后是操作系统缓存,然后是host文件,如果有则向其IP地址发送请求,如果没有,再去找DNS服务器。
浏览器客户端向本地DNS服务器发送一个含有域名www.cnblogs.com的DNS查询报文。本地DNS服务器把查询报文转发到根DNS服务器,根DNS服务器注意到其com后缀,于是向本地DNS服务器返回comDNS服务器的IP地址。本地DNS服务器再次向comDNS服务器发送查询请求,comDNS服务器注意到其www.cnblogs.com后缀并用负责该域名的权威DNS服务器的IP地址作为回应。最后,本地DNS服务器将含有www.cnblogs.com的IP地址的响应报文发送给客户端。
2. 建立TCP连接
三次握手
简单点:
客户端:“你好,在家不,有你快递。”
服务端:“在的,送来就行。”
客户端:“好嘞。”
大致流程:
-
客户端想服务器发送建立连接的请求,就会将SYN字段置为1,并随机生成一个随机数seq=x,发送给服务器
客户端进入 SYN_SEND 状态。
-
服务器收到后,就知道客户端想要建立连接,这个时候就会将ACK置为1,ack=x+1,SYN置为1,seq=y。发送给客户端
服务器进入 SYN_RCVD 状态
-
客户端收到后,就知道服务器也可以建立连接,然后就会ACK置为1,ack=y+1发送给服务器,这样就建立好连接了。
均进入ESTABLISHED状态。
3. 发送HTTP请求
与服务器建立连接后,就可以发送HTTP请求了,向服务器请求资源。
4. 服务器处理请求
服务器收到客户端的http请求后,就会web服务器处理,web服务器就会解析用户的请求,知道需要调度哪些资源,然后收集并处理这些资源并将结果返回给客户端。
5. 返回响应
客户端就会收到服务器发回来的响应报文,然后解析这个报文,读取里面的信息。
6. 四次挥手,断开连接
- 如果客户端想要关闭连接,那就会给服务器发送一个FIN为1,seq=x的包,告诉服务器自己已经没有数据需要发送了,但是还可以接收数据。
- 服务器收到后,就会给客户端发送一个确认包,确认自己受到了消息,包内容为ACK=1,ack=x+1。表明自己已经收到了消息,但是还没有准备好关闭连接
- 服务器发送完消息后,准备好关闭连接时,就会给客户端发送关闭请求,FIN=1 seq=y
- 客户端收到后,就会发送一个确认包(ACK=1 ack = y+1),然后关闭连接,服务器收到这个消息后,也会关闭连接。