计算机网络——知识总结

五层协议:

  • OSI为7层协议、TCP/IP为4层协议、融合理解为5层协议
    1. 应用层:主要任务是通过「一台主机的应用进程之间」的交互来完成特定网络应用。 (应用层数据交换单元为报文)(HTTP、FTP、DNS)
    2. 传输层:主要任务就是负责向「两台主机进程之间,Client、Server」的通信提供通用的数据传输服务(分用和复用)(TCP、UDP)
      • 传输控制协议 TCP(Transmission Control Protocol),提供面向连接的,可靠的数据传输服务(保证数据传输的可靠性)
      • 用户数据协议 UDP(User Datagram Protocol),提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)
    3. 网络层:主要任务就是在「不同网络」中选择合适的「网间路由」和「交换结点」, 确保数据及时传送(IP)
    4. 数据链路层:主要任务是实现「两台主机之间」的数据传输,在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报文组装成帧,以「帧」的方式传递
    5. 物理层:主要任务是实现「相邻计算机节点之间」比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异

TCP三次握手:

在这里插入图片描述

  • 为什么要三次握手:三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的
    1. 客户端–发送带有 SYN(syn = x) 标志的数据包–服务端 (一次握手)
    2. 服务端–发送带有 SYN(syn = y)ACK(ack = x + 1) 标志的数据包–客户端 (二次握手)
    3. 客户端–发送带有带有 ACK(ack = y + 1) 标志的数据包–服务端 (三次握手)
  • 为什么要传回 SYN:服务端传回客户端所发送的 SYN 是为了告诉客户端,我接收到的信息确实就是指定的客户端所发送的信号了
  • 传了 SYN,为啥还要传 ACK:双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证

TCP四次挥手:

在这里插入图片描述

  • 为什么要四次挥手:任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。由于 TCP 连接是全双工的,因此每个方向都必须单独进行关闭
    1. 客户端-发送一个 FIN(fin = x),用来关闭客户端到服务器的数据传送
    2. 服务器-收到这个 FIN,它发回一个 ACK(ack = x + 1),确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
    3. 服务器-关闭与客户端的连接,发送一个 FIN(fin = y)给客户端
    4. 客户端-发回 ACK(ack = y + 1) 报文确认,并将确认序号设置为收到序号加1
  • MSL是什么,为什么TIME_WAIT要等待2MSL?
    • MSL:报文的最大生命周期
    • 等待2MSL的意义:
      1. 保证最后一次握手 ACK 报文能到被动关闭方,到不了还能进行「超时重传」
      2. 在2MSL后,这次连接的所有报文都会消失,不会影响下一次连接(以防因为网络拥堵,前一个 ACK没有按时到达,而又重传了新的ACK)
      3. 如果重传的FIN包或者ACK丢失,也不影响,最后会直接关闭当前连接

为什么建立协议是三次,而关闭连接是四次:

  • 建立协议:这是因为服务端的 LISTEN 状态下的 SOCKET 当收到 SYN 报文的建连请求后,它可以把 ACK 和 SYN(ACK 起应答作用,而 SYN 起同步作用)放在一个报文里来发送
  • 关闭连接:当收到对方的 FIN 报文通知时,它仅仅表示对方没有数据发送给你了,但是你还可以给对方发送数据,也有这么种可能,你还有一些数据在传给对方的途中,所以你不能立马关闭连接,也即你可能还需要把在传输途中的数据给对方之后,又或者,你还有一些数据需要传输给对方后,(再关闭连接)再发送FIN 报文给对方来表示你同意现在可以关闭连接了,所以它这里的 ACK 报文和 FIN 报文多数情况下都是分开发送的

TCP和UDP的区别(都是运输层的协议):

  • TCP:
    • 提供「面向连接」的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接
    • TCP面向字节流传输
    • TCP 不提供广播或多播服务。由于 TCP 要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、滑动窗口、重传、 拥塞控制机制,在数据传完后,还会通过四次挥手断开连接用来节约系统资源)
    • TCP一般用于「文件传输、发送和接收邮件、远程登录」等场景
  • UDP:
    • 提供「面向报文」的服务。在传送数据之前不需要先建立连接
    • UDP面向报文传输
    • 远地主机在收到 UDP 报文后,不需要给出任何确认
    • UDP提供广播或多播服务,虽然 UDP 不提供可靠交付,但在某些情况下 UDP 确是一种最有效的工作方式(一般用于即时通信)
    • UDP一般用于「QQ 语音、 QQ 视频 、直播」等场景

TCP如何保证可靠传输:

  • 确认应答与序列号:确认是否是某客户端发来的信息,确认应答(ACK),序列号(seq)

  • 超时重传:发送方发送完数据后启动一个计时器,等待一个时间,如果计时器结束前没有接收到ACK报文的确认,那么对刚刚的数据进行重新发送

  • 连接管理:三次握手、四次挥手

  • 流量控制:TCP协议的报头信息中,有一个可变的「滑动窗口」决定了发送端的发送速度,发送方根据接收方返回ACK报文中的滑动窗口值决定自己发送数据的速度,滑动窗口实现了流量控制,流量控制是为了控制「发送方」发送的速度,保证「接收方」来得及接收

  • 拥塞控制:当网络拥塞时,减少发送数据的速度

    • 慢开始:不一开始就发送大量的数据,先探测一下网络的拥塞程度,由小到大逐渐增加「滑动窗口」的大小
    • 拥塞避免:拥塞避免算法让「滑动窗口」缓慢的增加,每经过一个「往返时间RTT」就把发送方的「滑动窗口」值+1,拥塞窗口值会线性缓慢增长
    • 快重传与快恢复:发送方只要一连收到「三个重复确认」就应当「立即重传」对方尚未收到的报文段,而不是再等一个超时重传「计时器」的周期
  • 超时重传

  • 连接管理

  • 流量控制

  • 拥塞控制

浏览器中输入URL发生的事情(一次完整的HTTP请求是怎样的):

  1. 域名解析:使用DNS域名解析,将域名解析为IP地址
  2. 发起TCP三次握手:建立客户端与服务端之间的TCP连接
  3. 建立连接后向服务端发起HTTP请求
  4. 服务器收到HTTP请求并开始处理
  5. 服务器向客户端返回一个HTML响应
  6. 浏览器对HTML响应进行解码,渲染,显示
  7. 服务器关闭TCP连接

HTTP状态码:

  • 1XX(信息状态码):接收的请求正在处理
  • 2XX(成功状态码):请求正常处理完毕
    • 200 OK:表示从客户端发送给服务器的请求被正常处理并返回
    • 204 No Content:表示客户端发送给服务端的请求被成功处理,但在返回的HTTP响应报文中不含实体的主体部分(没有资源可以返回)
    • 206 Patial Content:表示客户端进行了范围请求,并且服务器成功执行了这部分的GET请求,响应报文中包含由Content-Range指定范围的实体内容
  • 3XX(重定向状态码):需要进行附加操作完成请求
    • 301 Moved Permanently:永久性重定向,表示请求的资源被分配到了别的URL,之后应使用更改后的URL
    • 302 Found:临时性重定向,表示请求的资源被分配了新的URL,希望本次访问使用新的URL。301与302的区别:前者是永久移动,后者是临时移动
  • 4XX(客户端错误状态码):服务器无法处理请求
    • 400 Bad Request:表示请求报文中存在语法错误
    • 401 Unauthorized:未经许可,需要通过HTTP认证
    • 403 Forbidden:服务器拒绝该次访问(访问权限出现问题)
    • 404 Not Found:表示服务器上无法找到请求的资源
  • 5XX(服务端错误状态码):服务器处理请求出错
    • 500 Inter Server Error:表示服务器在执行请求时发生了错误
    • 503 Server Unavailable:表示服务器暂时处于超负载或者停机正在维护

HTTP长连接和短连接:

  • HTTP协议的⻓连接和短连接,实质上是TCP协议的⻓连接和短连接
    • 在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web⻚中包含有其 他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览 器就会重新建立一个HTTP会话
    • 而从HTTP/1.1起,默认使用⻓连接,当一个网⻚打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep - Alive不会永久保持连接,它有一个保持时间

HTTP是无状态的怎样保存用户状态:

  • HTTP 协议自身不对请求和响应之间的通信状态进行保存
    • Session:保留在服务端,它的主要作用就是通过服务端记录用户的状态,一般情况下,服务器会在一定时间内保存这个 Session,过了时间限制,就会销毁这个Session(Session 机制的存在就是为了解决这个问题,Session 的主要作用就是通过服务端记录用户的状态。典型的场景是购物⻋,当你要添加 商品到购物⻋的时候,系统不知道是哪个用户操作的,因为 HTTP 协议是无状态的。服务端给特定的用户创建特定的 Session 之后就可以标识这个用户并且跟踪这个用户了)
    • Cookie:保留在客户端,在服务端保存 Session 的方法很多,最常用的就是内存和数据库(比如是使用内存数据库redis保存)。大部分情况下都是通过在 Cookie 中附加一个 Session ID 来方式来实现对Session跟踪

Session和Cookie的异同:

  • Cookie 和 Session都是用来跟踪浏览器用户身份的会话方式
    • Cookie 一般用来保存用户信息(自动登录)、Cookie存储在客户端
  • Session 的主要作用就是通过服务端记录用户的状态 (根据Session追踪到是哪个用户的操作)、Session存储在服务端

HTTP和HTTPS区别:

  • 端口:HTTP(80)、HTTPS(443)
  • HTTP协议运行在TCP之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份
  • HTTPS协议是运行在SSL/TLS之上的HTTP协议,SSL/TLS 运行在 TCP之上
  • HTTPS所有传输的内容都经过加密,加密采用对称加密,但对称加密的密钥用服务器方的SSL证书进行了非对称加密
  • HTTP 安全性没有 HTTPS高,但是 HTTPS 比HTTP耗费更多服务器资源

对称加密和非对称加密区别:

  • 对称加密技术: 使用一个公钥在互联网中进行传递,客户端和服务端都持有公钥,一方将信息使用公钥加密 一方通过公钥进行解密。 但是如果在网络传输过程中,公钥被黑客截取,公钥如果泄漏可能会被黑客攻击
  • 非对称加密技术:使用公钥和私钥,服务端发送信息时候使用公钥进行加密,私钥只有客户端持有,且信息虽然通过公钥进行加密,但是只有持有私钥的客户端可以进行信息的解码,所以说即使公钥在网络传输中被截取也没关系

HTTP协议包括哪些请求:

  • GET:对服务器资源的简单请求
  • POST:用于发送包含用户提交数据的请求
  • HEAD:类似于GET请求,不过返回的响应中没有具体内容,用于获取报头
  • PUT:将请求的主体部分存储在服务器上
  • DELETE:发出一个删除指定文档的请求
  • TRACE:发送一个副本,以跟踪其处理进程
  • OPTIONS:返回所有可用的方法,检查服务器支持哪些方法

HTTP协议报文:

  • 请求报文:
    • 请求行:
      • GET /index.html HTTP/1.1
      • 请求方法、URL字段、HTTP协议版本
    • 请求头:
      • User-Agent:产生请求的浏览器类型
      • Accept:客户端可识别的内容类型列表
      • Host:主机地址
    • 请求数据:
      • POST方法中,会把数据以K-V形式发送请求
    • 空行:
      • 发送回车符和换行符
  • 响应报文:
    • 状态行:1XX/2XX/3XX/4XX/5XX
    • 消息报头
    • 响应正文

HTTP中GET和POST的区别:

  • GET用于信息获取,而且应该是安全和幂等的
  • POST表示可能修改服务器上的资源
  • GET请求的数据会附在URL后面,而POST请求的数据放在HTTP包体内
  • POST比GET更安全

简述ARP协议:

  • ARP协议是根据IP地址获取MAC物理地址的一个TCP/IP协议
  • 主机发送信息时将包含「目标IP地址」的ARP请求广播到「局域网络」上的所有主机,并接收返回消息,以此确定目标的「MAC物理地址」收到返回消息后将该「IP地址」和「MAC物理地址」存入本机「ARP缓存」中并保留一定时间,下次请求时直接查询ARP缓存以节约资源

端口及对应服务:

  • 21:FTP文件传输协议
  • 22:SSH
  • 23:Telnet远程登录服务
  • 25:SMTP邮件传输协议
  • 53:DNS域名解析
  • 80:HTTP
  • 110:POP3邮件协议
  • 443:HTTPS
  • 1080:Sockets
  • 3306:MySQL

DNS寻址过程:

  • DNS作用:将域名解析为IP地址
  • 递归查询:主机向本地DNS服务器的查询
  • 迭代查询:本地DNS服务器向根域名服务器的查询
    • 具体步骤:
      1. 主机发出查询请求,本地DNS服务器就查看高速缓存,若高速缓存中存放着上次查询结果,则直接返还给用户
      2. 本地DNS服务器高速缓存中没有找到的话,就向根DNS服务器发送查询请求
      3. 根DNS服务器告诉本地DNS服务器,一级(也叫顶级)DNS服务器的IP地址
      4. 本地DNS向一级DNS服务器发送查询请
      5. 一级DNS服务器告诉本地DNS服务器,权限DNS服务器的IP地址
      6. 本地DNS向权限DNS服务器发送查询请求
      7. 权限DNS服务器告诉本地DNS服务器,所查询主机的IP地址
      8. 本地DNS服务器最后把查询结果返还给主机

常考协议:

  • ICMP协议(Internet Control Message Protocol 网际控制报文协议)是网络层协议
    • 作用:提供主机或者路由器差错报告和异常情况报告
    • 我们经常使用的ping命令就是一种icmp报文,它用来探测两台主机之间的连通性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值