计网知识概要

1. OSI和TCP/IP各层的结构和功能,都有哪些协议

学习计算机网络时我们一般采用折中的办法,也就是中和OSI和TCP/IP的优点,采用一种只有五层协议的体系结构,这样简洁又能将概念阐述清楚。
图片说明
结合互联网的情况,自上而下地,非常简要的介绍一下的各层的作用。

  • 应用层
    应用层(application-layer)的任务是通过应用进程之间的交互来完成特定的网络应用。应用层协议定义的是应用进程之间的通信和交互的规则。对于不同的网络应用应该需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP,支持电子邮件的SMTP,支持文件传输的FTP。我们把应用层交互的数据单元称为报文
    …………域名系统(Domain Name System缩写DNS,Domain Name被译为域名):是英特网的一项核心的服务,它作为可以将域名和IP相互映射的一个分布式数据库,能够使人更加方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。例如:百度www.baidu.com.
    …………Http协议(超文本传输协议):是互联网上应用最为广泛的一种网络协议,所有的WWW(万维网)文件必须遵循这个规则,设计Http最初的目的是发布和接受HTML页面的方法。

  • 传输层
    传输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用层进程利用该服务传送应用层报文。“通用的”是指并不针对某一特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可以同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可以同时使用下面运输层的服务,分用和复用相反,是运输层把接收到的信息分别交付给上面应用层中地相应进程。
    …………运输层主要使用一下两种协议:
    1.传输控制协议TCP(Transmission Control Protocol)--提供面向连接的,可靠地数据传输服务
    2.用户数据协议UDP(User Datagram Protocol)--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

  • 网络层
    在计算机网络中进行通信的两个计算机之间可能会经过很多个数据链路,也有可能还要经过很多通信子网。网络层的作用就是选择合适的网间路由和交换节点,确保数据能够及时传送。在发送数据时,网络层将运输层产生的报文段和用户数据报封装为分组和包进行传送。在TCP/IP结构体系中,由于网络层使用IP协议,因此分组也叫做IP数据报,简称数据报。

    互联网是由大量异构(hetergeneous)网络通过路由器相互连接起来的,互联网使用的网络层协议是无连接的网际协议和许多路由选择协议,因此互联网的网络层也叫做网际层。

  • 数据链路层
    数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。在两个相邻节点之间传送数据时,数据链路层将网络层交下来的IP数据报组装成帧,在两个相邻节点的链路上传送帧,每一帧包括数据和必要的控制信息(同步控制、地址信息、差错控制)。
    在接受数据时,控制信息使接收端能够知道一个帧从哪个比特开始到哪个比特结束。这样,数链路层在收到一个帧后,就可以从中提出数据,上交给网络层。控制信心还可以使接收端能够检测所受到的帧有差错。

    如果发现差错,数据链路层就简单的丢弃这个出差错的帧,以免继续在网络层传输白白的浪费网络资源。如果需要改正数据在链路层传输时出现的差错,那么就要采用可靠性传输协议来纠正出现的差错,这种方法回事链路层的协议更加的复杂。

  • 物理层
    在物理层上所传送的数据单位是比特。物理层(physical layer)作用是实现相邻计算机节点之间比特流的透明传输,尽可能屏蔽掉具体传输介质和物理设备的差异。使上面的数据链路层不必考虑网络的具体传输介质是什么。“透明传送比特流”表示经实际电路传送后的比特流没有发生变化,对传送的比特流来说,这个电路好像是看不见的。

    在互联网使用的各种协议中最重要和最著名的就是TCP/IP两个协议。现在人们提到的TCP/IP并不是一定单指TCP和IP这两个具体的协议,而往往表示互联网所使用的整个TCP/IP协议族。

总结一下,上面我们对五层体系结构有了初步的了解,现附上七层体系结构总结图
图片说明


2.TCP三次握手和四次挥手(面试常客)

  • TCP建立连接(即三次握手)
    在学习三次握手之前先了解的专业术语:

    SYN: 同步位; ACK: 确认位; ack: 确认号(对方发送的序号+1); SYN=1:表示进行一个连接请求; ACK=1/0: (确认有效/无效); seq=x: 序号(x随机产生)。

    图片说明

    1.第一次握手:起初两端都处于CLOSE关闭状态,Client主动打开将标志位SYN置为1,随机产生一个序号值seq=x,并将该数据包发送给Server服务器,Client进入SYN-SENT状态,等待Server确认;
    2.第二次握手:Server收到数据包后由标志位SYN=1得知Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN-RCVD状态,此时操作系统为该TCP连接分配TCP缓存和变量;
    3.第三次握手:Client收到确认后,检查ack是否为x+1,ACk是否为1,如果正确则将标志位ACK置为1,ack=y+1,并且此时操作系统为该TCP连接分配TCP缓存和变量,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,如果正确则连接建立成功,CLient和Server进入ESTABLISHED状态。

    起初A和B都处于CLOSED状态——B创建TCB,处于LISTEN状态,等待A请求——A创建TCB,发送连接请求(SYN=1,seq=x),进入SYN-SENT状态——B收到连接请求,向A发送确认(SYN=ACK=1,确认号ack=x+1,初始序号seq=y),进入SYN-RCVD状态——A收到B的确认后,给B发出确认(ACK=1,ack=y+1,seq=x+1),A进入ESTABLISHED状态——B收到A的确认后,进入ESTABLISHED状态。

  • 断开连接(四次挥手)
    图片说明

    1. A的应用进程先向其TCP发出连接释放报文段(FIN=1,序号seq=u),并停止再发送数据,主动关闭TCP连接,进入FIN-WAIT-1(终止等待1)状态,等待B的确认。
    2. B收到连接释放报文段后即发出确认报文段,(ACK=1,确认号ack=u+1,序号seq=v),B进入CLOSE-WAIT(关闭等待)状态,此时的TCP处于半关闭状态,A到B的连接释放。
    3. A收到B的确认后,进入FIN-WAIT-2(终止等待2)状态,等待B发出的连接释放报文段。
    4. B没有要向A发出的数据,B发出连接释放报文段(FIN=1,ACK=1,序号seq=w,确认号ack=u+1),B进入LAST-ACK(最后确认)状态,等待A的确认。
    5. A收到B的连接释放报文段后,对此发出确认报文段(ACK=1,seq=u+1,ack=w+1),A进入TIME-WAIT(时间等待)状态。此时TCP未释放掉,需要经过时间等待计时器设置的时间2MSL后,A才进入CLOSED状态。

    起初A和B处于ESTABLISHED状态——A发出连接释放报文段并处于FIN-WAIT-1状态——B发出确认报文段且进入CLOSE-WAIT状态——A收到确认后,进入FIN-WAIT-2状态,等待B的连接释放报文段——B没有要向A发出的数据,B发出连接释放报文段且进入LAST-ACK状态——A发出确认报文段且进入TIME-WAIT状态——B收到确认报文段后进入CLOSED状态——A经过等待计时器时间2MSL后,进入CLOSED状态。

    个人推荐: 关于三次握手和四次挥手以及相关问题


3.TCP和UDP协议的区别

图片说明

  • UDP
    UDP在传输数据之前不需要建立连接,远地主机在收到UDP报文后,不需要给出任何的确认信息。虽然UDP不提供可靠地数据传输,但在某些情况下UDP确是一种有效的工作方式,比如:QQ语音、QQ视频、直播等等。

  • TCP
    TCP提供面向连接的服务,在传输数据之间必须先建立连接,数据传输结束后需要断开连接释放资源。TCP不提供广播或多播服务。由于TCP要提供可靠的,面向连接的服务(TCP的可靠体现在TCP在传播数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP一般用于文件传输、发送和接受邮件、远程登录等场景。


4.TCP是如何保证可靠传输的

  1. 应用数据被分割成TCP认为最合适发送的数据块
  2. TCP给每一个发送的包进行编号,接受方对数据包进行排序,把有序的数据传给应用层。
  3. 校验和: TCP将保持首部和数据的校验和。这是一个端到端的检验和,目的是校验数据在传输过程中的任何变化。如果收到段的校验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。
  4. TCP的接受端会丢弃重复的数据
  5. 流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接受端缓冲区能接纳的数据,当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议。
  6. 拥塞控制:当网络拥塞时,减少数据的发送。
  7. ARQ协议:也是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组。
  8. 超时重传:当TCP发出一段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重新发这个报文段。

5.ARQ协议

自动重传请求(Automatic Repeat-reQuest, ARQ)是ISO结构模型中数据链路层传输层的纠错纠正协议之一。它通过使用确认和超时这两个机制,在不可靠的基础上实现可靠的信息传输。如果发送方在发送后一段时间没有收到确认帧,它通常会重新发送。ARQ包括停止等待ARQ协议和连续ARQ协议。

  • 停止等待ARQ协议

    1. 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认(回复ACK)。如果过一段时间后还是没有收到ACK确认,说明没有发送成功,需要重新发送,直到收到确认后再发送下一分组
    2. 在停止等待协议中,若接收方收到重复的分组,就丢弃该分组,但同时还要发送确认。
      优点: 简单
      缺点: 信道利用率低,等待时间长
  • 连续ARQ协议

    1. 连续ARQ协议可提高对信道的利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方的确认。接受方一般采用累计确认,对按序到达的最后一个分组发送确认请求,表明到这个分组的所有分组都已经正确收到了。

    优点: 信道利用率高,实现容易,即使确认丢失,也不必重传。
    缺点: 不能向发送方反映出接受方已经正确接受的所有分组信息。比如:发送方发送了5条信息,中间的第三条丢失,这时接收方只能对前两个发送确认,发送方无法知道后三个分组的下落,而只好后三个全部重新传一遍。这也叫Go_Back-N(回退N),表示需要回退回来重传已经发送过的N个消息。

6.滑动窗口和流量控制

TCP利用滑动窗口实现流量控制。流量控制是为了控制发送方的发送速率,保证接收方来得及接受。接收方发送的确认报文中的窗口字段可以用来控制发送方的窗体大小,从而影响发送方的发送速率。将窗口字段设为0,发送方将不会发送任何数据

7.在浏览器中输入URL地址->>显示主页的过程(面试常客)

过程 使用的协议
1.浏览器通过域名查找IP地址 DNS: 获取域名对应的IP
2.浏览器向web服务器发送一个HTTP请求 TCP: 与服务器建立TCP连接
3.服务器处理请求 IP: 建立TCP协议时,需要发送数据,发送数据在网络层使用IP协议
4.服务器返回一个HTML响应 OPSH: IP数据包在路由器之间,路由选择使用OPSF协议
5.浏览器开始显示HTML页面 ARP: 路由器在与服务器通信时,需要将ip地址转换为MAC地址,需要使用ARP协议
HTTP: 在TCP建立完成后,使用HTTP协议访问页面

1.首先进行域名解析,域名解析具体过程讲一下:
浏览器搜索自己的DNS缓存,缓存中维护一张域名与IP地址的对应表;
若没有,则搜索操作系统的DNS缓存;
若没有,则操作系统将域名发送至本地域名服务器(递归查询方式),本地域名服务器查询自己的DNS缓存,查找成功则返回结果,否则,通过以下方式迭代查找:

本地域名服务器向根域名服务器发起请求,根域名服务器返回com域的顶级域名服务器的地址;
本地域名服务器向com域的顶级域名服务器发起请求,返回权限域名服务器地址;
本地域名服务器向权限域名服务器发起请求,得到IP地址;

本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来;
操作系统将IP地址返回给浏览器,同时自己也将IP地址缓存起来;
至此,浏览器已经得到了域名对应的IP地址。
  1. 浏览器发起HTTP请求;
  2. 接下来到了传输层,选择传输协议,TCP或者UDP,TCP是可靠的传输控制协议,对HTTP请求进行封装,加入了端口号等信息;
  3. 然后到了网络层,通过IP协议将IP地址封装为IP数据报;然后此时会用到ARP协议,主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,找到目的MAC地址;
  4. 接下来到了数据链路层,把网络层交下来的IP数据报添加首部和尾部,封装为MAC帧,现在根据目的mac开始建立TCP连接,三次握手,接收端在收到物理层上交的比特流后,根据首尾的标记,识别帧的开始和结束,将中间的数据部分上交给网络层,然后层层向上传递到应用层;
  5. 服务器响应请求并请求客户端要的资源,传回给客户端;
  6. 断开TCP连接,浏览器对页面进行渲染呈现给客户端。
    原文链接:https://blog.csdn.net/hellodake/article/details/81974421

8.HTTP1.0与HTTP1.1之间的区别

  1. 长连接: 在HTTP1.0中,默认使用的是短连接,也就是说每一次请求都要重新建立一次连接。HTTP是基于TCP/IP协议的,每一次建立连接或者断开连接都需要三次握手四次挥手的开销,如果每次请求都是这样的话,开销就会很大。HTTP1.1默认使用长连接,默认开启Connection: keep-alive.HTTP/1.1的持续连接有非流水线方式和流水线方式。流水线方式是客户在收到HTTP的响应报文之前就能接着发送新的请求报文。与之响应的非流水线方式是客户在收到前一个响应后才能发送下一个请求。
  2. 错误状态响应码: 在HTTP1.1中新增了24个错误状态码,如: 409(Conflict)请求资源与资源的当前状态发生冲突;410(Gone)表示服务器上某个资源被永久的删除。
  3. 缓存处理: 在HTTP1.0z中主要使用header里的If-Modified-Since,Expries来作为缓存判断的标准,HTTP1.1则引入了更多的缓存控制策略,例如: Entity tag,If-Unmodified-Since,If-Match,If-None-Match等更多可供选择的缓存头来控制缓存策略。
  4. 带宽优化及网络连接的使用: HTTP1.0中,存在一些浪费资宽带的现象,例如:客户端只是需要某个对象的一部门,而服务器却将其整个对象传送来了,并且不支持断点的传续功能,HTTP1.1则在请求头引入了range头域,它允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者的自由的选择以便于充分利用宽带和连接。

9.URL和URI的区别是什么?

  1. URI(Uniform Resource Identifier)是统一资源的标识符,可以唯一标识一个资源。
  2. URL(Uniform Resource Location)是统一资源定位符,可以提供该资源的路径。它是一种具体的URI,即URI可以用来标识一个资源,而且还指明了如何找到这个资源。

10.HTTP和HTTPS的区别?

  1. 端口: HTTP的URL由“http://”起始且默认使用的端口为80,而HTTPS的URL由“https://”起始且默认端口为443。
  2. 安全性和资源消耗: HTTP协议运行在TCP上,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份。HTTPS是运行在SSL/TSL之上的协议,SSL/TSL运行在TCP上。所有传输的内容都经过加密,加密采用对称加密,但是对称加密的密钥用服务器方的证书进行了非对称性加密。所以说,HTTP安全性没有HTTPS高,但是HTTPS比HTTP耗费更多服务器资源。