精华内容
下载资源
问答
  • v2ray: 著名代理软件,Shadowsocks 代替者,1.17后集成了 kcp协议使用UDP传输,无数据包特征。 HP-Socket: 高性能网络通信框架 HP-Socket。 frp: 高性能内网穿透的反向代理软件,可将将内网服务暴露映射到外网...
  • #一-osi与tcpip各层的结构与功能都有哪些协议#五层协议的体系结构#1-应用层#域名系统#http协议#2-运输层#运输层主要使用以下两种协议#udp-的主要特点#tcp-的主要特点#3-网络层#4-数据链路层#5-物理层#总结一下#二-...
    • #一-osi与tcpip各层的结构与功能都有哪些协议
    • #五层协议的体系结构
    • #1-应用层
    • #域名系统
    • #http协议
    • #2-运输层
    • #运输层主要使用以下两种协议
    • #udp-的主要特点
    • #tcp-的主要特点
    • #3-网络层
    • #4-数据链路层
    • #5-物理层
    • #总结一下
    • #二-tcp-三次握手和四次挥手面试常客
    • #为什么要三次握手
    • #为什么要传回-syn
    • #传了-syn为啥还要传-ack
    • #为什么要四次挥手
    • #三-tcp、udp-协议的区别
    • #四-tcp-协议如何保证可靠传输
    • #停止等待协议
    • #自动重传请求-arq-协议
    • #连续arq协议
    • #滑动窗口
    • #流量控制
    • #拥塞控制
    • > 显示主页的过程(面试常客)">#五-在浏览器中输入url地址---显示主页的过程(面试常客)
    • #六-状态码
    • #七-各种协议与http协议之间的关系
    • #八-http长连接、短连接
    • #写在最后
    • #计算机网络常见问题回顾
    • #建议

    相对与上一个版本的计算机网路面试知识总结,这个版本增加了 “TCP协议如何保证可靠传输”包括超时重传、停止等待协议、滑动窗口、流量控制、拥塞控制等内容并且对一些已有内容做了补充。

    一 OSI与TCP/IP各层的结构与功能,都有哪些协议

    五层协议的体系结构

    学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。

    682cf4e204da3ec042d768f7542c970f.png

    结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。

    1 应用层

    应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。

    域名系统

    域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(百度百科)例如:一个公司的 Web 网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名,类似的还有:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com、Cisco公司的域名是 www.cisco.com 等。

    HTTP协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。(百度百科)

    2 运输层

    运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。

    运输层主要使用以下两种协议

    1. 传输控制协议 TCP(Transmission Control Protocol)--提供面向连接的,可靠的数据传输服务。
    2. 用户数据协议 UDP(User Datagram Protocol)--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

    UDP 的主要特点

    1. UDP 是无连接的;
    2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
    3. UDP 是面向报文的;
    4. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);
    5. UDP 支持一对一、一对多、多对一和多对多的交互通信;
    6. UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

    TCP 的主要特点

    1. TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
    2. 每一条 TCP 连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
    3. TCP 提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
    4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
    5. 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

    3 网络层

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

    这里要注意:不要把运输层的“用户数据报 UDP ”和网络层的“ IP 数据报”弄混。另外,无论是哪一层的数据单元,都可笼统地用“分组”来表示。

    这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.

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

    4 数据链路层

    数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

    在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。

    5 物理层

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

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

    总结一下

    上面我们对计算机网络的五层体系结构有了初步的了解,下面附送一张七层体系结构图总结一下。图片来源:https://blog.csdn.net/yaopeng_2005/article/details/7064869

    35d217442e05c886ba9cc0893a4313ca.gif

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

    为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

    漫画图解:

    图片来源:《图解HTTP》

    ebe06facc1ce05d6580b212862e5f702.png

    简单示意图:

    bdccb93d5ac97083ce7c30636dbc72d0.png
    • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
    • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
    • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

    为什么要三次握手

    三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

    第一次握手:Client 什么都不能确认;Server 确认了对方发送正常

    第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常

    第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常

    所以三次握手就能确认双发收发功能都正常,缺一不可。

    为什么要传回 SYN

    接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

    SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

    传了 SYN,为啥还要传 ACK

    双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

    059eacd584dfbb2b8fdf79c3753c87fe.png

    断开一个 TCP 连接则需要“四次挥手”:

    • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
    • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
    • 服务器-关闭与客户端的连接,发送一个FIN给客户端
    • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

    为什么要四次挥手

    任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

    举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

    上面讲的比较概括,推荐一篇讲的比较细致的文章:https://blog.csdn.net/qzcsu/article/details/72861891

    三 TCP、UDP 协议的区别

    de3d282db313849e5620a874535b9abe.png

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

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

    四 TCP 协议如何保证可靠传输

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

    停止等待协议

    • 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;
    • 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;

    1) 无差错情况:

    f8ae0dbc3754ed8accf984bfb5cc0b4f.png

    发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。

    2) 出现差错情况(超时重传):

    3deb0732dcdf2a164a4fe52d59812e44.png

    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续 ARQ 协议 可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。

    3) 确认丢失和确认迟到

    • 确认丢失:确认消息在传输过程丢失
    c002b81884b4d87c28a2010139a79e7c.png
    • 当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程中丢失。而A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:
    1. 丢弃这个重复的M1消息,不向上层交付。
    2. 向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。
    • 确认迟到 :确认消息在传输过程中迟到
    40e1cc22d31a6219a4291ce3b2c5d4b2.png
    • A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第二次发送的确认消息。接着发送其他数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:
    1. A收到重复的确认后,直接丢弃。
    2. B收到重复的M1后,也直接丢弃重复的M1。

    自动重传请求 ARQ 协议

    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。

    优点: 简单

    缺点: 信道利用率低

    连续ARQ协议

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

    优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。

    缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

    滑动窗口

    • TCP 利用滑动窗口实现流量控制的机制。
    • 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。
    • TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

    流量控制

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

    拥塞控制

    在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

    TCP的拥塞控制采用了四种算法,即 慢开始拥塞避免快重传快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

    • 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
    54e6b2086386bbaa218a30987293ea03.png
    • 拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.
    • 快重传与快恢复:
    • 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。 当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
    1de041733777b07cf46e04cc865ebbea.png

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

    百度好像最喜欢问这个问题。

    打开一个网页,整个过程会使用哪些协议

    图解(图片来源:《图解HTTP》):

    22aeeab00c4dec1a4493b5151be45acb.png

    总体来说分为以下几个过程:

    1. DNS解析
    2. TCP连接
    3. 发送HTTP请求
    4. 服务器处理请求并返回HTTP报文
    5. 浏览器解析渲染页面
    6. 连接结束

    具体可以参考下面这篇文章:

    • https://segmentfault.com/a/1190000006879700

    六 状态码

    8ec7d64d4e9b6524d91e33eec656b43b.png

    七 各种协议与HTTP协议之间的关系

    一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。

    图片来源:《图解HTTP》

    c78cb5caf7ad0ce79c6dba79a7c344f3.png

    八 HTTP长连接、短连接

    在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

    而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

    Connection:keep-alive

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

    HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

    —— https://www.cnblogs.com/gotodsp/p/6366163.html

    写在最后

    计算机网络常见问题回顾

    • ①TCP三次握手和四次挥手、
    • ②在浏览器中输入url地址->>显示主页的过程
    • ③HTTP和HTTPS的区别
    • ④TCP、UDP协议的区别
    • ⑤常见的状态码。

    建议

    非常推荐大家看一下 《图解HTTP》 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助。下面的一些文章只是参考。大二学习这门课程的时候,我们使用的教材是 《计算机网络第七版》(谢希仁编著),不推荐大家看这本教材,书非常厚而且知识偏理论,不确定大家能不能心平气和的读完。

    参考

    • https://blog.csdn.net/qq_16209077/article/details/52718250
    • https://blog.csdn.net/zixiaomuwu/article/details/60965466
    • https://blog.csdn.net/turn__back/article/details/73743641

    ------


    【感谢您能看完,如果能够帮到您,麻烦点个赞~】

    更多经验技术欢迎前来共同学习交流:一点课堂-为梦想而奋斗的在线学习平台 http://www.yidiankt.com/

    想要深入学习的同学们可以关注私信我,一起学习讨论~还有全套资源分享,经验探讨,等你哦!

    展开全文
  • 本文为转载文章 ...版权归原文所有 关于UDP 面向报文的传输方式决定了UDP的数据发送方式是一份一份的,也就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。...[1] UDP协议本身,UDP协议中有16位的UDP报文

    本文为转载文章

    原文链接:https://www.qcloud.com/community/article/848077001486437077

    版权归原文所有

    关于UDP

    面向报文的传输方式决定了UDP的数据发送方式是一份一份的,也就是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。那么UDP的报文大小由哪些影响因素呢?UDP数据

    包的理论长度是多少,合适的UDP数据包应该是多少呢?

    (1)UDP报文大小的影响因素,主要有以下3个

    [1] UDP协议本身,UDP协议中有16位的UDP报文长度,那么UDP报文长度不能超过2^16=65536.
    [2] 以太网(Ethernet)数据帧的长度,数据链路层的MTU(最大传输单元)。
    [3] socket的UDP发送缓存区大小
    

    (2) UDP数据包最大长度

    根据UDP协议,从UDP数据包的包头可以看出,UDP的最大包长度是2^16-1的个字节。

    由于UDP包头占8个字节,而在IP层进行封装后的IP包头占去20字节,所以这个是UDP数据包的最大理论长度是2^16 - 1 - 8 - 20 = 65507字节。

    如果发送的数据包超过65507字节,send或sendto函数会错误码1(Operation not permitted, Message too long),当然啦,一个数据包能否发送65507字节,还和UDP发送缓冲区大小

    (linux下UDP发送缓冲区大小为:cat /proc/sys/net/core/wmem_default)相关,如果发送缓冲区小于65507字节,在发送一个数据包为65507字节的时候,send或sendto函数会错误码

    1(Operation not permitted, No buffer space available)。

    (3) UDP数据包理想长度

    理论上UDP报文最大长度是65507字节,实际上发送这么大的数据包效果最好吗?

    我们知道UDP是不可靠的传输协议,为了减少UDP包丢失的风险,我们最好能控制UDP包在下层协议的传输过程中不要被切割。

    相信大家都知道MTU这个概念。 MTU最大传输单元,这个最大传输单元实际上和链路层协议有着密切的关系,EthernetII帧的结构DMAC+SMAC+Type+Data+CRC由于以太网传输电气方

    面的限制,每个以太网帧都有最小的大小64字节,最大不能超过1518字节,对于小于或者大于这个限制的以太网帧我们都可以视之为错误的数据帧,一般的以太网转发设备会丢弃这些数据帧。

    由于以太网EthernetII最大的数据帧是1518字节,除去以太网帧的帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Bytes+Type域2bytes)14Bytes和帧尾CRC校验

    部分4Bytes那么剩下承载上层协议的地方也就是Data域最大就只能有1500字节这个值我们就把它称之为MTU。

    在下层数据链路层最大传输单元是1500字节的情况下,要想IP层不分包,那么UDP数据包的最大大小应该是1500字节 – IP头(20字节) – UDP头(8字节) = 1472字节。不过鉴于Internet上的

    标准MTU值为576字节,所以建议在进行Internet的UDP编程时,最好将UDP的数据长度控制在 (576-8-20)548字节以内。

    3.2 UDP数据包的发送和接收问题

    (1) UDP的通信有界性

    在阻塞模式下,UDP的通信是以数据包作为界限的,即使server端的缓冲区再大也要按照client发包的次数来多次接收数据包,server只能一次一次的接收,client发送多少次,server就需接

    收多少次,即客户端分几次发送过来,服务端就必须按几次接收。

    (2) UDP数据包的无序性和非可靠性

    client依次发送1、2、3三个UDP数据包,server端先后调用3次接收函数,可能会依次收到3、2、1次序的数据包,收包可能是1、2、3的任意排列组合,也可能丢失一个或多个数据包。

    (3) UDP数据包的接收

    client发送两次UDP数据,第一次 500字节,第二次300字节,server端阻塞模式下接包,第一次recvfrom( 1000 ),收到是 1000,还是500,还是300,还是其他?

    由于UDP通信的有界性,接收到只能是500或300,又由于UDP的无序性和非可靠性,接收到可能是300,也可能是500,也可能一直阻塞在recvfrom调用上,直到超时返回(也就是什么也收不到)。
    

    在假定数据包是不丢失并且是按照发送顺序按序到达的情况下,server端阻塞模式下接包,先后三次调用:recvfrom( 200),recvfrom( 1000),recvfrom( 1000),接收情况如何呢?

    由于UDP通信的有界性,第一次recvfrom( 200)将接收第一个500字节的数据包,但是因为用户空间buf只有200字节,于是只会返回前面200字节,剩下300字节将丢弃。第二次recvfrom( 1000)将返回300字节,第三次recvfrom( 1000)将会阻塞。
    

    (4) UDP包分片问题

    如果MTU是1500,Client发送一个8000字节大小的UDP包,那么Server端阻塞模式下接包,在不丢包的情况下,recvfrom(9000)是收到1500,还是8000。如果某个IP分片丢失了,

    recvfrom(9000),又返回什么呢?

    根据UDP通信的有界性,在buf足够大的情况下,接收到的一定是一个完整的数据包,UDP数据在下层的分片和组片问题由IP层来处理,提交到UDP传输层一定是一个完整的UDP包,那么

    recvfrom(9000)将返回8000。如果某个IP分片丢失,udp里有个CRC检验,如果包不完整就会丢弃,也不会通知是否接收成功,所以UDP是不可靠的传输协议,那么recvfrom(9000)将阻

    塞。

    3.3 UDP丢包问题

    在不考虑UDP下层IP层的分片丢失,CRC检验包不完整的情况下,造成UDP丢包的因素有哪些呢?

    [1] UDP socket缓冲区满造成的UDP丢包

    通过 cat /proc/sys/net/core/rmem_default 和cat /proc/sys/net/core/rmem_max可以查看socket缓冲区的缺省值和最大值。如果socket缓冲区满了,应用程序没来得及处理在缓冲区

    中的UDP包,那么后续来的UDP包会被内核丢弃,造成丢包。在socket缓冲区满造成丢包的情况下,可以通过增大缓冲区的方法来缓解UDP丢包问题。但是,如果服务已经过载了,简单的增大

    缓冲区并不能解决问题,反而会造成滚雪球效应,造成请求全部超时,服务不可用。

    [2] UDP socket缓冲区过小造成的UDP丢包

    如果Client发送的UDP报文很大,而socket缓冲区过小无法容下该UDP报文,那么该报文就会丢失。

    [3] ARP缓存过期导致UDP丢包

    ARP的缓存时间约10分钟,APR缓存列表没有对方的MAC地址或缓存过期的时候,会发送ARP请求获取MAC地址,在没有获

    取到MAC地址之前,用户发送出去的UDP数据包会被内核缓存到arp_queue这个队列中,默认最多缓存3个包,多余的UDP

    包会被丢弃。被丢弃的UDP包可以从/proc/net/stat/arp_cache的最后一列的unresolved_discards看到。当然我们可以通

    过echo 30 > /proc/sys/net/ipv4/neigh/eth1/unres_qlen来增大可以缓存的UDP包。

    UDP的丢包信息可以从cat /proc/net/udp 的最后一列drops中得到,而倒数第四列inode是丢失UDP数据包的socket的全

    局唯一的虚拟i节点号,可以通过这个inode号结合lsof(lsof -P -n | grep 25445445)来查到具体的进程。

    3.4 UDP冗余传输

    在外网通信链路不稳定的情况下,有什么办法可以降低UDP的丢包率呢?一个简单的办法来采用冗余传输的方式。如下图,一

    般采用较多的是延时双发,双发指的是将原本单发的前后连续的两个包合并成一个大包发送,这样发送的数据量是原来的两

    倍。这种方式提高丢包率的原理比较简单,例如本例的冗余发包方式,在偶数包全丢的情况下,依然能够还原出完整的数据,

    也就是在这种情况下,50%的丢包率,依然能够达到100%的数据接收。

    在这里插入图片描述

    4 UDP真的比TCP要高效吗

    相信很多同学都认为UDP无连接,无需重传和处理确认,UDP比较高效。然而UDP在大多情况下并不一定比TCP高效,TCP发

    展至今天,为了适应各种复杂的网络环境,其算法已经非常丰富,协议本身经过了很多优化,如果能够合理配置TCP的各种参

    数选项,那么在多数的网络环境下TCP是要比UDP更高效的。

    4.1 影响UDP高效因素

    (1) 无法智能利用空闲带宽导致资源利用率低

    一个简单的事实是UDP并不会受到MTU的影响,MTU只会影响下层的IP分片,对此UDP一无所知。在极端情况下,UDP每次

    都是发小包,包是MTU的几百分之一,这样就造成UDP包的有效数据占比较小(UDP头的封装成本);或者,UDP每次都是发

    巨大的UDP包,包大小MTU的几百倍,这样会造成下层IP层的大量分片,大量分片的情况下,其中某个分片丢失了,就会导

    致整个UDP包的无效。由于网络情况是动态变化的,UDP无法根据变化进行调整,发包过大或过小,从而导致带宽利用率低

    下,有效吞吐量较低。而TCP有一套智能算法,当发现数据必须积攒的时候,就说明此时不积攒也不行,TCP的复杂算法会在

    延迟和吞吐量之间达到一个很好的平衡。

    (2) 无法动态调整发包

    由于UDP没有确认机制,没有流量控制和拥塞控制,这样在网络出现拥塞或通信两端处理能力不匹配的时候,UDP并不会进

    行调整发送速率,从而导致大量丢包。在丢包的时候,不合理的简单重传策略会导致重传风暴,进一步加剧网络的拥塞,从而

    导致丢包率雪上加霜。更加严重的是,UDP的无秩序性和自私性,一个疯狂的UDP程序可能会导致这个网络的拥塞,挤压其

    他程序的流量带宽,导致所有业务质量都下降。

    (3) 改进UDP的成本较高

    可能有同学想到针对UDP的一些缺点,在用户态做些调整改进,添加上简单的重传和动态发包大小优化。然而,这样的改进并

    比简单的,UDP编程可是比TCP要难不少的,考虑到改造成本,为什么不直接用TCP呢?当然可以拿开源的一些实现来抄一下

    (例如:libjingle),或者拥抱一下Google的QUIC协议,然而,这些都需要不少成本的。

    上面说了这么多,难道真的不该用UDP了吗?其实也不是的,在某些场景下,我们还是必须UDP才行的。那么UDP的较为合

    适的使用场景是哪些呢?
    5 UDP的使用场合

    5.1 通信实时性和持续性

    在分组交换通信当中,协议栈的成本主要表现在以下两方面:

    [1] 封装带来的空间复杂度[2] 缓存带来的时间复杂度
    

    以上两者是对立影响的,如果想减少封装消耗,那么就必须缓存用户数据到一定量在一次性封装发送出去,这样每个协议包的

    有效载荷将达到最大化,这无疑是节省了带宽空间,带宽利用率较高,但是延时增大了。如果想降低延时,那么就需要将用户

    数据立马封装发出去,这样显然会造成消耗更多的协议头等消耗,浪费带宽空间。

    因此,我们进行协议选择的时候,需要重点考虑一下空间复杂度和时间复杂度间的平衡。通信的持续性对两者的影响比较大,

    根据通信的持续性有两种通信类型:[1] 短连接通信 [2] 长连接通信。对于短连接通信,一方面如果业务只需要发一两个包并

    且对丢包有一定的容忍度,同时业务自己有简单的轮询或重复机制,那么采用UDP会较为好些。在这样的场景下,如果用

    TCP,仅仅握手就需要3个包,这样显然有点不划算,一个典型的例子是DNS查询。另一方面,如果业务实时性要求非常高,

    并且不能忍受重传,那么首先就是UDP了或者只能用UDP了,例如NTP 协议,重传NTP消息纯属添乱(为什么呢?重传一个过

    期的时间包过来,还不如发一个新的UDP包同步新的时间过来)。如果NTP协议采用TCP,撇开握手消耗较多数据包交互的问

    题,由于TCP受Nagel算法等影响,用户数据会在一定情况下会被内核缓存延后发送出去,这样时间同步就会出现比较大的偏

    差,协议将不可用。

    5.2 多点通信

    对于一些多点通信的场景,如果采用有连接的TCP,那么就需要和多个通信节点建立其双向连接,然后有时在NAT环境下,两

    个通信节点建立其直接的TCP连接不是一个容易的事情,在涉及NAT穿越的时候,UDP协议的无连接性使得穿透成功率更高

    (原因详见:由于UDP的无连接性,那么其完全可以向一个组播地址发送数据或者轮转地向多个目的地持续发送相同的数据,

    从而更为容易实现多点通信。)

    一个典型的场景是多人实时音视频通信,这种场景下实时性要求比较高,可以容忍一定的丢包率。比如:对于音频,对端连续

    发送p1、p2、p3三个包,另一端收到了p1和p3,在没收到p2的保持p1的最后一个音(也是为什么有时候网络丢包就会听到

    嗞嗞嗞嗞嗞嗞…或者卟卟卟卟卟卟卟卟…重音的原因),等到到p3就接着播p3了,不需要也不能补帧,一补就越来越大的延

    时。对于这样的场景就比较合适用UDP了,如果采用TCP,那么在出现丢包的时候,就可能会出现比较大的延时。

    5.3 UDP使用原则

    通常情况下,UDP的使用范围是较小的,在以下的场景下,使用UDP才是明智的

    [1] 实时性要求很高,并且几乎不能容忍重传
    例子:NTP协议,实时音视频通信,多人动作类游戏中人物动作、位置
    [2] TCP实在不方便实现多点传输的情况
    [3] 需要进行NAT穿越
    [4] 对网络状态很熟悉,确保udp网络中没有氓流行为,疯狂抢带宽
    [5] 熟悉UDP编程
    
    展开全文
  • 运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 3 网络层 4 数据链路层 5 物理层 总结一下 二 TCP 三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回 SYN 传了 SYN,为啥还要传 ACK 为...

    相对与上一个版本的计算机网路面试知识总结,这个版本增加了 “TCP协议如何保证可靠传输”包括超时重传、停止等待协议、滑动窗口、流量控制、拥塞控制等内容并且对一些已有内容做了补充。

    一 OSI与TCP/IP各层的结构与功能,都有哪些协议

    五层协议的体系结构

    学习计算机网络时我们一般采用折中的办法,也就是中和 OSI 和 TCP/IP 的优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚。

    五层协议的体系结构

    结合互联网的情况,自上而下地,非常简要的介绍一下各层的作用。

    1 应用层

    应用层(application-layer)的任务是通过应用进程间的交互来完成特定网络应用。应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的 HTTP协议,支持电子邮件的 SMTP协议等等。我们把应用层交互的数据单元称为报文。

    域名系统

    域名系统(Domain Name System缩写 DNS,Domain Name被译为域名)是因特网的一项核心服务,它作为可以将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。(百度百科)例如:一个公司的 Web 网站可看作是它在网上的门户,而域名就相当于其门牌地址,通常域名都使用该公司的名称或简称。例如上面提到的微软公司的域名,类似的还有:IBM 公司的域名是 www.ibm.com、Oracle 公司的域名是 www.oracle.com、Cisco公司的域名是 www.cisco.com 等。

    HTTP协议

    超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的 WWW(万维网) 文件都必须遵守这个标准。设计 HTTP 最初的目的是为了提供一种发布和接收 HTML 页面的方法。(百度百科)

    2 运输层

    运输层(transport layer)的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文。“通用的”是指并不针对某一个特定的网络应用,而是多种应用可以使用同一个运输层服务。由于一台主机可同时运行多个线程,因此运输层有复用和分用的功能。所谓复用就是指多个应用层进程可同时使用下面运输层的服务,分用和复用相反,是运输层把收到的信息分别交付上面应用层中的相应进程。

    运输层主要使用以下两种协议

    1. 传输控制协议 TCP(Transmission Control Protocol)--提供面向连接的,可靠的数据传输服务。
    2. 用户数据协议 UDP(User Datagram Protocol)--提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

    UDP 的主要特点

    1. UDP 是无连接的;
    2. UDP 使用尽最大努力交付,即不保证可靠交付,因此主机不需要维持复杂的链接状态(这里面有许多参数);
    3. UDP 是面向报文的;
    4. UDP 没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如 直播,实时视频会议等);
    5. UDP 支持一对一、一对多、多对一和多对多的交互通信;
    6. UDP 的首部开销小,只有8个字节,比TCP的20个字节的首部要短。

    TCP 的主要特点

    1. TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
    2. 每一条 TCP 连接只能有两个端点,每一条TCP连接只能是点对点的(一对一);
    3. TCP 提供可靠交付的服务。通过TCP连接传送的数据,无差错、不丢失、不重复、并且按序到达;
    4. TCP 提供全双工通信。TCP 允许通信双方的应用进程在任何时候都能发送数据。TCP 连接的两端都设有发送缓存和接收缓存,用来临时存放双方通信的数据;
    5. 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。

    3 网络层

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

    这里要注意:不要把运输层的“用户数据报 UDP ”和网络层的“ IP 数据报”弄混。另外,无论是哪一层的数据单元,都可笼统地用“分组”来表示。

    这里强调指出,网络层中的“网络”二字已经不是我们通常谈到的具体网络,而是指计算机网络体系结构模型中第三层的名称.

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

    4 数据链路层

    数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议。 在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)。

    在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。

    5 物理层

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

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

    总结一下

    上面我们对计算机网络的五层体系结构有了初步的了解,下面附送一张七层体系结构图总结一下。图片来源:https://blog.csdn.net/yaopeng_2005/article/details/7064869七层体系结构图

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

    为了准确无误地把数据送达目标处,TCP协议采用了三次握手策略。

    漫画图解:

    图片来源:《图解HTTP》TCP三次握手

    简单示意图:TCP三次握手

    • 客户端–发送带有 SYN 标志的数据包–一次握手–服务端
    • 服务端–发送带有 SYN/ACK 标志的数据包–二次握手–客户端
    • 客户端–发送带有带有 ACK 标志的数据包–三次握手–服务端

    为什么要三次握手

    三次握手的目的是建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。

    第一次握手:Client 什么都不能确认;Server 确认了对方发送正常

    第二次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己接收正常,对方发送正常

    第三次握手:Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认了:自己发送、接收正常,对方发送接收正常

    所以三次握手就能确认双发收发功能都正常,缺一不可。

    为什么要传回 SYN

    接收端传回发送端所发送的 SYN 是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

    SYN 是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立正常的 TCP 网络连接时,客户机首先发出一个 SYN 消息,服务器使用 SYN-ACK 应答表示接收到了这个消息,最后客户机再以 ACK(Acknowledgement[汉译:确认字符 ,在数据通信传输中,接收站发给发送站的一种传输控制字符。它表示确认发来的数据已经接受无误。 ])消息响应。这样在客户机和服务器之间才能建立起可靠的TCP连接,数据才可以在客户机和服务器之间传递。

    传了 SYN,为啥还要传 ACK

    双方通信无误必须是两者互相发送信息都无误。传了 SYN,证明发送方到接收方的通道没有问题,但是接收方到发送方的通道还需要 ACK 信号来进行验证。

    TCP四次挥手

    断开一个 TCP 连接则需要“四次挥手”:

    • 客户端-发送一个 FIN,用来关闭客户端到服务器的数据传送
    • 服务器-收到这个 FIN,它发回一 个 ACK,确认序号为收到的序号加1 。和 SYN 一样,一个 FIN 将占用一个序号
    • 服务器-关闭与客户端的连接,发送一个FIN给客户端
    • 客户端-发回 ACK 报文确认,并将确认序号设置为收到序号加1

    为什么要四次挥手

    任何一方都可以在数据传送结束后发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。

    举个例子:A 和 B 打电话,通话即将结束后,A 说“我没啥要说的了”,B回答“我知道了”,但是 B 可能还会有要说的话,A 不能要求 B 跟着自己的节奏结束通话,于是 B 可能又巴拉巴拉说了一通,最后 B 说“我说完了”,A 回答“知道了”,这样通话才算结束。

    上面讲的比较概括,推荐一篇讲的比较细致的文章:https://blog.csdn.net/qzcsu/article/details/72861891

    三 TCP、UDP 协议的区别

    TCP、UDP协议的区别

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

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

    四 TCP 协议如何保证可靠传输

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

    停止等待协议

    • 停止等待协议是为了实现可靠传输的,它的基本原理就是每发完一个分组就停止发送,等待对方确认。在收到确认后再发下一个分组;
    • 在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认;

    1) 无差错情况:

    发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。

    2) 出现差错情况(超时重传):停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为 自动重传请求 ARQ 。另外在停止等待协议中若收到重复分组,就丢弃该分组,但同时还要发送确认。连续 ARQ 协议 可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。

    3) 确认丢失和确认迟到

    • 确认丢失:确认消息在传输过程丢失

      当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程中丢失。而A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:
      1. 丢弃这个重复的M1消息,不向上层交付。
      2. 向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。
    • 确认迟到 :确认消息在传输过程中迟到

      A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时A收到了B第二次发送的确认消息。接着发送其他数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:
      1. A收到重复的确认后,直接丢弃。
      2. B收到重复的M1后,也直接丢弃重复的M1。

    自动重传请求 ARQ 协议

    停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重传时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。

    优点: 简单

    缺点: 信道利用率低

    连续ARQ协议

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

    优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。

    缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认。发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。

    滑动窗口

    • TCP 利用滑动窗口实现流量控制的机制。
    • 滑动窗口(Sliding window)是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。
    • TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据。当滑动窗口为 0 时,发送方一般不能再发送数据报,但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程。另一种情况是发送方可以发送一个 1 字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。

    流量控制

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

    拥塞控制

    在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。拥塞控制就是为了防止过多的数据注入到网络中,这样就可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机,所有的路由器,以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是个端到端的问题。流量控制所要做到的就是抑制发送端发送数据的速率,以便使接收端来得及接收。

    为了进行拥塞控制,TCP 发送方要维持一个 拥塞窗口(cwnd) 的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。

    TCP的拥塞控制采用了四种算法,即 慢开始拥塞避免快重传快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。

    • 慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
    • 拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1.
    • 快重传与快恢复:
      在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停。在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认。如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。  当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作。当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
      快重传与快恢复

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

    百度好像最喜欢问这个问题。

    打开一个网页,整个过程会使用哪些协议

    图解(图片来源:《图解HTTP》):

    状态码

    总体来说分为以下几个过程:

    1. DNS解析
    2. TCP连接
    3. 发送HTTP请求
    4. 服务器处理请求并返回HTTP报文
    5. 浏览器解析渲染页面
    6. 连接结束

    具体可以参考下面这篇文章:

    六 状态码

    状态码

    七 各种协议与HTTP协议之间的关系

    一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。

    图片来源:《图解HTTP》

    各种协议与HTTP协议之间的关系

    八 HTTP长连接、短连接

    在HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。

    而从HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头加入这行代码:

    Connection:keep-alive

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。

    HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。

    —— 《HTTP长连接、短连接究竟是什么?》

    写在最后

    计算机网络常见问题回顾

    • ①TCP三次握手和四次挥手、
    • ②在浏览器中输入url地址->>显示主页的过程
    • ③HTTP和HTTPS的区别
    • ④TCP、UDP协议的区别
    • ⑤常见的状态码。

    建议

    非常推荐大家看一下 《图解HTTP》 这本书,这本书页数不多,但是内容很是充实,不管是用来系统的掌握网络方面的一些知识还是说纯粹为了应付面试都有很大帮助。下面的一些文章只是参考。大二学习这门课程的时候,我们使用的教材是 《计算机网络第七版》(谢希仁编著),不推荐大家看这本教材,书非常厚而且知识偏理论,不确定大家能不能心平气和的读完。

    参考

    ------

    【感谢您能看完,如果能够帮到您,麻烦点个赞~】

    更多经验技术欢迎前来共同学习交流:一点课堂-为梦想而奋斗的在线学习平台 http://www.yidiankt.com/

    想要深入学习的同学们可以关注私信我,一起学习讨论~还有全套资源分享,经验探讨,等你哦!

    展开全文
  • udp协议 tcp协议 端口179 端口169 正确答案:B C 在BGP中,路由器对使用179端口的半永久TCP连接来交换选路信息。–课本上原话 BGP协议运行在OSI模型的哪一层() 物理层 数据链路层 网络层 传输层 会话层 表示层 ...

    internet骨干网中的路由器通过BGP协议传输数据,BGP协议使用传输层的协议与端口有( )
    udp协议
    tcp协议
    端口179
    端口169
    正确答案:B C

    在BGP中,路由器对使用179端口的半永久TCP连接来交换选路信息。–课本上原话

    BGP协议运行在OSI模型的哪一层()
    物理层
    数据链路层
    网络层
    传输层
    会话层
    表示层
    应用层
    正确答案:应用层

    BGP是应用层协议,它是基于TCP的
    RIP是应用层协议 基于UDP
    OSPF是网络层协议 基于IP数据报

    以下哪些是BGP的公认自选属性?
    AS路径
    起点属性
    聚合属性
    本地优先级
    下一跳
    自动聚合属性

    D F

    只有报文头的BGP 报文是( )

    KeepAlive 报文

    展开全文
  • 一 OSI与TCP/IP各层的结构与功能,都有哪些协议 五层协议的体系结构1 应用层 ... 运输层主要使用以下两种协议UDP 的主要特点TCP 的主要特点 3 网络层4 数据链路层5 物理层总结一下 二 TCP 三次握手和四次挥手...
  • 计算机网络之常见面试题总结

    千次阅读 2020-10-19 08:36:55
    总: ...4.1 运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 4.2 UDP 4.3 TCP 4.3.1 TCP如何实现数据的可靠性? 4.3.2 TCP协议如何提高传输效率? 4.4 TCP与UDP的区别? 4.5 TCP协议段格
  • 计算机网络总结

    2020-03-16 12:34:32
    运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 3 网络层 4 数据链路层 5 物理层 总结一下 二 TCP 三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回 SYN...
  • 一 OSI与TCP/IP各层的结构与功能,都有...运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 3 网络层 4 数据链路层 5 物理层 总结一下 二 TCP 三次握手和四次挥手(面试常客) 为什...
  • 1、以下哪些协议不是应用层通信协议? A、HTTP、TELNET B、FTP、SMTP C、SNMP、NBNS D、ICMP、ARP 2、Ping命令是使用以下哪个协议实现的() A、UDP B、ARP C、IGMP D、ICMP E、SMTP ICMP(Internet Control ...
  • 计算机网络

    2019-06-04 19:25:17
    运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 3 网络层 4 数据链路层 5 物理层 总结一下 二 TCP 三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回 SYN 传了 SYN,为啥还要传 ACK 为...
  • 面试题合集1

    2016-09-04 23:33:00
    1.关于HTTP协议的说法,以下哪些说法是不正确的()? 有状态,前后请求有关联关系 FTP也可以使用HTTP协议 HTTP响应包括数字状态码,200代表此次请求有正确返回 HTTP和TCP,UDP在网络分层里是同一层次的协议 ...
  • 运输层主要使用以下两种协议 UDP 的主要特点 TCP 的主要特点 3 网络层 4 数据链路层 5 物理层 总结一下 二 TCP 三次握手和四次挥手(面试常客) 为什么要三次握手 为什么要传回 SYN 传了 SYN,为啥还要传 ACK 为什么...
  • 计算机网络学习路线

    2020-04-03 17:12:08
    运输层主要使用以下两种协议UDP的主要特点: TCP的主要特点: 域名系统(Domain Name System缩写DNS,Domain Name被译为域名) HTTP协议 五层协议的体系结构 1 ...
  • 搞定计算机网络面试

    2019-05-08 20:21:31
    运输层主要使用以下两种协议UDP的主要特点: TCP的主要特点: 域名系统(Domain Name System缩写DNS,Domain Name被译为域名) HTTP协议 五层协议的体系结构 1 应用层(application ...
  • 计算机网络知识小结

    2018-08-21 22:49:49
    运输层主要使用以下两种协议UDP的主要特点: TCP的主要特点: 域名系统(Domain Name System缩写DNS,Domain Name被译为域名) HTTP协议 五层协议的体系结构 1 应用层(application layer) 2 ...
  • nsfocus笔试题

    2012-10-11 20:11:14
    1、以下哪些协议不是应用层通信协议? A、HTTP、TELNET B、FTP、SMTP C、SNMP、NBNS D、ICMP、ARP 2、Ping命令是使用以下哪个协议实现的() A、UDP B、ARP C、IGMP D、ICMP
  • 利用命令参数,命令可以显示所有协议的使用状态,这些协议包括TCP协议、UDP协议以及IP协议等,另外还可以选择特定的协议并查看其具体信息,还能显示所有主机的端口号以及当前主机的详细路由信息。 命令格式: ...
  • 计算机网络复习题

    2014-12-29 19:01:35
    4、什么叫流量控制,试简述TCP的流量控制机制,UDP协议中有流量控制吗? 答: (1)为了防止快速的发送设备发出的数据过多,导致慢速的接收设备处理不过来而发生大量数据丢失(淹没慢速的接收设备)所采取的限制措施...
  • 1)下面哪种方式可以让爬虫合理、合法地抓取当日尽可能多的数据? A.... ...B.... tcp,udp传输协议 B. 反汇编技术 C. 数据库存储 D. 音视频流解析 E. 网络路由协议 F. 以上都会涉及
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    要想查询系统提供哪些Shell,可以使用chsh -l 命令,见图1所示。 图1 系统可以使用的Shell类型 从图1中可以看到,笔者系统中可以使用的Shell有bash(缺省)、csh、sh、tcsh四种。 exit 1.作用 exit命令的作用是...
  • 华为HCNE题库大全

    2009-10-11 12:21:19
    1、在无盘工作站向服务器申请IP地址时,使用的是( )协议。 A、ARP B、RARP C、ICMP D、IGMP ANSWER:B 2、提供可靠数据传输、流控的是OSI的第几层( ) A、表示层 B、网络层 C、传输层 D、会话层 E、链路层 ANSWER...
  • asp.net面试题

    2011-05-27 17:56:26
    17.什么是SOAP,有哪些应用。 答:SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息并执行远程过程调用的协议,是一个基于XML的协议使用SOAP,不用考虑任何特定的传输协议...

空空如也

空空如也

1 2
收藏数 33
精华内容 13
关键字:

以下哪些应用使用udp协议