计算机网络知识_每日完善中

计算机网络面试相关


计算机网络


浏览器输入URL到返回页面的全过程

  • 当输入url网址时,浏览器作为客户端首先会先请求DNS域名服务器,通过DNS服务器得到url网址所对应的IP地址和域名(应用层)
  • 浏览器拿到解析后的IP地址建立TCP连接(传输层)
  • 基于TCP连接,浏览器向服务器发送HTTP请求报文(应用层、传输层、网络层、数据链路层)
  • 服务端收到HTTP请求后,开始处理请求报文(数据链路层、网络层、传输层、应用层)
  • 服务器逐步拆除非数据信息后,得到消息数据,处理后服务器返回响应消息包
  • 浏览器接收到响应消息包后进行浏览器的布局渲染
  • 客户端和服务器释放TCP连接

更新版本

  • 浏览器解析URL:首先浏览器对URL网址进行解析,从而生成发送给Web服务器的请求消息
  • 通过浏览器解析URL并生成消息后,需要委托操作系统将消息发送给Web服务器,但发送消息之前需要查询服务器域名对应的IP地址,该查询操作是通过DNS域名服务器进行获取得到:浏览器首先发送DNS请求,通过DNS服务器得到URL对于的IP地址
  • 通过DNS得到IP地址后,HTTP的传输工作交给操作系统中的协议栈;浏览器通过调用Socket库,来委托协议栈工作,通过TCP实现HTTP消息的可靠传输,最终通过三次握手建立TCP连接
  • 建立连接后,TCP报文数据部分就存放HTTP头部 + 数据,组装成了TCP报文
  • 接下来委托IP模块将数据封装成网络包发给通信对象,附加了IP头部的数据报进行下一步操作,实现了远程定位
  • 接下来网络包还需要在IP头部前面加上MAC头部,实现两点传输;MAC头部包含了接收方和发送方的MAC地址信息;接收方的MAC地址由ARP地址解析协议通过广播或者ARP缓存获取
  • 然后通过网卡、交换机、路由器将包发送给服务器
  • 数据包到达服务器后,服务器会依次进行数据包的拆分,MAC头部、IP头部、TCP头部后得到请求消息,然后将响应消息进行封装,并附加上TCP、IP、MAC头部,发送数据包给浏览器
  • 浏览器收到服务器发送的消息后,依次拆包得到响应消息,并由浏览器对此进行渲染,显示对应的信息;显示完毕后,释放TCP连接

七层、TCP/IP五层、四层

七层:应用层、表示层、会话层、传输层、网络层、数据链路层、网络层
TCP/IP五层:应用层、传输层、网络层、数据链路层、网络层
四层:应用层、传输层、网际互联层、网络接口层


TCP三次握手

  • 第一次握手,处于close状态的客户端主动发起连接请求,发送SYN报文后客户端处于SYN_SENT状态;该报文不包含应用层数据;
  • 第二次握手,一段时间后,处于listen状态的服务端收到SYN报文后,回复SYN+ACK 报文表示服务端收到了客户端发送过来的SYN报文;该报文不包含应用层数据;之后服务端处于SYN_RECV状态;
  • 第三次握手,客户端接收到服务器发送的SYN+ACK报文后,再次向服务端发送ACK报文,之后处于established状态,TCP连接建立成功;一段时间后服务端收到该ACK报文后从SYN_RECV状态改为establisthed状态;此处过程是可以携带应用层数据的

TCP四次挥手

  • 第一次挥手:处于established状态的客户端主动发起释放连接请求,客户端发生FIN报文,之后客户端处于FIN_Wait1状态;
  • 第二次挥手:服务端收到客户端发送的FIN报文后,发送ACK报文,表明服务端已经收到客户端需要释放连接的请求,从estblished状态转成close_wait状态;并等待一段时间处理还未处理的数据并发送给客户端;
  • 第三次挥手:服务端处理完待发送数据后,发送FIN报文给客户端,从close_wait状态转成last_ack状态;客户端在一段时间后收到服务端发送ACK报文后,从fin_wait1状态转为fin_wait2状态;
  • 第四次挥手:客户端收到服务端发送的FIN报文后,回复ACK报文段,之后从fin_wait2状态转为time_wait状态,该状态主要是为了防止接收到历史连接的数据导致异常错误以及保证服务端能正常释放连接操作

TCP和UDP的区别

是否面向连接、传输方式、可靠的、所需资源、传输效率、应用场景、首部地址

  • TCP是面向连接的,传输数据之前需要先建立连接,只能一对一进行通信;UDP是无连接的,无需建立连接就可以进行数据传输,一对多、多对多
  • TCP是基于字节流的,流式传输,没有边界,但可以保证数据的有序性和可靠性;UDP是基于数据报文段的,保留数据边界
  • TCP有握手和挥手过程,所需资源多,传输效率慢;UDP所需资源少,传输效率高
  • TCP是可靠性交付数据的,数据可以无差错、不丢失、不重复、按需到达;UDP是尽最大努力交付,不保证数据的可靠性
  • TCP首部长度为20字节~60字节;UDP首部字节长度为8个字节
  • TCP常用于需要保证数据可靠性的场景,如FTP文件传输、HTTP/HTTPS;UDP常用于DNS、SNMP、视频音频、广播

HTTPS和HTTP的区别

关键词:加密、端口、CA、响应速度

  • HTTP是超文本传输协议,数据是采用明文传输,存在着安全风险。HTTPS则解决了HTTP不安全的问题,在TCP和HTTP网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输
  • HTTP采用的80端口,HTTPS采用的是443端口
  • HTTPS协议需要想CA证书权威机构申请数字证书,来保证服务器身份是可信的
  • HTTP通过TCP三次挥手建立连接后就看进行数据传输,但HTTPS建立了TCP连接后还需要进行SSL/TLS的握手过程,才可以进行加密传输。

close_wait状态和time_wait状态的意义

close_wait状态意义:

  • close_wait状态处在开始于第二次挥手时,由服务端回复ACK报文给客户端,告知客户端已经收到了FIN报文,并准备释放连接操作;但此时,由于存在着一种情况,就是服务端还存在着一些未处理好数据并且需要发送给客户端,如果将close_wait状态取消并直接释放连接的话,就会导致上述结果的发生,因此不能立即释放连接,主要是为了保证服务器在关闭连接之前将之前待发送的数据传输完

time_wait状态的意义:

防止历史连接的数据导致不可预知的错误;保证被动关闭的一方能正常关闭

  • 防止接收到历史连接的数据
    该状态开始于第四次挥手,由客户端发送ACK报文后由FIN_wait状态改为time_wait状态;如果取消该状态,即客户端立即释放连接,那么假设该端口没有被释放的情况下,基于该端口重新建立了新连接,继续沿用旧的四元组,如果接收到了历史连接的延迟数据,延迟数据会导致新连接的数据之间出现数据错乱的异常结果发生
  • 保证被动关闭的一方能正常关闭
    假设第四次挥手时客户端发送的ACK报文丢失,服务端由于一段时间内没有收到ACK报文,就会触发服务端的超时重传机制,重发FIN报文;假设没有该状态,客户端就会立即释放连接,当客户端收到服务端重发的FIN报文后,会回复RST报文,使得服务端认为是有错误发生,然而实际上这是一个正常的释放连接的过程

TCP的keep_alive和HTTP的keep_alive有什么不同

http 应用层 用户态 建立tcp 请求资源 响应资源 释放连接 短连接 请求包头的connection字段 1.1默认开启 减少开销,HTTP流水线技术提供保障 服务器按照顺序响应 http长连接的超时时间 keepalive_timeout参数,定时器 触发回调函数释放连接
tcp 传输层 内核态 TCP保活机制、
TCP的keep_alive:

  • TCP的keep_alive也称为TCP的保活机制,该功能是由内核实现的。假设已经建立一个TCP连接,但可能会出现一段时间内没有数据的传输,但此时该连接仍然维持着,占有着系统资源。为了有效查析该连接是是否有效还是确实没有数据的传输,内核为了确保该连接是否还有效,就会发送一个TCP探测报文,来确定对方是否存活;如果在保活定时器时间结束之前收到了回复报文,就会知道对端是存活的, 那么就会重新将保活定时器计时;如果连续几次没有响应,达到保活探测次数后,TCP会报告该TCP连接已经死亡;保活机制的设置是通过socket接口设置so_keepalive选项。
    HTTP的keep_alive机制:
  • HTTP的keep_alive是处于应用层下的,由用户态所维护。HTTP采用的请求-应答模式,进行数据通信前需要先建立TCP连接,建立成功后通过请求资源、响应资源和释放连接结束这一过程;HTTP1.1之前的版本就是基于HTTP短连接的方式,每次请求都需要基于上述过程,存在着明显的创建、释放连接的资源开销问题。为了让多个HTTP请求能复用同一个TCP连接,HTTP1.1后默认开启长连接的方式,也就是使用用一个TCP连接来发送和接收多个HTTP请求应答,避免了创建连接和释放连接的开销,并且为HTTP流水线机制提供了保障,客户端一次性发送多条HTTP请求,但服务器按照顺序响应,此过程存在队头阻塞的问题,所以HTTP长连接可以进行对keepalive_timeout参数进行超时时间的设置。当定时器时间内没有新的请求,就会触发回调函数来释放该连接。


总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值