当前位置:   article > 正文

计算机网络基础知识_快重传和快恢复

快重传和快恢复

计算机网络

目录


 

(1)TCP和UDP的区别

  • TCP是面向连接的协议,提供的是可靠传输,在收发数据前需要通过三次握手建立连接,使用ACK对收发的数据进行正确性检验。而UDP是无连接的协议,不管对方有没有收到或者收到的数据是否正确。
  • TCP提供流量控制和拥塞控制,而UDP没有。
  • TCP对系统资源的要求高于UDP,所以速度也比UDP慢。
  • TCP数据包是没有边界的,会出现粘包的问题,UDP包是独立的,不会出现粘包问题。
  • 所以在应用方面,如果强调数据的完整性和正确性用TCP,当要求性能和速度的时候,使用UDP更加合适。

 

(2) TCP和UDP相关的协议与端口号

  • TCP族的协议有HTTP,HTTPS,SMTP,TelNet,FTP等
  • UDP族的协议有DNS,DHCP等等。

 

(3) TCP怎么保证可靠性?

  • ①TCP采用发送应答机制+序列号,即发送端发送的每个TCP报文段都必须得到接收方的应答后 才认为TCP报文段传输成功。TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。

  • ②TCP还具有超时重传机制,当TCP发出一个报文段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

  • ③ TCP还提供流量控制和拥塞控制,防止过多的数据注入到网路中,缓解压力。

  • 流量控制
    就是让发送方的发送速率不要过快,好让接收方有能力进行接收。利用TCP报文段中的窗口大小字段可以控制发送方的发送窗口不大于接收方的接受窗口进而实现流量控制。
    TCP连接的每一方都有固定大小的缓冲空间,接收端只允发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率。TCP使用的流量控制协议是可变大小的滑动窗口协议。接收方有即时窗口(滑动窗口),随ACK报文发送。

  • 拥塞控制
    防止过多的数据注入网络,造成网络拥塞。
    发送方有拥塞窗口,发送数据前比对接收方发过来的即时窗口,取小
    算法: 慢启动、拥塞避免、快速重传、快速恢复

 

(4) TCP(UDP,IP)等首部的认识(http请求报文构成)

在这里插入图片描述

  • TCP的头部大致包括:源端口,目的端口,序号,确认号,偏移位,标志位,校验和等等
  • UDP的头部则包括:源端口,目的端口,长度,校验和。
  • IP数据包的头部包括:源IP地址,目的IP地址,协议,校验和,总长度等等

 

(5)UDP如何实现可靠传输

  • 因为UDP是无连接的协议,所以在传输层上无法保证可靠传输,要想实现可靠传输,只能从应用层实现。需要实现seq/ack机制,重传机制和窗口确认机制。

  • 要求接收方收到UDP之后回复个确认包,发送方有个机制,收不到确认包就要重新发送,每个包有递增的序号,接收方发现中间丢了包就要发重传请求,当网络太差时候频繁丢包,防止越丢包越重传的恶性循环,要有个发送窗口的限制,发送窗口的大小根据网络传输情况调整。

 

(6)TCP的三次握手与四次挥手的详细介绍(TCP连接建立与断开是热门问题)

在这里插入图片描述

三次握手

  • 第一次握手:首先客户端给服务器发送连接请求报文,在这个报文中,包含了标志位SYN=1,确认位ACK=0,客户端的初始化序列号值seq = 任意值x,发送之后客户端进入SYN-SENT(同步已发送)状态,等待服务器确认,这是第一次握手

  • 第二次握手:服务器收到数据包后,由标志位SYN = 1知道这是客户端请求建立连接,服务器如果确认连接就会发送确认报文,这个报文中标志位SYN和ACK都为 1,确认号ack为 x +1,服务器产生一个自己的初始化序列号值Seq = y 此时服务器进入SYN-RCVD(同步已接受)状态,这是第二次握手

  • 第三次握手:客户端收到服务器发来的确认报文,里面的确认号ack是x +1,这时他知道了服务器收到了消息,也给服务器回一个ACK报文,报文中同样包含了ACK=1,同时呢,还包括了客户端ack = y + 1这样的字段,这样三次握手之后,连接就建立了,客户端进入established(已建立连接)状态

四次挥手断开连接:
在这里插入图片描述

  • TCP断开连接通常是由一方主动,一方被动的,这里我们假设客户端主动,服务端被动

  • 第一次挥手:当客户端没有数据要发送给服务端了,他会给服务端发送一个FIN报文,告诉服务端:“我已经没有数据要发给你了,但是你还可以继续给我发数据,不过你得告诉我你收到我的关闭信息了”,这是第一次挥手,挥手之后客户端进入FIN_WAIT_1的第一阶段

  • 第二次挥手:当服务端收到FIN报文后,给客户端返回一个ACK信息,告诉客户端:“我收到你的FIN消息了,但是你等我发完”,并且呢ack = seq + 1,这是第二次挥手,挥手之后呢服务端进入CLOSE_WAIT阶段,而客户端收到之后进入FIN_WAIT_2第二阶段

  • 第三次挥手:当服务端发完所有数据时,它会给客户端发送一个FIN报文,告诉客户端说“我传完数据了,现在要关闭连接了”,然后呢服务端变成LAST_ACK状态,等着客户端最后的ACK确认,这是第三次挥手

  • 第四次挥手:当客户端收到这个FIN报文时,会给服务端发ACK信息,但是它不相信网络,怕服务端收不到信息,它会进入TIME_WAIT状态,万一服务端没收到ACK消息它可以重传,而当服务端收到这个ACK信息后,就进入CLOSED状态,正式关闭了tcp连接。而客户端等待了2倍的最大段生存期(2MSL)后还没收到服务端发送的请求的话,客户端也进入CLOSED状态。这是第四次挥手,至此tcp连接全部断开。

 

(7) 为什么使用三次握手,两次握手可不可以?

第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开多个无效连接。

  • 如果不进行三次握手,而是两次,那么在服务器收到连接请求并给予响应后,服务器就会打开连接,服务器的响应可能并没有即时送达客户端,导致客户端重发连接请求,最终服务器端收到两个连接。假设每次发送的数据一直在丢失,客户端一直SYN,服务器就会产生多个无效连接,占用资源,这个时候服务器可能会挂掉。这个现象就是我们听过的“DDos洪水攻击”。
  • 如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的确认,不会再次打开连接。

 

(8) TIME_WAIT的意义(客户端为什么要等待2*MSL)

虽然按道理,四个报文都发送完毕,可以直接进入CLOSE状态了,但是我们必须假想网络是不可靠的,最后一个ACK信息可能会丢失。站在服务器的角度看来,我已经发送了FIN报文请求断开连接,客户端却没有给我回应,应该是我发送的报文它没有收到,于是服务器又会重新发送一次,所以TIME_WAIT状态就是用来重发可能丢失的ACK报文。

 

(9)建立TCP服务器的各个系统调用

建立TCP服务器连接的过程中主要通过以下系统调用序列来获取某些函数,这些系统调用主要包括:

  • socket()创建套接字
  • bind()绑定本机端口
  • listen()监听端口
  • accept()接受连接
  • send()数据发送
  • recv()数据接收

 

(10)接上 socket网络编程有哪些系统调用?其中close是一次就能直接关闭的吗,半关闭状态是怎么产生的?

socket()    创建套接字   
bind()      绑定本机端口    
connect()   建立连接     (TCP三次握手在调用这个函数时进行)
listen()    监听端口
accept()    接受连接
recv(), read()  数据接收
send(), write() 数据发送
close(), shutdown() 关闭套接字
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

使用close()时,只有当套接字的引用计数为0的时候才会终止连接,而用shutdown()就可以直接关闭连接

 

(11) 在浏览器中输入URL后执行的全部过程(一次完整的HTTP请求过程,如www.baidu.com)

  • 首先客户端使用DNS协议进行域名解析,将URL解析为对应的IP地址;
  • 然后客户端与服务器通过三次握手建立TCP连接;
  • 接着客户端向服务器发送http连接请求;
  • 服务器对发来的http请求进行响应与处理;
  • 客户端(浏览器)接收到http响应,浏览器拿到HTML代码并解析出其中的资源(如js ,css ,图片),浏览器再对页面进行渲染展示给用户。

 

(12) 网络层分片的原因

因为在链路层中帧的大小通常都有限制,比如在以太网中帧的最大大小(MTU)就是1500字节。如果IP数据包加上头部后大小超过1500字节,就需要分片。

 

(15) tcp滑动窗口协议

  • TCP的滑动窗口用来控制接收方和发送方的发送速率的,避免拥塞的发生。
  • 滑动窗口其实就是接收端的缓冲区大小,用来告诉发送方对它发送的数据有多大的缓冲空间。
  • 在接收方的滑动窗口已知的情况下,当接收方确认了连续的数据序列之后,发送方的滑动窗口向后滑动,准备发送下一个数据序列。

接收方会在每个ACK数据包中附带自己当前的接受窗口(滑动窗口)的大小,方便发送方进行控制。

 

(16) TCP拥塞控制,算法名字?(极其重要)

  • 拥塞控制是为了防止过多的数据注入到网络中,造成网络拥塞。发送端拥有一个拥塞窗口,在发送数据前会对比接收方的滑动窗口大小,取较小值。

  • 拥塞控制有四种算法,慢启动、拥塞避免,快速重传和快速恢复

  • (1)慢启动:主机先以比较小的拥塞窗口进行数据发送,然后前期每次翻倍,由小到大逐渐增加拥塞窗口的大小,而这个大小最终是指数增长的。为了防止拥塞窗口cwnd增长过快,还要设置一个慢启动阈值,当拥塞窗口的大小超过慢启动阈值时(cwnd > ssthresh 时),停止使用慢启动算法而改用拥塞避免算法。

  • (2)拥塞避免:算法的思路是让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。

  • (3)快速重传+快速恢复:当发送端连续收到三个重复的ack时,表示该数据段已经丢失,需要重发。进入快速恢复状态,此时慢启动阈值变为原来一半,拥塞窗口cwnd变为ssth+3,随后再根据拥塞窗口大小+1 +1的发。

普通的恢复方式:当超过设定的时间没有收到某个报文段的ack时,表示网络拥塞。此时,慢启动阈值ssth变为原来一半,拥塞窗口大小直接cwnd=1,进入慢启动阶段。

 

(17) TCP/IP的粘包与避免介绍一下

因为TCP是无边界的流传输,所以接收端可能一次接受多个包。粘包就是若干个数据包到达接收方的时候粘成了一个包。

导致TCP粘包的原因有三方面:

  • 发送端等待缓冲区满才进行发送
  • 接收方来不及对接受的数据进行处理
  • TCP协议在发送较小的数据包的时候,会将几个包合成一个包后发送

避免粘包的措施:

  • 设置固定长度的报文或者设置报文头部指示报文的长度。

 

(18) 说一下TCP的封包和拆包

因为TCP是无边界的流传输,需要进行封包和拆包,来确保收发的数据不粘连。

  • 封包:封包就是在发送数据时为TCP数据包加上一个固定大小的包头,里面包含该数据包的总长度。将数据报分为包头和包体两个部分。
  • 拆包:接收方在接收到报文后提取包头中的长度信息进行截取。

 

(19) http协议与TCP的区别与联系

联系:

  • HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范
  • Http协议是建立在TCP协议基础之上的,当浏览器需要从服务器获取网页数据的时候,会发出一次Http请求。Http会通过TCP建立起一个到服务器的连接通道,当本次请求需要的数据传输完毕后,Http会立即将TCP连接断开。

区别:

  • HTTP和TCP位于不同的网络分层。TCP是传输层的协议,定义的是数据传输和连接的规范,而HTTP是应用层的,定义的是数据的内容的规范。
  • 建立一个TCP请求需要进行三次握手,而由于http是建立在tcp连接之上的,建立一个http请求通常包含请求和响应两个步骤。

 

(20) http的请求方法有哪些?get和post的区别。

HTTP的请求方法包括GET,POST,PUT,DELETE四种基本方法。(四种方法中只有POST不是操作幂等性的)

get和post的区别:

  • get就是只能存储少部分信息,这些信息都是存储在url中,发送的消息打开比较快,没有缓存
  • post发送的消息会多一点,将发送的消息存在cookie中,也就是缓存,关闭浏览器重启后能再次进入原来的页面

 

(21)一次完整的HTTP请求过程包括哪些内容?

域名解析
发起TCP的3次握手
建立TCP连接后发起http请求
服务器响应http请求,
浏览器得到html代码
浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
浏览器对页面进行渲染呈现给用户。

 

(22)HTTP协议

在这里插入图片描述
什么是超文本

  • 在互联网早期,输入的信息只能保存在本地,无法和其他电脑进行交互。保存的信息通常都以文本即简单字符的形式存在,文本是一种能够被计算机解析的有意义的二进制数据包。而随着互联网的高速发展,两台电脑之间能够进行数据的传输后,人们不满足只能在两台电脑之间传输文字,还想要传输图片、音频、视频,甚至点击文字或图片能够进行超链接的跳转,那么文本的语义就被扩大了,这种语义扩大后的文本就被称为超文本(Hypertext)。

什么是传输

  • 两台计算机之间会形成互联关系进行通信,我们**存储的超文本会被解析成为二进制数据包,由传输载体(**例如同轴电缆,电话线,光缆)负责把二进制数据包由计算机终端传输到另一个终端的过程称为传输(transfer)。

什么是协议

那么网络协议是什么呢?

网络协议就是网络中(包括互联网)传递、管理信息的一些规范。如同人与人之间相互交流是需要遵循一定的规矩一样,计算机之间的相互通信需要共同遵守一定的规则,这些规则就称为网络协议。

没有网络协议的互联网是混乱的,就和人类社会一样,人不能想怎么样就怎么样,你的行为约束是受到法律的约束的;那么互联网中的端系统也不能自己想发什么发什么,也是需要受到通信协议约束的。

那么我们就可以总结一下,什么是 HTTP?可以用下面这个经典的总结回答一下:
HTTP 是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范

 

(23)HTTP协议优缺点

HTTP 请求特征(优点)

  • 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、POST。每种方法规定了客户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快。

  • 灵活:HTTP 允许传输任意类型的数据对象。

  • 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  • 无状态:无状态其实既是优点又是缺点,无状态是指协议对于事务处理没有记忆能力
    因为服务器没有记忆能力,所以就不需要额外的资源来记录状态信息,不仅实现上会简单一些,而且还能减轻服务器的负担。

HTTP 缺点

  • 无状态
    既然服务器没有记忆能力,它就无法支持需要连续多个步骤的事务操作。每次都得问一遍身份信息,不仅麻烦,而且还增加了不必要的数据传输量。由此出现了 Cookie /Session技术。

  • 明文
    HTTP 协议里还有一把优缺点一体的双刃剑,就是明文传输。明文意思就是协议里的报文(准确地说是 header 部分)不使用二进制数据,而是用简单可阅读的文本形式。

    它的优点显而易见,不需要借助任何外部工具,用浏览器、Wireshark抓包后,直接用肉眼就可以很容易地查看或者修改,为开发调试工作带来极大的便利。

    当然缺点也是显而易见的,就是不安全,可以被监听和被窥探。因为无法判断通信双方的身份,不能判断报文是否被更改过。

 

(25)HTTP常见的状态码

  • 200:服务器已成功处理了请求。通常,这表示服务器提供了请求的网页。
  • 301 :(永久移动) 请求的网页已永久移动到新位置。服务器返回此响应(对 GET 或 HEAD 请求的响应)时,会自动将请求者转到新位置。
  • 302:(临时移动) 服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求。
  • 400 :客户端请求有语法错误,不能被服务器所理解。
  • 403 :服务器收到请求,但是拒绝提供服务。
  • 404 :(未找到) 服务器找不到请求的网页。
  • 500:(服务器内部错误) 服务器遇到错误,无法完成请求。

 

(27)HTTPS

HTTP 一般是明文传输,很容易被攻击者窃取重要信息,鉴于此,HTTPS 应运而生。
HTTPS 是以面向安全的超文本传输协议,HTTPS 在 HTTP 的基础上增加了 SSL 层,也就是说 HTTPS = HTTP + SSL。
HTTPS在 HTTP 的基础上通过传输加密和身份认证保证了传输过程的安全性

  • 区别:
    HTTP和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
    HTTP 的连接很简单,是无状态的(无状态的意思是其数据包的发送、传输和接收都是相互独立的)
    HTTP是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的SSL加密传输协议。
    HTTPS协议需要到CA申请证书,一般免费证书较少,因而需要一定费用。
     

(28)IP协议

它主要解决的是通信双方寻址的问题。寻址与路由以及 IP 分包与组包(分片)
传输层进行握手和传输数据的时候,如何找到对方的就得靠网络层, IP协议的作用就是规划数据可以走哪条路到达服务器,并把数据给服务器,规划的前提是知道服务器的IP地址和服务器的MAC地址,IP地址是指上网设备在网络世界中被分配到的地址,MAC地址是指上网设备(手机、电脑)中网卡的编号。
IP地址已经在应用层通过DNS服务解析出来了,现在就差服务器的MAC地址,有了服务器的IP地址和MAC地址以后,就可以查找到服务器了。可以采用ARP地址解析协议,将IP地址转为对应的MAC地址。

 

(29)Cookies和Session区别是什么?

Cookie和Session都是为了解决无状态问题进而进行的会话跟踪(跟踪浏览器用户身份)
1.存储的位置不同:

  • cookie存放在客户端(浏览器),session(验证用户身份)存放在服务端。

2.安全性不同:

  • Cookie不安全,别人可以分析你存放在本地的Cookie然后进行欺骗。考虑到安全性最好使用Session

3.存储的数据大不同 :

  • 单个Cookie保存的数据大小不超过4K, Session只受当前内存的限制

4.生命周期

  • Cookie的生命周期是累计的,Session生命周期是间隔的

 

(30)Cookies和Session的运作原理

  • cookie是一小段存储在浏览器端的数据,发送网络请求的时候,cookie会在请求头里,一起发送给服务器端
  • session对象是存储在服务器端,主要存储用户会话数据,Session ID需要存储在浏览器端,通常存储在cookie里。浏览器在发送接口请求的时候需要带着Session ID,这样服务器端就可以根据这个Session ID找出当前请求用户是谁了。
  • Session一般都会配置一个过期时间,比如30分钟,Session过期之后用户就需要重新登录了。

举例:
每个人都有一个身份证,去政部门办事的时候都需要出示身份证,工作人员会对你的身份进行核验,确认真伪后才会给你办理业务,这个过程和session验证身份的过程很像。

你: 浏览器的cookie
身份证: Session ID
政府部门:后台接口
待办业务:接口请求
进行身份证核验:比对Session ID

 

(31)以太网的帧格式

在这里插入图片描述

 

(32)因特网的协议栈层次(网络分层)

在这里插入图片描述
应用层()

应用层是网络应用程序和网络协议存放的分层,专门针对某些应用提供服务,应用层包括许多协议,
如 HTTP,电子邮件传送协议 SMTP、端系统文件上传协议 FTP、域名解析的 DNS 。
一个端系统应用程序与另外一个端系统应用程序交换信息分组,应用层的信息分组称为 报文(message)。

传输层(报文段)
传输层的任务是负责为两个主机中进程之间的通信提供通用的数据传输服务,在这一层主要有两种传输协议 TCP和 UDP,利用这两者中的任何一个都能够传输报文,不过这两种协议有巨大的不同。

网络层(数据报:分组:包)
因特网的网络层负责将数据报(datagram) 从一台主机移动到另一台主机。网络层一个非常重要的协议是 IP 协议,所有具有网络层的因特网组件都必须运行 IP 协议
网络层的协议:IP协议,ARP(地址解析协议:IP地址转MAC地址),ICMP(网际控制报文协议:可以报告IP数据包传递时发生的错误,确认ip包成功到达目标地址),路由协议(IGP,EGP),NAT

链路层 (数据帧)
现在我们有应用程序通信的协议,有了给应用程序提供运输的协议,还有了用于约定发送位置的 IP 协议,那么如何才能真正的发送数据呢?为了将分组从一个节点(主机或路由器)运输到另一个节点,网络层必须依靠链路层提供服务。
将源计算机网络层传来的数据可靠的传输到相邻节点的目标计算机的网络层
我们把链路层的分组称为 帧(frame)
PPP,IEEE802.3 ,以太网等

物理层(比特流)
虽然链路层的作用是将帧从一个端系统运输到另一个端系统,而物理层的作用是将帧中的一个个 比特 从一个节点运输到另一个节点
例如,以太网有很多物理层协议:双绞铜线、同轴电缆、光纤等等。

 

(33)什么是SQL注入?避免注入的方法?

  • SQL 注入就是在用户输入的字符串中加入 SQL 语句,如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据。
  • 避免注入方法:限制数库权限,给用户提供仅仅能够满足其工作的最低权限。对进入数据库的特殊字符(’”\尖括号&*;等)转义处理。提供参数化查询接口,不要直接使用原生SQL。

 

(34)负载均衡算法

多台服务器以对称的方式组成一个服务器集合,每台服务器都具有等价的地位,能互相分担负载。

  • 轮询法:将请求按照顺序轮流的分配到服务器上。大锅饭,不能发挥某些高性能服务器的优势。
  • 随机法:随机获取一台,和轮询类似。
  • 哈希法:通过ip地址哈希化来确定要选择的服务器编号。好处是,每次客户端访问的服务器都是同一个服务器,能很好地利用session或者cookie。
  • 加权轮询:根据服务器性能不同加权。

 ;

(35)介绍一下ping的过程,分别用到了哪些协议

ping是使用ICMP协议来进行工作的。 ICMP:网络控制报文协议

  • 首先,ping命令会构建一个ICMP请求数据包,然后由ICMP协议将这个数据包连同目的IP地址源IP地址一起交给IP协议。
  • 然后IP协议就会构建一个IP数据报,并且在映射表中查找目的IP对应的mac地址,将其交给数据链路层。
  • 然后数据链路层就会构建一个数据帧,附上源mac地址和目的mac地址发送出去。

目的主机接收到数据帧后,就会检查包上的mac地址与本机mac是否相符,如果相符,就接收并把其中的信息提取出来交给IP协议,IP协议就会将其中的信息提取出来交给ICMP协议。然后构建一个ICMP应答包,用相同的过程发送回去。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/408284
推荐阅读
相关标签
  

闽ICP备14008679号