1、在浏览器中输入url,直接输入ip或者输入域名。
2、如果输入的是域名就需要通过DNS解析将域名解析成IP地址,通过IP来确认访问的是哪个服务器。
3、建立TCP请求(即三次握手)。
4、发送http请求。
5、服务器处理请求,并将结果返回给浏览器。
6、最后断开TCP连接(即四次挥手)。
7、浏览器根据返回结果进行处理以及页面渲染。
----------------------
关于TCP与UDP:
TCP 和 UDP 是传输层的两个协议,前者是基于连接的可靠传输协议,后者是无连接的不可靠传输协议,所以前者更适合于一些对数据完整性要求高的场合,后者则适合于那种可以允许数据丢失但对传输速率要求特别高的场景,例如:语音电话,视频等,丢一两个包最多卡顿一下,无伤大雅。
udp无连接,但是有回复,如果没有回复,就不能知道丢包,然后进行丢包重传了。
-----------------
关于TCP协议的三次握手与四次挥手:
TCP的标志位:
SYN:用于建立连接时的同步信号。
ACK:用于对收到的数据进行确认,所确认的数据由确认序列号表示。
FIN:表示后面没有数据需要发送,通常意味着所建立的连接需要关闭了。
(都是置1表示有效)
三次握手:
(A是客户端,B是服务端)
步骤:
1、A机器发出一个数据包并将SYN置1,表示希望建立连接。这个包中的系列号假设是1。
2、B机器收到A机器发过来的数据包后,通过SYN得知这是一个建立连接的请求,于是发送一个响应包并将SYN和ACK标记都置为1。假设这个包中的序列号为y,而确认序列号必须是x+1,表示收到了A发过来的SYN。在TCP中,SYN被当作数据部分的一个字节。
3、A收到B的响应包后需要进行确认,确认包中将ACK置1,并将确认序列号置为y+1,表示收到了来自B的SYN。
为什么是三次握手,不是两次?
防止出现请求超时脏连接。
四次挥手:
TCP是全双工通信,双方都能作为数据的发送方和接收方
步骤:
1、A机器想要关闭连接,则待本方数据发送完后,传递FIN信号给B机器。设这个包中的序列号是u。
2、B机器应答ACK,告诉A可以断开,但是需要等B机器处理完数据,再主动给A发送FIN信号。B的响应包的序列号是v,确认序列号是u+1。
3、这时A机器处于半关闭状态,无法再发送新的数据。B机器做好连接关闭前的准备工作后,发送FIN给A机器,此时B机器也进入半关闭状态。
4、A机器发送针对B机器FIN的ACK,连接释放。
单工、半双工、全双工:
-
单工数据传输只支持数据在一个方向上传输;在同一时间只有一方能接受或发送信息,不能实现双向通信,举例:电视,广播。
-
半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。
3.全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有 独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。
--------------------
关于HTTP协议:
HTTP是什么?
通俗来讲,它就是计算机通过网络进行通信的规则,是一个基于请求与响应,无状态的应用层协议,常基于TCP/IP协议传输数据。目前任何终端之间进行任何一种通信都必须按照HTTP协议进行,否则无法连接。
http协议是应用层的协议。基于TCP的可靠性连接。通俗点说,就是在请求之后,服务器端立即关闭连接、释放资源。这样既保证了资源可用,也吸取了TCP的可靠性的优点。
正因为这点,所以大家通常说http协议是“无状态”的,也就是“服务器不知道你客户端干了啥”,其实很大程度上是基于性能考虑的。以至于后来有了session之类的玩意。
四个基于:
1、请求与响应:客户端发送请求,服务器端响应数据
2、无状态的:协议对于事务处理没有记忆能力,客户端第一次与服务器建立连接发送请求时需要进行一系列的安全认证匹配等,因此增加页面等待时间,当客户端向服务器端发送请求,服务器端响应完毕后,两者断开连接,也不保存连接状态,下一次客户端向同样的服务器发送请求时,由于他们之前已经遗忘了彼此,所以需要重新建立连接。
3、应用层:Http是属于应用层的协议,配合TCP/IP使用。
4、TCP/IP:Http使用TCP作为它的支撑运输协议。HTTP客户机发起一个与服务器的TCP连接,一旦连接建立,浏览器(客户机)和服务器进程就可以通过套接字接口访问TCP。
针对无状态的一些解决策略:
有时需要对用户之前的HTTP通信状态进行保存,比如执行一次登陆操作,在30分钟内所有的请求都不需要再次登陆。于是引入了Cookie技术。
HTTP/1.1想出了持久连接(HTTP keep-alive)方法。其特点是,只要任意一端没有明确提出断开连接,则保持TCP连接状态,在请求首部字段中的Connection: keep-alive即为表明使用了持久连接。
等等还有很多。。。。。。
-----------------------