精华内容
下载资源
问答
  • 计算机网络体系结构5.各层作用(1)应用层(2)运输层(3)网络层(4)数据链路层(5)物理层 一、OSI与TCP/IP各层结构与功能,都有哪些协议? 1.OSI体系结构 答:(1~7)物理层、数据链路层、网络层、运输层...

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

    1.OSI体系结构

    答:(1~7)物理层、数据链路层、网络层、运输层、会话层、表示层、应用层。

    2.TCP/IP体系结构

    答:网络接口层、网际层IP、运输层、应用层

    3.五层协议体系结构

    答:物理层、数据链路层、网络层、运输层、应用层

    4.计算机网络体系结构

    答:(1)OSI的七层协议(2)TCP/IP的四层协议(3)五层协议。

    5.各层的作用

    (1)应用层

    答:通过应用进程间的交互来完成特定网络应用。
    应用层协议定义的是应用进程(进程:主机中正在运行的程序)间的通信和交互的规则。对于不同的网络应用需要不同的应用层协议。在互联网中应用层协议很多,如域名系统DNS,支持万维网应用的HTTP协议,支持电子邮件的SMTP协议等等。我们把应用层交互的数据单元称为报文。
    域名系统DNS:将域名和IP地址相互映射的一一个分 布式数据库,能够使人更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
    HTTP协议:超文本传输协议(HTTP, HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。

    (2)运输层

    答:负责向两台主机进程之间的通信提供通用的数据传输服务。
    运输层提供以下两种协议:
    传输控制协议TCP (Transmission Control Protocol) :提供面向连接的,可靠的数据传输服务。
    用户数据协议UDP (User Datagram Protocol) :提供无连接的,尽最大努力的数据传输服务(不保证数据传输的可靠性)。

    (3)网络层

    答:选择合适的网间路由和交换结点,确保数据及时传送。(也叫IP层或网际层)。

    (4)数据链路层

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

    (5)物理层

    答:实现相邻计算机节点之间比特流的透明传送,尽可能屏蔽掉具体传输介质和物理设备的差异。

    大佬总结的七层体系结构,包含七层体系结构图

    二、TCP的三次握手和四次挥手

    我自己之前总结的,里面有三次握手四次挥手,也可参考。

    1.TCP的三次握手

    在这里插入图片描述

    (1)三次握手的过程

    客户端:发送带有SYN标志的数据包(一次握手):服务端
    服务端:发送带有SYN/ACK标志的数据包(二次握手):客户端
    客户端:发送带有带有ACK标志的数据包(三次握手):服务端
    《图解HTTP》

    (2)三次握手的目的是什么?

    答:建立可靠的通信信道,说到通讯,简单来说就是数据的发送与接
    收,而三次握手最主要的目的就是双方确认自己与对方的发送与接收是正常的。
    第一次握手: Client什么都不能确认;Server 确认了对方发送正常,自己接收正常。
    第二次握手: Client确认了:自己发送、接收正常,对方发送、接收正常;Server 确认
    了:对方发送正常,自己接收正常。
    第三次握手: Client 确认了:自己发送、接收正常,对方发送、接收正常;Server 确认
    了:自己发送、接收正常,对方发送、接收正常。
    所以三次握手就能确认双发收发功能都正常,缺一不可。

    (3)为什么要传回 SYN?

    答:SYN是TCP/IP建立连接时使用的握手信号。
    接收端传回发送端所发送的SYN是为了告诉发送端,我接收到的信息确实就是你所发送的信号了。

    (4)传了 SYN,为啥还要传 ACK?

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

    (5)可以四次握手(超出三次的握手)吗?

    答:可以。发生四次握手的情况:(1)发生丢包的情况;(2)SYN+ACK拆开

    (6)可以两次握手(小于三次的握手)吗?

    答:不可以。

    2.TCP的四次挥手

    在这里插入图片描述

    (1)关闭TCP连接(四次挥手)的过程

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

    (2)四次挥手的目的是什么?

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

    (3)可不可以三次挥手?

    答:不可以。因为第二次ACK是系统内核实现的ACK响应, 而FIN是用户程序手动关闭。

    (4)可不可以五次挥手?

    答:可以。因为可以让用户程序在关闭连接前处理需要的任务(如释放资源)。

    (5)在第三次数据传输,服务端发送FIN请求到客户端,客户端处于TIME_ WAIT,为什么不能设置为CLOSED?

    答:因为第四次ACK响应报文可能丢包,导致服务端无法关闭连接,需要服务端重新发送FIN请求,所以客户端必须等待最大超时时间(2MSL)。

    (6)为什么TIME_WAIT的时间是2MSL?

    答:(1)MSL是TCP报文的最大生存时间, 因此TIME_WAIT持续存在2MSL的话就能保证在两个传输方向上的尚未被接收或迟到的报文段都已经消失(否则服务器立刻重启, 可能会收到来自上一个进程的迟到的数据, 但是这种数据很可能是错误的);(2)同时也是在理论上保证最后一个报文可靠到达(假设最后一个ACK丢失, 那么服务器会再重发一个FIN。这时虽然客户端的进程不在了, 但是TCP连接还在, 仍然可以重发LAST_ACK)。返回的ACK传输时间+服务端重新发送FIN的传输时间。

    三、TCP协议如何保证可靠传输

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

    四、TCP,UDP 协议的区别

    在这里插入图片描述
    UDP在传送数据之前不需要先建立连接,远地主机在收到UDP报文后,不需要给出任何确认。虽然UDP不提供可靠交付,但在某些情况下UDP确是一种最有效的工作方式(一般用于即时通信),比如: QQ语音、QQ视频、直播等等。
    TCP提供面向连接的服务。在传送数据之前必须先建立连接,数据传送结束后要释放连接。TCP不提供广播或多播服务。由于TCP要提供可靠的,面向连接的传输服务(TCP的可靠体现在TCP在传递数据之前,会有三次握手来建立连接,而且在数据传递时,有确认、窗口、重传、拥塞控制机制,在数据传完后,还会断开连接用来节约系统资源),这一难以避免增加了许多开销,如确认,流量控制,计时器以及连接管理等。这不仅使协议数据单元的首部增大很多,还要占用许多处理机资源。TCP 一般用于文件传输、发送和接收邮件、远程登录等场景。

    附个链接 是我之前总结的UDP和TCP协议

    (https://blog.csdn.net/qq_45605223/article/details/105776141)
    UDP和TCP协议
    里面有详细讲TCP的机制

    展开全文
  • OSI与TCP/IP各层结构与功能,都有哪些协议 五层协议的体系结构 学习计算机网络时我们一般采用折中办法,也就是中和 OSI 和 TCP/IP 优点,采用一种只有五层协议的体系结构,这样既简洁又能将概念阐述清楚 应用...

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

    五层协议的体系结构

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

    应用层

    应用层(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 等。

    简单理解,DNS负责域名和IP地址的映射,如www.baidu.com这个域名可能对应192.168.111.001

    HTTP协议

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

    运输层

    运输层的主要任务就是负责向两台主机进程之间的通信提供通用的数据传输服务。应用进程利用该服务传送应用层报文

    运输层主要使用以下两种协议
    • 传输控制协议 TCP --提供面向连接的,可靠的数据传输服务
    • 用户数据协议 UDP–提供无连接的,尽最大努力的数据传输服务

    TCP
    UDP

    网络层

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

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

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

    数据链路层

    数据链路层(data link layer)通常简称为链路层。两台主机之间的数据传输,总是在一段一段的链路上传送的,这就需要使用专门的链路层的协议在两个相邻节点之间传送数据时,数据链路层将网络层交下来的 IP 数据报组装程帧,在两个相邻节点间的链路上传送帧。每一帧包括数据和必要的控制信息(如同步信息,地址信息,差错控制等)
    在接收数据时,控制信息使接收端能够知道一个帧从哪个比特开始和到哪个比特结束。这样,数据链路层在收到一个帧后,就可从中提出数据部分,上交给网络层。 控制信息还使接收端能够检测到所收到的帧中有误差错。如果发现差错,数据链路层就简单地丢弃这个出了差错的帧,以避免继续在网络中传送下去白白浪费网络资源。如果需要改正数据在链路层传输时出现差错(这就是说,数据链路层不仅要检错,而且还要纠错),那么就要采用可靠性传输协议来纠正出现的差错。这种方法会使链路层的协议复杂些。

    物理层

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

    在这里插入图片描述


    TCP协议如何保证可靠传输

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

    停止等待协议

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

    在这里插入图片描述
    发送方发送分组,接收方在规定时间内收到,并且回复确认.发送方再次发送。

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

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

    连续 ARQ 协议 可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认。接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。这样就避免每发一个分组都要等待确认,降低传输效率

    确认丢失和确认迟到

    这里的确认是名词而非动词,作为确认消息的含义

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

    在这里插入图片描述
    当A发生M1消息,B收到后向A发生M1确认消息,但却在传输过程中丢失,这样A就接收不到M1确认消息,认为B没有接收到M1消息,于是在超时计时后,A重传M1消息,B再次收到该消息后采取以下两点措施:

    1. 丢弃这个重复的消息,不向上层交付
    2. 向A发生确认消息
    确认迟到:确认消息在传输过程中迟到

    在这里插入图片描述
    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地址 ->> 显示主页的过程(面试常客)

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

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

    在这里插入图片描述

    比如IE下输入www.baidu.com,整个过程涉及到的网络协议

    1.本地过程

    1. 若DNS缓存中没有相关数据,则IE浏览器向DNS服务器发出DNS请求,获取www.baidu.com对应的IP地址
    2. 将域名解析的结果以域名对应IP地址的形式写入DNS缓存表

    2.IE浏览器与www.baidu,com建立TCP连接:TCP建立连接的三次握手

    1. IE浏览器向www.baidu.com发出TCP连接请求报文
    2. 进行TCP连接的三次握手

    在这个过程中,任何一个报文出错或超时,都要进行重传

    3.IE浏览器开始HTTP访问

    1. IE浏览器向www.baidu,com发出HTTP-GET请求报文
    2. 服务器解析HTTP请求报文,返回HTTP响应报文
    3. 浏览器解析响应渲染页面
    4. 连接结束

    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和HTTPS的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此,HTTP协议不适合传输一些敏感信息,比如:信用卡号、密码等支付信息。

    为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

    HTTPS:是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL

    区别

    1. https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用
    2. http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议
    3. http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443
    4. http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全

    HTTPS工作原理

    客户端发起HTTPS请求

    这个没什么好说的,就是用户在浏览器里输入一个https网址,然后连接到server的443端口。

    服务端的配置

    采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请,区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面(startssl就是个不错的选择,有1年的免费服务)

    这套证书其实就是一对公钥和私钥,如果对公钥和私钥不太理解,可以想象成一把钥匙和一个锁头,只是全世界只有你一个人有这把钥匙,你可以把锁头(公钥就是锁头)给别人,别人可以用这个锁把重要的东西锁起来,然后发给你,因为只有你一个人有这把钥匙,所以只有你才能看到被这把锁锁起来的东西

    传送证书

    这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等

    客户端解析证书

    这部分工作是有客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。

    如果证书没有问题,那么就生成一个随机值,然后用证书对该随机值进行加密,就好像上面说的,把随机值用锁头锁起来,这样除非有钥匙,不然看不到被锁住的内容。

    传送加密信息

    这部分传送的是用证书加密后的随机值,目的就是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了

    服务段解密信息

    服务端用私钥解密后,得到了客户端传过来的随机值(私钥),然后把内容通过该值进行对称加密,所谓对称加密就是,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够彪悍,私钥够复杂,数据就够安全。

    传输加密后的信息

    这部分信息是服务段用私钥加密后的信息,可以在客户端被还原。

    客户端解密信息

    客户端用之前生成的私钥解密服务段传过来的信息,于是获取了解密后的内容,整个过程第三方即使监听到了数据,也束手无策

    展开全文
  • 网络的几种分层体系结构2. 建立TCP服务器各个系统调用3. socket网络编程有哪些系统调用?其中close是一次就能直接关闭吗,半关闭状态是怎么产生?4. MTU和MSS5. 对路由协议了解与介绍6. 路由协议所使用...

    计算机网络常见面试问题和解析

    1. 网络的几种分层体系结构

    在这里插入图片描述
    (1)OSI七层模型

    • 物理层: 通过媒介传输比特,确定机械及电气规范,传输单位为 bit,主要包括的协议为: IEE802.3 CLOCK RJ45
    • 数据链路层: 将比特组装成帧和点到点的传递,传输单位为帧,主要包括的协议为 MAC VLAN PPP
    • 网络层:负责数据包从源到宿的传递和网际互连,传输单位为包,主要包括的协议为 IP ARP ICMP
    • 传输层:提供端到端的可靠报文传递和错误恢复,传输单位为报文,主要包括的协议为 TCP UDP
    • 会话层:建立、管理和终止会话,传输单位为 SPDU,主要包括的协议为 RPC NFS
    • 表示层: 对数据进行翻译、加密和压缩,传输单位为 PPDU,主要包括的协议为 JPEG ASII
    • 应用层: 允许访问 OSI 环境的手段,传输单位为 APDU,主要包括的协议为 FTP HTTP DNS
      在这里插入图片描述

    (2)TCP/IP 4 层模型包括:

    1)网络接口层:MAC VLAN
    2)网络层:IP ARP ICMP
    3)传输层:TCP UDP
    4)应用层:HTTP DNS SMTP

    (3)OSI七层模型和TCP/IP四层模型的关系

    1)OSI定义了服务、接口、分层、协议的概念,TCP/IP借鉴了OSI的这个概念建立了TCP/IP模型。
    2)OSI先有模型,后有协议,先有标准,后进行实践,而TCP/IP则相反。
    3)OSI是一种理论模型,而TCI/IP已经被广泛使用,成为网络互连实际上的标准。

    2. 建立TCP服务器的各个系统调用

    建立一个TCP服务器需要涉及到以下的几个系统调用:

    • socket():开启一个套接字
    • bind():绑定IP地址和端口号,注意绑定的时候,服务器一般是要主动绑定IP地址和端口号的,但是客户端一般是不需要的,因为客户端发送连接的时候,内核会自动分配一个端口号给它。
    • listen():监听是否有客户端请求
    • accept():阻塞进程,等待客户端的接入,接入之后产生收发的另外一个套接字,注意客户端的地址和端口号是在accept接收到的参数中找到的。
    • send():有客户端的接入之后,发送数据 receive():有客户端接入之后,接收数据 close():关闭套接字
      在这里插入图片描述

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

    除了上面网络编程的一些常见的系统调用之后,还有客户端的一些调用;

    1).connect():客户端主动连接函数,调用这个函数的时候,会添加自己客户端的地址和端口号

    2).select():非阻塞监控函数,这个函数非常的重要,一句话说不清楚。

    client_sd即使返回的新的套接字,连接套接字,通过连接套接字进行数据的传输。但是上述这种accept()方式存在i一个很大的问题!!!!——即如果没有tcp请求会一直阻塞,而且用户无法得知,效率极低。为了解决上述的办法,引进了套接字监控宏函数。

    下面直接给出一个具体的实例是如何调用的,直接给出实例是如何调用的:
    在这里插入图片描述
    上述用的4个操作宏到底有什么用,如何定义的呢??、下面进行详细的介绍:

    FD_ZERO,FD_ISSET这些都是套节字结合操作宏 ,看看MSDN上的select函数, 这是在select io模型中的核心,用来管理套节字IO的,避免出现无辜锁定.

    int  select(int nfds,fd_set FAR *readfds, fd_set FAR *writefds, fd_set FAR *exceptfds, const struct timeval FAR *timeout); 
    

    第一个参数在windows下可以忽略,但在linux下必须设为最大文件描述符加1;二是结构fd_set在两个系统里定义不一样)。

    所以代码中对这个位置也有特别的注意,为什么对三个套接字取了最大值:

    max_sd表示正在被使用的socket类

    最后的是超时标准,select是阻塞操作当然要设置超时事件. 接着的三个类型为fd_set的参数分别是用于检查套节字的可读性,可写性,和列外数据性质.

    我举个例子 :比如recv(), 在没有数据到来调用它的时候,你的线程将被阻塞如果数据一直不来,你的线程就要阻塞很久.这样显然不好.所以采用select来查看套节字是否可读(也就是是否有数据读了)

    步骤如下

    socket   s; 
    ..... 
    fd_set   set; 
    while(1) 
    {     
        FD_ZERO(&set);//将你的套节字集合清空 
        FD_SET(s,   &set);//加入你感兴趣的套节字到集合,这里是一个读数据的套节字s 
        select(0,&set,NULL,NULL,NULL);//检查套节字是否可读, 
                                                          //很多情况下就是是否有数据(注意,只是说很多情况)
                                                          //这里select是否出错没有写 
        if(FD_ISSET(s,   &set)   //检查s是否在这个集合里面, 
        {                                           //select将更新这个集合,把其中不可读的套节字去掉 
                                                    //只保留符合条件的套节字在这个集合里面               
                recv(s,...); 
        } 
        //do   something   here 
    }
    

    也就是说,我们得检测我们选定的套接字中此时可不可读,如果不可读我们就将套接字刷新掉,不比一直进行阻塞等待,等中心建立新的套接字,在进行下一轮,提高之前说的阻塞效率。

    3)poll函数:类似select函数,也出管理处理多个描述符,只是管理集合的方式不太一样。
    缺点:每次都需要把FD监控的描述符从用户态拷贝到内核态。

    4)shutdown: 立即关闭进程,不用考虑套接字的引用计数,close并不能,可能还会早上半关闭状态。

    5)close是一次就能直接关闭的吗,半关闭状态是怎么产生的?首先回答第一个,close并不是一次就能直接关闭,调用close只能将套接字的引用计数减1,可能其他进程还在使用这个套接字,所以并不是直接关闭

    同时在TCP协议中,发送关闭请求时,需要对方回复确认请求,否则不能确认,就会造成一个办半关闭的状态,这个时候可以接收,不能发送。

    4. MTU和MSS

    在这里插入图片描述
    MTU: Maximum Transmit Unit,最大传输单元,即物理接口(数据链路层)提供给其上层(通常是IP层)最大一次传输数据的大小;以普遍使用的以太网接口为例,缺省MTU=1500 Byte,这是以太网接口对IP层的约束,如果IP层有<=1500 byte 需要发送,只需要一个IP包就可以完成发送任务;如果IP层有> 1500 byte 数据需要发送,需要分片才能完成发送,这些分片有一个共同点,即IP Header ID相同。

    MSS:Maximum Segment Size ,TCP提交给IP层最大分段大小,不包含TCP Header和 TCP Option,只包含TCP Payload ,MSS是TCP用来限制application层最大的发送字节数。如果底层物理接口MTU= 1500 byte,则 MSS = 1500- 20(IP Header) -20 (TCP Header) = 1460 byte,如果application 有2000 byte发送,需要两个segment才可以完成发送,第一个TCP segment = 1460,第二个TCP segment = 540。

    tcp 通讯 MSS 确定
    在这里插入图片描述
    如上图 端口53842 为 A; 端口 80 为 B。

    见上图,TCP SYN消息,A 发送给B 的MSS= 1460,告诉B,B发给A最大segment 为1452 byte.

    以后每次通讯,可以看出发送的数据都是 1452 byte。

    由上图,可以发现 MSS 的值,取决与 发送端和接收端两者较小的 MSS 的值。

    5. 对路由协议的了解与介绍

    静态路由和动态路由,静态路由用于局域网,内部网络,动态路由用于大型的交换式路由

    • RIP:基于距离向量的路由协议,通过计算距离来选择路由的路径
    • OSPF:基于链路状态型的路由,给每一个路径有一个权重,并计算路径的代价最小值,选择这条路径
    • EGP:外部网关协议
    • BGP:一种常见的外部网关协议,一种矢量的路由协议,它通过维护IP路由表或‘前缀’表来实现自治系(AS)之间的可达性。

    6. 路由协议所使用的算法

    路由算法主要分以下两类:

    总体式路由算法:每个路由器都拥有网络中其他路由器的全部信息,以及网络的流量状态。也叫LS (链路状态)算法。
    分散式路由算法:每个路由器只有与它直接相连的路由器的信息,没有网络中每个路由器的信息。也叫DV (距离向量)算法。

    LS算法

    链路状态算法(也称最短路径算法)发送路由信息到互联网上所有的结点,对于每个路由器,仅发送它的路由表中描述了其自身链路状态的那一部分。

    采用LS算法时,每个路由器必须遵循以下步骤:

    1、确认在物理上与之相连的路由器并获得它们的IP地址。当一个路由器开始工作后,它首先向整个网络发送一个“HELLO”分组数据包。每个接收到数据包的路由器都将返回一条消息,其中包含它自身的IP地址。

    2、测量相邻路由器的延时(或者其他重要的网络参数,比如平均流量)。为做到这一点,路由器向整个网络发送响应分组数据包。每个接收到数据包的路由器返回一个应答分组数据包。将路程往返时间除以2,路由器便可以计算出延时。(路程往返时间是网络当前延迟的量度,通过一个分组数据包从远程主机返回的时间来测量。)该时间包括了传输和处理两部分的时间——也就是将分组数据包发送到目的地的时间以及接收方处理分组数据包和应答的时间。

    3、向网络中的其他路由器广播自己的信息,同时也接收其他路由器的信息。
    在这一步中,所有的路由器共享它们的知识并且将自身的信息广播给其他每一个路由器。这样,每一个路由器都能够知道网络的结构以及状态。

    4、使用一个合适的算法,确定网络中两个节点之间的最佳路由。

    在这一步中,路由器选择通往每一个节点的最佳路由。它们使用一个算法来实现这一点,如Dijkstra最短路径算法。在这个算法中,一个路由器通过收集到的其他路由器的信息,建立一个网络图。这个图描述网络中的路由器的位置以及它们之间的链接关系。每个链接都有一个数字标注,称为权值或成本。这个数字是延时和平均流量的函数,有时它仅仅表示节点间的跃点数。例如,如果一个节点与目的地之间有两条链路,路由器将选择权值最低的链路。

    DV算法

    距离向量算法(也称为Bellman-Ford算法)则要求每个路由器发送其路由表全部或部分信息,但仅发送到邻近结点上。从本质上来说,链路状态算法将少量更新信息发送至网络各处,而距离向量算法发送大量更新信息至邻接路由器。由于链路状态算法收敛更快,因此它在一定程度上比距离向量算法更不易产生路由循环。但另一方面,链路状态算法要求比距离向量算法有更强的CPU能力和更多的内存空间,因此链路状态算法将会在实现时显得更昂贵一些。

    Dijkstra算法执行下列步骤:

    1、路由器建立一张网络图,并且确定源节点和目的节点,我们设为V1和V2。然后路由器建立一个矩阵,称为“邻接矩阵”。在这个矩阵中,各矩阵元素表示权值。例如,[i, j]是节点Vi与Vj之间的链路权值。如果节点Vi与Vj之间没有链路直接相连,它们的权值设为“无穷大”。

    2、路由器为网路中的每一个节点建立一组状态记录。此记录包括三个字段:
    前序字段——表示当前节点之前的节点。
    长度字段——表示从源节点到当前节点的权值之和。
    标号字段——表示节点的状态。每个节点都处于一个状态模式:“永久”或“暂时”。

    3、路由器初始化(所有节点的)状态记录集参数,将它们的长度设为“无穷大”,标号设为“暂时”。

    4、路由器设置一个T节点。例如,如果设V1是源T节点,路由器将V1的标号更改为“永久”。当一个标号更改为“永久”后,它将不再改变。一个T节点仅仅是一个代理而已。

    5、路由器更新与源T节点直接相连的所有暂时性节点的状态记录集。

    6、路由器在所有的暂时性节点中选择距离V1的权值最低的节点。这个节点将是新的T节点。

    7、如果这个节点不是V2(目的节点),路由器则返回到步骤5。

    8、如果节点是V2,路由器则向前回溯,将它的前序节点从状态记录集中提取出来,如此循环,直到提取到V1为止。这个节点列表便是从V1到V2的最佳路由。

    7. 路由表的项目包括哪些

    路由表中表项内容一bai般包括:

    1、destination:目的du地址,用来标识IP包的目的地址或者目的网络。zhi

    2、mask:网络掩码,与目的地址一起标识目的主机或者路由器所在的网段的地址。

    3、pre:标识路由加入IP路由表的优先级。可能到达一个目的地有多条路由,但是优先级的存在让他们先选择优先级高的路由进行利用。

    4、nexthop:下一跳IP地址,说明IP包所经过的下一个路由器。

    5、interface:输出接口,说明IP包将从该路由器哪个接口转发。

    6、cost:路由开销,当到达一个目的地的多个路由优先级相同时,路由开销最小的将成为最优路由。

    8. 地址解析协议ARP的过程

    地址解析协议,即 ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。 它是IPv4中网络层必不可少的协议,不过在IPv6中已不再适用,并被邻居发现协议(NDP)所替代。
    在这里插入图片描述
    1)当主机 A 向本局域网上的某台主机 B 发送 IP 数据报时,就先在其 ARP 高速缓存中查看有无主机 B 的 IP 地址。如有,就在 ARP 高速缓存中查出其对应的硬件地址,再把这个硬件地址写入 MAC 帧,然后通过局域网把该 MAC 帧发往此硬件地址。
    2)也有可能查不到主机 B 的 IP 地址。这可能主机 B 才入网,或者主机 A 刚刚加电,其高速缓存还是空的。这种情况下,主机 A 自动运行 ARP,然后按照以下步骤找出主机 B 的硬件地址。

    • ARP进程在本局域网上广播一个ARP请求分组。ARP请求报文中的发送端IP地址和发送端MAC地址为主机A的IP地址和MAC地址,目标IP地址和目标MAC地址为主机B的IP地址和全0的MAC地址。
    • 本局域网所有主机运行的ARP进程收到此ARP请求分组。
    • 主机B的IP与请求分组里面的IP一致,将ARP请求报文中的发送端(即主机A)的IP地址和MAC地址存入自己的ARP表中。之后向A发送ARP响应分组(单播);其他主机则不理睬
    • 主机 A 收到从主机 B 发来的 ARP 响应分组时,就在其 ARP 高速缓存中写入主机 B 的 IP
      地址到硬件地址的映射。本机缓存是有生存期的,生存期结束后,将再次重复上面的过程。主机B的MAC地址一旦确定,主机A就能向主机B发送IP通信了。

    如果所要找的主机和源主机不在同一个局域网,则源主机发送 ARP 请求分组,找到本局域网上的一个路由器 R1 的硬件地址。剩下的工作由 R1 完成。
    ARP(地址解析协议) https://www.cnblogs.com/sxiszero/p/11053027.html
    计算机网络–ARP地址解析协议详解 https://blog.csdn.net/u013309870/article/details/77427112

    9. 网际控制报文协议ICMP的过程

    问题:

    • 1)IP 协议本身不提供差错报告和差错控制机制来保证数据报递交的有效性,在路由器无法递交一个数据报,或者数据报生存时间为 0 时,路由器都会直接丢弃掉这个数据报。尽管路由器 IP层认为这样的处理是合理的(可以提高数据报处理效率),但是在很多情况下,源主机还是期望在数据报递交出现异常的情况下得到相关的失败信息,以便进行重传或者其他处理。

      2)另一方面,IP 协议缺少一个辅助机制,即主机的管理和查询机制。在某些情况下,源主机需要确定另一个主机或者路由器是否是活跃的,对于不活跃的主机,就没有必要再向它发送数据报了,因为这是徒劳的。在另外一些情况下,一个主机的管理员期望能获得另一个主机或者路由器上的信息,以根据这些信息进行主机自身的配置、数据报发送控制等。

    解决:

    • 设计人员给 TCP/IP 协议引进了一种具有特殊用途的报文机制,称为网际报文控制协议(Internet Control Message
      Protocol,简称 ICMP), ICMP 协议是支持 IP 协议的重要机制,从 TCP/IP 的分层结构上来看,它同 IP 协议一样,处于网络层。
      但 ICMP 协议有自己的一套报文格式,且它需要使用 IP 协议来递交报文,即 ICMP 报文是放在 IP
      数据报中的数据区域发送的 。
      总之,ICMP 协议是支持 IP 协议实现的不可或缺的机制,每一种 TCP/IP 协议的实现都应该支持它。
      (1)报文类型:
    • ICMP 差错报告报文和 ICMP 查询报文,分别用于解决上面说到的两个问题。
    • 差错报告报文主要用来向 IP 数据报源主机返回一个差错报告信息,这个错误报告信息产生的原因是路由器或主机不能对当前数据报进行正常的处理,例如无法将数据报递交给有效的协议上层,又例如数据报因为生存时间TTL 为 0 而被删除等。
    • 查询报文用于一台主机向另一台主机查询特定的信息,通常查询报文都是成对出现的,即源主机发起一个查询报文,在目的主机收到该报文后,会按照查询报文约定的格式为源主机返回一个应答报文。两大种类的ICMP 报文及其常见类型如表 11­-1 所示。
      在这里插入图片描述
      https://www.cnblogs.com/qinzhou/p/8386043.html 网际控制报文协议(ICMP)

    10. 动态主机配置协议DHCP的过程

    动态主机配置协议DHCP https://www.cnblogs.com/myworld7/p/8413659.html

    11. WAN LAN WLAN VLAN的区别

    局域网(Local Area Network,LAN)

    是指在某一区域内由多台计算机互联成的计算机组。一般是方圆几千米以内。局域网可以实现文件管理、应用软件共享、打印机共享、工作组内的日程安排、电子邮件和传真通信服务等功能。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。

    广域网 (Wide Area Network,WAN)

    是一种跨越大的、地域性的计算机网络的集合。通常跨越省、市,甚至一个国家。广域网包括大大小小不同的子网,子网可以是局域网,也可以是小型的广域网。

    局域网和广域网的区别

    局域网是在某一区域内的,而广域网要跨越较大的地域,那么如何来界定这个区域呢?例如,一家大型公司的总公司位于北京,而分公司遍布全国各地,如果该公司将所有的分公司都通过网络联接在一起,那么一个分公司就是一个局域网,而整个总公司网络就是一个广域网。

    无线局域网(Wireless LAN, WLAN)

    WLAN 利用电磁波在空气中发送和接受数据,而无需线缆介质。WLAN 的数据传输速率现在已经能够达到 11Mbps,传输距离可远至 20km 以上。作为传统布线网络的一种替代方案或延伸,无线局域网把个人从办公桌边解放了出来,使他们可以随时随地获取信息,提高了员工的办公效率。

    WLAN 使用 ISM (Industrial、Scientific、Medical) 无线电广播频段通信。WLAN 的 802.11a 标准使用 5 GHz 频段,支持的最大速度为 54 Mbps,而 802.11b 和 802.11g 标准使用 2.4 GHz 频段,分别支持最大 11 Mbps 和 54 Mbps 的速度。

    那我们平时上网用的 WIFI,又是什么呢?

    WIFI 是实现无线组网的一种协议(实际上是握手协议),WIFI 是 WLAN 的一个标准。WIFI 网络工作在 2.4G 或 5G 的频段。另外 3G/4G 也属于无线上网,但协议都不一样,费用很高!

    虚拟局域网(Virtual Local Area Network,VLAN)

    虚拟局域网( VLAN ),是指网络中的站点不拘泥于所处的物理位置,根据需要灵活划分不同的逻辑子网中的一种网络技术。

    例如位于不同楼层的用户或者不同部门的用户可以根据需要加入不同的虚拟局域网:1 楼划分为 10.221.1.0 网段,2 楼划分为 10.221.2.0 网段等。

    12. 介绍一下(虚拟专用网)

    13. TCP和UDP的区别

    1)、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接

    2)、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付

    3)、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的

    UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)

    4)、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信

    5)、TCP首部开销20字节;UDP的首部开销小,只有8个字节

    6)、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道

    14. TCP如何保证数据的正确性

    • 1)、序列号、确认应答、超时重传
      数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会 说明了它下一次需要接收的数据序列号。如果发送发迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是 2*RTT(报文段往返时间)+一个偏差值。
    • 2)、窗口控制与高速重发控制/快速重传(重复确认应答)
      TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控 制,每一个没收到确认应答的数据都要重发。使用窗口控制,如果数据段 1001-2000 丢失,后面数据每次传输,确认应答都会不停地发送 序号为 1001 的应答,表示我要接收1001 开始的数据,发送端如果收到 3 次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒…
    • 3)、拥塞控制 如果把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵(大家都在用网,你在这狂发,吞吐量就那么大,当然会堵),甚至造成网络的瘫痪。所以 TCP 在为了防止这种情 况而进行了拥塞控制。
      慢启动:定义拥塞窗口,一开始将该窗口大小设为 1,之后每次收到确认应答(经过一个 rtt), 将拥塞窗口大小*2。
      拥塞避免:设置慢启动阈值,一般开始都设为 65536。拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答/每个 rtt,拥塞窗口大小+1),以此来避免拥塞。 将报文段的超时重传看做拥塞,则一旦发生超时重传,我们需要先将阈值设为当前窗口大小 的一半,并且将窗口大小设为初值 1,然后重新进入慢启动过程。
      快速重传:在遇到 3 次重复确认应答(高速重发控制)时,代表收到了 3 个报文段,但是这 之前的 1 个段丢失了,便对它进行立即重传。
      然后,先将阈值设为当前窗口大小的一半,然后将拥塞窗口大小设为慢启动阈值+3 的大小。
      这样可以达到:在TCP 通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量, 再进入慢慢上升的过程,网络不会轻易的发生瘫痪。

    15. TCP和UDP相关的协议与端口号

    (1)TCP对应的协议

    • FTP:定义了文件传输协议,使用21端口。
    • Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
    • SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
    • POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
    • HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。

    (2)UDP对应的协议:

    • DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
    • SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
    • TFTP(Trival File Tran敏感词er Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

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

    https://blog.csdn.net/zhangliangzi/article/details/52554439 IP、TCP、UDP首部详解
    https://www.cnblogs.com/myseries/p/11239662.html HTTP报文结构和内容

    17. 网络层分片的原因与具体实现

    原因:每一种物理网络都会规定链路层数据帧的最大长度,称为链路层MTU(Maximum Transmission Unit).IP协议在传输数据包时,若IP数据报加上数据帧头部后长度大于MTU,则将数据报文分为若干分片进行传输,并在目标系统中进行重组。比如说,在以太网环境中可传输最大IP报文大小(MTU)为1500字节。如果要传输的数据帧大小超过1500字节,即IP数据报长度大于1472(1500-20-8=1472,普通数据报)字节,则需要分片之后进行传输。

    具体实现:TCP分段,IP分片

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

    两张动图-彻底明白TCP的三次握手与四次挥手 https://blog.csdn.net/qzcsu/article/details/72861891

    19. TCP握手以及每一次握手客户端和服务器端处于哪个状态(11种状态)

    在这里插入图片描述
    11种状态:
    1)、LISTEN:首先服务端需要打开一个socket进行监听,状态为LISTEN.

    2)、SYN_SENT:客户端通过应用程序调用connect进行active open.于是客户端tcp发送一个SYN以请求建立一个连接.之后状态置为SYN_SENT.

    3)、SYN_RECV:服务端应发出ACK确认客户端的SYN,同时自己向客户端发送一个SYN. 之后状态置为SYN_RECV

    4)、ESTABLISHED: 代表一个打开的连接,双方可以进行或已经在数据交互了。

    5)、FIN_WAIT1:主动关闭(active close)端应用程序调用close,于是其TCP发出FIN请求主动关闭连接,之后进入FIN_WAIT1状态.

    6)、CLOSE_WAIT:被动关闭(passive close)端TCP接到FIN后,就发出ACK以回应FIN请求(它的接收也作为文件结束符传递给上层应用程序),并进入CLOSE_WAIT.

    7)、FIN_WAIT2:主动关闭端接到ACK后,就进入了FIN-WAIT-2 .

    8)、LAST_ACK:被动关闭端一段时间后,接收到文件结束符的应用程序将调用CLOSE关闭连接。这导致它的TCP也发送一个 FIN,等待对方的ACK.就进入了LAST-ACK . /

    9)、TIME_WAIT:在主动关闭端接收到FIN后,TCP就发送ACK包,并进入TIME-WAIT状态。

    10)、CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

    11)、CLOSED: 被动关闭端在接受到ACK包后,就进入了closed的状态。连接结束

    20. 为什么使用三次握手,两次握手可不可以?

    • 因为保证可靠的最小传输的次数就是三次握手,A能发,B能收发,A能收,保证可靠,
    • 两次握手显然不可以,不仅不能保证可靠传输,可能导致失效的连接请求被服务端接收,A开始请求无效,后来重发请求成功和B通信,B后来又会和失效的A连接。

    21. TIME_WAIT的意义(为什么要等于2MSL)

    • 保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。

    22. 超时重传机制(不太高频)

    • 超时重传指的是,发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数据包丢失,就会重新发送。这个等待时间被称为RTO.
    • 检测丢失segment的方法从概念上讲还是比较简单的,每一次开始发送一个TCP segment的时候,就启动重传定时器,定时器的时间一开始是一个预设的值(Linux规定为1s),随着通讯的变化以及时间的推移,这个定时器的溢出值是不断的在变化的,有相关算法计算RTO[参考:文章…],如果在ACK收到之前,定时器到期,协议栈就会认为这个片段被丢失,重新传送数据。

    23. TCP怎么保证可靠性(面向字节流,超时重传,应答机制,滑动窗口,拥塞控制,校验等)?

    • 1.面向字节流:以流的方式传输,缓存区满了就划分为几段进行传输
      2.超时重传:发送数据包在一定的时间周期内没有收到相应的ACK,等待一定的时间,超时之后就认为这个数3.据包丢失,就会重新发送
      4.应答机制:3次握手和4次挥手
      5.滑动窗口:控制发送方发送窗口的大小,控制流量
      6.拥塞控制:控制传输上流量
      7.校验:防止数据传输过长中发生的错误

    24. 流量控制的介绍,采用滑动窗口会有什么问题(死锁可能,糊涂窗口综合征)?

    主要介绍再接收端和发送端速率不匹配的状况下,TCP协议栈滑动窗口动态调整机制产生的一种问题 叫糊涂窗口综合症,

    这个问题可以归结为小包的问题,就是由于发送端和接收端上的处理不一致,导致网络上产生很多的小包,之前也介绍过避免网络上产生过多小包的措施,比如Nagle算法。在滑动窗口机制下,如果发送端和接收端速率很不一致,也会产生这种比较犯傻的状态:发送方发送的数据,只要一个大大的头部,携带数据很少。

    对于接收端来讲,如果接收很慢,一次接收1个字节或者几个字节,这个时候接收端 缓冲区很快就会被填满,然后窗口通告为0字节,这个时候发送端停止发送,应用程序收上去1个字节后,发出窗口通告为1字节,发送方收到通告之后,发出1个字节的数据,这样周而复始,传输效率会非常低。

    同时如果发送端程序一次发送一个字节,虽然窗口足够大,但是发送仍是一个字节一个字节的传输,效率很低

    25. TCP滑动窗口协议

    TCP的滑动窗口主要有两个作用,一是提供TCP的可靠性,二是提供TCP的流控特性。同时滑动窗口机制还体现了TCP面向字节流的设计思路。
    TCP-IP详解:滑动窗口(Sliding Window) http://blog.csdn.net/wdscq1234/article/details/52444277

    26. 拥塞控制和流量控制的区别

    流量控制:端对端的流量快慢控制,并保证传输的可靠性

    拥塞控制:全局网络的拥塞情况,如果有发生丢包则通过拥塞控制减小窗口,确定出合适(慢开始 拥塞避免 快重传 快恢复)的拥塞窗口。

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

    慢开始 拥塞避免 快重传 快恢复
    1.慢开始:最初的TCP在连接建立成功后会向网络中发送大量的数据包,这样很容易导致网络中路由器缓存空间耗尽,从而发生拥塞。因此新建立的连接不能够一开始就大量发送数据包,而只能根据网络情况逐步增加每次发送的数据量,以避免上述现象的发生。

    2.拥塞避免:从慢启动可以看到,cwnd可以很快的增长上来,从而最大程度利用网络带宽资源,但是cwnd不能一直这样无限增长下去,一定需要某个限制。TCP使用了一个叫慢启动门限(ssthresh)的变量,当cwnd超过该值后,慢启动过程结束,进入拥塞避免阶段。

    3.快重传 :快速重传算法规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置重传计时器时间到期

    4.快恢复:其实快速恢复并不是单独存在的,它是快速重传的后续处理。通常认为客户端接收到3个ACK后,就会开始快速重传,但是如果还有更多的重复ACK呢,这个时候就是快速恢复要做的。

    • a、当发送方连续收到三个重复确认时,就执行“乘法减小”算法,把ssthresh门限减半(也即cwnd=ssthresh/2).但是接下去并不执行慢开始算法;

      b、考虑到此时能连续收到3个ACK,说明网络没有拥塞,执行加法原则,有几个ACK就加几个段的字节数,或者可以将cwnd=ssthresh,直接进入拥塞避免算法。

    28 网页解析的过程与实现方法

    1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件。

    2. 浏览器开始载入html代码,发现标签内有一个标签引用外部CSS文件。

    3. 浏览器又发出CSS文件的请求,服务器返回这个CSS文件。

    4. 浏览器继续载入html中部分的代码,并且CSS文件已经拿到手了,可以开始渲染页面了。

    5. 浏览器在代码中发现一个标签引用了一张图片,向服务器发出请求。此时浏览器不会等到图片下载完,而是继续渲染后面的代码。

    6. 服务器返回图片文件,由于图片占用了一定面积,影响了后面段落的排布,因此浏览器需要回过头来重新渲染这部分代码。

    7. 浏览器发现了一个包含一行Javascript代码的

    29. 应用层协议常用的端口号

    DNS (domain name system)域名系统
    用来将域名映射成IP地址,端口号为TCP或UDP的53。

    SMTP简单邮件传输协议
    TCP端口号为25。

    HTTP(hypertext transfer protocol)超文本传输协议
    用于传输internet浏览器使用的普通文本、超文本、音频和视频等数据。端口号TCP 80

    HTTPS(secure hypertext transfer protocol)安全文本传输协议
    是基于HTTP开发的,HTTPS应用了安全套接字层(SSL)作为HTTP应用层的子层,可以对数据进行加密和压缩。端口号443.

    FTP(file transfer protocol)文件传输协议
    它是基于传输层的TCP协议。

    概述:
    文件传输协议,负责将文件从一台计算机传送到另一台计算机上,并且保证其传输的可靠性,客户端提出文件传输请求,服务器接收请求并提供服务。
    过程:
    首先在本地计算机上启动FTP客户程序,利用他与远程计算机建立连接,远程计算机上的服务端FTP程序被激活。这样本地的FTP程序成为一个客户,而远程FTP程序成为服务器,他们之间通过TCP建立连接,端口号为21.
    功能:
    1、可以从本地上传和从服务器下载文件
    2、能够传输各种类型的文件,包括文件,图片,视频等
    3、能够提供对本地和远程计算机的目录操作
    4、对文件进行改名删除等操作

    FTP协议的客户机与服务器之间需要建立两个连接,一个用于控制数据传输(端口21),一个用于数据传输(端口20)。
    数据连接主要用于数据传输,完成文件内容的传输。控制连接主要用于传输FTP控制命令和服务器的回送消息。

    TFTP(trivial file transfer protocol)简单文件传输协议

    概述
    TFTP协议目标是在UDP之上建立一个类似于FTP,但仅支持文件上传和下载功能的传输协议,所以它不包含FTP协议中的目录操作和用户权限等内容。

    流程

    • server在端口为69的UDP上等待client发出写文件请求包
    • client通过UDP发送符合TFTP请求格式的WRQ包给server。从UDP包角度看,该UDP包的源端口由client随意选择,而目标端口则是client的69
    • server收到client的这个请求包后,需要发送ACK给client,对于写请求包,Server发送的ACK包确认号为0。
    • client发送DATA数据给server,server接收数据并写文件
    • 当client发送的DATA数据长度小于512字节时,server认为这次WRQ请求完成。

    优点
    每个数据包大小固定,这样在内存分配处理的时候比较直接
    实现简单
    每个数据包都有确认机制,可以实现一定程度的可靠性
    缺点
    传输效率不高
    滑动窗口机制太简单,并且该窗口仅有一个包的大小
    超时处理机制并不完善

    30. http协议与TCP联系

    • TCP协议对应于传输层,而HTTP协议对应于应用层
    • TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:“我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容,如果想要使传输的数据有意义,则必须使用到应用层协议,应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”
    • TCP和UDP是高速公路上的“卡车”,它们携带的货物就是像HTTP。

    31. http/1.0和http/1.1的区别

    (1)HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理
    HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接,服务器完成请求处理后立即断开TCP连接,服务器不跟踪每个客户也不记录过去的请求。

    HTTP 1.1则支持持久连接Persistent Connection, 并且默认使用persistent connection. 在同一个tcp的连接中可以传送多个HTTP请求和响应. 多个请求和响应可以重叠,多个请求和响应可以同时进行. 更加多的请求头和响应头(比如HTTP1.0没有host的字段).

    (2)在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-homed Web Servers),并且它们共享一个IP地址。
    HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。此外,服务器应该接受以绝对路径标记的资源请求。

    (3)100(Continue) Status(节约带宽)
    HTTP/1.1加入了一个新的状态码100(Continue)。客户端事先发送一个只带头域的请求,如果服务器因为权限拒绝了请求,就回送响应码401(Unauthorized);

    (4)HTTP/1.1在1.0的基础上加入了一些cache的新特性,当缓存对象的Age超过Expire时变为stale对象,cache不需要直接抛弃stale对象,而是与源服务器进行重新激活(revalidation)

    32. http的请求方法有哪些?get和post的区别。

    两种 HTTP 请求方法:GET 和 POST

    在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST。

    GET - 从指定的资源请求数据。
    POST - 向指定的资源提交要被处理的数据
    在这里插入图片描述

    33. http的状态码

    当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

    200 - 请求成功
    301 - 资源(网页等)被永久转移到其它URL
    404 - 请求的资源(网页等)不存在
    500 - 内部服务器错误
    

    34. http和https的区别,由http升级为https需要做哪些操作

    HTTPS的全称是Secure Hypertext Transfer Protocol(安全超文本传输协议),是在http协议基础上增加了使用SSL加密传送信息的协议

    HTTPS和HTTP的区别:

    1.https协议需要到ca申请证书,一般免费证书很少,需要交费。
    2.http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
    3.http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    4.http的连接很简单,是无状态的。 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全

    35. https的具体实现,怎么确保安全性

    HTTPS 在 HTTP 与 TCP 层之间加入了 SSL/TLS 协议。

    • 信息加密:交互信息无法被窃取,但你的号会因为「自身忘记」账号而没。
      校验机制:无法篡改通信内容,篡改了就不能正常显示,但百度「竞价排名」依然可以搜索垃圾 广告。
      身份证书:证明淘宝是真的淘宝网,但你的钱还是会因为「剁手」而没。

    (1) 混合加密

    • 通过混合加密的方式可以保证信息的机密性,解决了窃听的风险。

      HTTPS 采用的是对称加密和非对称加密结合的「混合加密」方式: 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
      在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。

      采用「混合加密」的方式的原因: 对称加密只使用一个密钥,运算速度快,密钥必须保密,无法做到安全的密钥交换。 非对称加密使用两个密钥:公钥和私钥,公钥可以任意分发而私钥保密,解决了密钥交换问题但 速度慢。

    (2). 摘要算法

    • 摘要算法用来实现完整性,能够为数据生成独一无二的「指纹」,用于校验数据的完整性,解决了篡改 的风险。
      客户端在发送明文之前会通过摘要算法算出明文的「指纹」,发送的时候把「指纹 + 明文」一同加密成密文后,发送给服务器,服务器解密后,用相同的摘要算法算出发送过来的明文,通过比较客户端携带的「指纹」和当前算出的「指纹」做比较,若「指纹」相同,说明数据是完整的。
      在这里插入图片描述

    (3). 数字证书

    • 客户端先向服务器端索要公钥,然后用公钥加密信息,服务器收到密文后,用自己的私钥解密。 这就存在些问题,如何保证公钥不被篡改和信任度?
      所以这里就需要借助第三方权威机构 CA (数字证书认证机构),将服务器公钥放在数字证书(由数字证书认证机构颁发)中,只要证书是可信的,公钥就是可信的。
      通过数字证书的方式保证服务器公钥的身份,解决冒充的风险。

    36. 在浏览器输入一个URL的流程,这个过程中浏览器做了什么(如www.baidu.com)

    1.浏览器首先通过查找内部DNS缓存,查不到依次进行系统DNS缓存,路由器缓存,DNS服务器,一步一步找到并解析IP地址。
    2.给对应IP地址的服务器发送搞一个http的请求。
    3.百度服务器响应请求,发送html的文档
    4.浏览器响应接收到的html的文档对象,解析,并显示。

    37. URL包括哪三个部分?

    URL包括:服务类型,主机名,路径及文件名

    38. 长连接与短连接的区别以及使用场景

    短连接

    连接->传输数据->关闭连接
    比如HTTP是无状态的的短链接,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。
    具体就是 浏览器client发起并建立TCP连接 -> client发送HttpRequest报文 -> server接收到报文->server handle并发送HttpResponse报文给前端,发送完毕之后立即调用socket.close方法->client接收response报文->client最终会收到server端断开TCP连接的信号->client 端断开TCP连接,具体就是调用close方法。
    也可以这样说:短连接是指SOCKET连接后,发送接收完数据后马上断开连接。
    因为连接后接收了数据就断开了,所以每次数据接受处理不会有联系。 这也是HTTP协议无状态的原因之一。

    长连接

    连接->传输数据->保持连接 -> 传输数据-> …->直到一方关闭连接,多是客户端关闭连接。
    长连接指建立SOCKET连接后不管是否使用都保持连接,但安全性较差。

    HTTP在短链接和长连接上的选择:

    HTTP是无状态的 ,也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话

    HTTP1.1和HTTP1.0相比较而言,最大的区别就是增加了持久连接支持(貌似最新的HTTP1.1 可以显示的指定 keep-alive),但还是无状态的,或者说是不可以信任的。
    如果浏览器或者服务器在其头信息加入了这行代码 Connection:keep-alive
    TCP连接在发送后将仍然保持打开状态,于是,浏览器可以继续通过相同的连接发送请求。保持连接节省了为每个请求建立新连接所需的时间,还节约了带宽。
    实现长连接要客户端和服务端都支持长连接。

    什么时候用长连接,短连接?
    长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况,。每个TCP连接都需要三步握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,次处理时直接发送数据包就OK了,不用建立TCP连接。例如:数据库的连接用长连接, 如果用短连接频繁的通信会造成socket错误,而且频繁的socket 创建也是对资源的浪费。

    而像WEB网站的http服务一般都用短链接,因为长连接对于服务端来说会耗费一定的资源,而像WEB网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连好。

    总之,长连接和短连接的选择要视情况而定。

    具体网络中的应用的话:

    http 1.0一般就指短连接,smtp,pop3,telnet这种就可以认为是长连接。一般的网络游戏应用都是长连接

    39. 一个机器能够使用的端口号上限是多少,为什么?可以改变吗?那如果想要用的端口超过这个限制怎么办?

    linux socket使用16bit无符号整型表示端口号,最大到65535,不能改变,规定了是16bit二进制数,但是可以复用,即使用同一个端口号来进行通信

    40. 介绍一下ping的过程,分别用到了哪些协议

    (1)ping的执行流程

    ping命令的执行流程见下图。

    正常执行流程可以简要描述为:ping命令接收一个IP地址或一个网络域名,如果是域名会将域名转换为IP地址。

    判断被ping的目标主机和源主机是否在一个网络上,如果不在一个网络上,则查找路由表,找到通往目标网络的路由器IP地址或默认网关IP地址。

    查找本地主机ARP表中是否有该IP对应的MAC地址;如果没有,则通过广播询问该IP的MAC地址;本网络中的主机、路由器都会接收到该询问报文。

    拥有该IP地址的本地设备回复应答报文,将该IP对应的MAC地址发给源主机。

    为了减少本地广播,本地主机、三层路由器或路由器会适时更新自己的本地ARP表,保存本地IP地址和MAC地址的对应关系。

    知道了下一步报文要发往的MAC地址,ping命令使用ICMP协议封装含有对端MAC地址的IP数据报交给交换机,交换机查找自己的MAC与port端口对应表,将数据包传给对应端口的主机。

    下面的流程只画了本机流程,交换机和路由器的流程没有画出,源主机信息发送到交换机之后,交换机和路由器根据IP数据报相关信息再一步一步的向前查找目标主机,源主机只需要等待回送回答报文。
    在这里插入图片描述
    (2)ping命令涉及的网络协议

    ping是ICMP网际控制报文协议的一个重要应用,因此ping涉及的最重要的一个协议是ICMP。

    在ping执行过程中会触发一系列动作,会附带调用其他一些协议功能,完成源主机和目标主机的请求和应答。

    DNS:域名系统(Domain Name System),TCP/IP协议中应用层协议,用于解析域名和IP地址。

    ICMP:网际控制报文协议(Internet Control Message Protocol)。用于在IP主机、路由器之间传递控制信息。

    例如检测网络连通性、主机的可达性。不传输用户数据,只传输控制信息。ICMP的数据要封装在IP数据报中进行传输。

    IGMP:网际组管理协议(Internet Group Management Protocol),该协议运行在主机和组播路由器之间。

    组播和广播的区别很简单,组播是通知部分人知道的传播形式,而广播是通知到所有人。

    IP网际协议或互联网协议(Internet Protocol)。IP协议位于TCP/IP协议的网络层,ICMP、IGMP及以上层级的报文都要经过IP协议转换封包成IP数据包向下传送。

    ARP :地址解析协议(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议。

    41. 对称密码和非对称密码体系

    1).对称密钥密码体系

    对称密钥密码体系也叫密钥密码体系,它是指消息发送方和消息接收方必须使用相同的密钥,该密钥必须保密。发送方用该密钥对待发消息进行加密,然后将消息传输至接收方,接收方再用相同的密钥对收到的消息进行解密。

    2).非对称密钥密码体系又叫公钥密码体系,它使用两个密钥:一个公共密钥PK和一个私有密钥SK。这两个密钥在数学上是相关的,并且不能由公钥计算出对应的私钥,同样也不能由私钥计算出对应的公钥。

    42. 数字证书的了解(高频)

    数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

    1)、由专门的机构签发的数字证书才安全有效。

    2)、签发数字证书是收费的。

    3)、不会被冒充,安全可信。

    4)、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

    43. 客户端为什么信任第三方证书

    第三方认证机构,是指具有可靠的执行认证制度的必要能力,并在认证过程中能够客观、公正、独立地从事认证活动的机构。即认证机构是独立于制造厂、销售商和使用者(消费者)的、具有独立的法人资格的第三方机构,故称认证为第三方认证认证机构。

    44. RSA加密算法(非对称加密,用公匙和私匙实现);

    MD5原理:MD5,全名Message Digest Algorithm 5,是一种摘要算法,通过内置的hash算法将信息摘要成为定长的十六进制字串

    RSA加密算法:与DES不同,RSA算法中,每个通信主体都有两个钥匙,一个公钥一个私钥。就是有2把钥匙:使用publicKey可以对数据进行加密,使用私钥才能对数据进行解密。

    45. MD5原理(MD5是密码散列函数)=> SHA安全散列算法替代

    MD5算法原理及其实现 https://blog.csdn.net/u012611878/article/details/54000607
    SHA安全散列算法 https://www.cnblogs.com/mengsuenyan/p/12697811.html

    46. 单条记录高并发访问的优化

    1).保证在实现功能的基础上,尽量减少对数据库的访问次数;

    2).通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担;

    3).能够分开的操作尽量分开处理,提高每次的响应速度;

    4).在数据窗口使用SQL时,尽量把使用的索引放在选择的首列;算法的结构尽量简单;

    47. 数据流和粘包问题

    产生tcp粘包和拆包的原因

    我们知道tcp是以流动的方式传输数据,传输的最小单位为一个报文段(segment)。tcp Header中有个Options标识位,常见的标识为mss(Maximum Segment Size最大消息长度)指的是,连接层每次传输的数据有个最大限制MTU(Maximum Transmission Unit),一般是1500比特,超过这个量要分成多个报文段,mss则是这个最大限制减去TCP的header,光是要传输的数据的大小,一般为1460比特。换算成字节,也就是180多字节。

    MSS = MTU - header

    tcp为提高性能,发送端会将需要发送的数据发送到缓冲区,等待缓冲区满了之后,再将缓冲中的数据发送到接收方。同理,接收方也有缓冲区这样的机制,来接收数据。

    发生TCP粘包、拆包主要是由于下面一些原因:
    应用程序写入的数据大于套接字缓冲区大小,这将会发生拆包。
    应用程序写入数据小于套接字缓冲区大小,网卡将应用多次写入的数据发送到网络上,这将会发生粘包。
    进行mss(最大报文长度)大小的TCP分段,当TCP报文长度-TCP头部长度>mss的时候将发生拆包。
    接收方法不及时读取套接字缓冲区数据,这将发生粘包。

    TCP发送数据的四种情况
    在这里插入图片描述
    假设客户端分别发送了两个数据包D1和D2给服务端,由于服务端一次读取到的字节数是不确定的,故可能存在以下4种情况。

    • 服务端分两次读取到了两个独立的数据包,分别是D1和D2,没有粘包和拆包;
    • 服务端一次接收到了两个数据包,D1和D2粘合在一起,被称为TCP粘包;
    • 服务端分两次读取到了两个数据包,第一次读取到了完整的D1包和D2包的部分内容,第二次读取到了D2包的剩余内容,这被称为TCP拆包;
    • 服务端分两次读取到了两个数据包,第一次读取到了D1包的部分内容D1_1,第二次读取到了D1包的剩余内容D1_2和D2包的整包。
    • 特例:如果此时服务端TCP接收滑窗非常小,而数据包D1和D2比较大,很有可能会发生第五种可能,即服务端分多次才能将D1和D2包接收完全,期间发生多次拆包。

    如何解决拆包粘包

    既然知道了tcp是无界的数据流,且协议本身无法避免粘包,拆包的发生,那我们只能在应用层数据协议上,加以控制。通常在制定传输数据时,可以使用如下方法:

    1、使用带消息头的协议、消息头存储消息开始标识及消息长度信息,服务端获取消息头的时候解析出消息长度,然后向后读取该长度的内容。

    2、设置定长消息,服务端每次读取既定长度的内容作为一条完整消息。

    3、设置消息边界,服务端从网络流中按消息编辑分离出消息内容。

    粘包问题及解决 https://www.cnblogs.com/zhouxuchong/p/11576275.html

    48. 一台机器最多可以建立多少tcp连接?

    链接:https://www.nowcoder.com/questionTerminal/997f45dddc9b4c8ea7da76288aa439d1
    来源:牛客网

    client最大tcp连接数

    client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short,因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。

    server最大tcp连接数

    server通常固定在某个本地端口上监听,等待client的连接请求。不考虑地址重用(unix的SO_REUSEADDR选项)的情况下,即使server端有多个ip,本地监听端口也是独占的,因此server端tcp连接4元组中只有remote ip(也就是client ip)和remote port(客户端port)是可变的,因此最大tcp连接为客户端ip数×客户端port数,对IPV4,不考虑ip地址分类等因素,最大tcp连接数约为2的32次方(ip数)×2的16次方(port数),也就是server端单机最大tcp连接数约为2的48次方。

    实际的tcp连接数

    上面给出的是理论上的单机最大连接数,在实际环境中,受到机器资源、操作系统等的限制,特别是sever端,其最大并发tcp连接数远不能达到理论上限。在unix/linux下限制连接数的主要因素是内存和允许的文件描述符个数(每个tcp连接都要占用一定内存,每个socket就是一个文件描述符),另外1024以下的端口通常为保留端口。

    对server端,通过增加内存、修改最大文件描述符个数等参数,单机最大并发TCP连接数超过10万 是没问题的,国外 Urban Airship 公司在产品环境中已做到 50 万并发 。在实际应用中,对大规模网络应用,还需要考虑C10K 问题。

    参考:
    http://wanshi.iteye.com/blog/1256282

    49. IO多路复用(select,poll,epoll的区别)(搜狗面试)

    聊聊IO多路复用之select、poll、epoll详解 https://www.jianshu.com/p/dfd940e7fca2

    50. 有没有抓过TCP包,描述一下

    tcpdump是对网络上的数据包进行截获的包分析工具,它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来去掉无用的信息。

    只能抓取流过本机的包

    tcpdump -c 10 -nn -i eth0 tcp dst port 22 //这里 src是源 dst是目的的意思

    51. 一个ip配置多个域名,靠什么识别?

    靠http中的host段来完成,服务器根据host将请求转发到指定的主机上。

    52. 服务器攻击(DDos攻击)

    分布式拒绝服务攻击,强调是将多个计算机联合起来作为攻击平台,对一个或多个目标发动DDoS攻击,从而成倍地提高拒绝服务攻击的威力。大量恶意的流量去访问同一个服务器,导致服务器处理不过来,功能瘫痪。

    展开全文
  • 问题1-4:在具有五层协议的体系结构中,如果下面一层使用面向连接服务或无连接服务,那么在上面一层是否也必须使用同样性质服务呢?或者说,是否我们可以在各层任意使用面向连接服务或无连接服务呢? 问题1-5...
  •  本书是一本关于oracle database 9i、10g 和11g 数据库体系结构的权威图书,涵盖了所有重要oracle 体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,分区和并行,以及...
  • 计算机网络常见面试题总结

    千次阅读 2020-10-19 08:36:55
    OSI、TCP/IP、五层协议的体系结构? 1.1 OSI与TCP/IP各层结构与功能,都有哪些协议 每层功能? 应用层 3.1 域名系统 3.2 HTTP协议 3.2.1 HTTP长连接、短连接 3.2.2 各种协议与HTTP协议之间关系 运输层 4.1 运输...

    一. OSI、TCP/IP、五层协议?

    1.1 OSI、TCP/IP、五层协议体系结构

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述在这里插入图片描述

    二. 每层的功能和协议?

    2.1 应用层

    • 功能:通过应用程序间的交互来完成特定网络应用。不同的网络应用需要不同的应用层协议.
    • 协议:
      在这里插入图片描述

    2.2. 运输层:

    • 功能:
      a. 向两台主机的进程之间的通信提供通用的(多种应用可以使用同一个运输层服务)数据传输服务。应用进程利用这个服务传送应用层报文。
      b. 一台主机可同时运行多个线程,故其有复用和分用的功能。复用是多个应用层进程可以同时使用下面运输层的服务。分用指运输层把收到的信息交付给向上层中的相应进程。
    • 协议:
      在这里插入图片描述

    2.3 网络层:

    • 功能:在计算机网络中的两个计算机之间的通信可能会通过很多个数据链路和通信子网。所以要选择合适的网间路由和交换结点,确保数据及时传送。在发送数据时,将运输层产生的报文段或用户数据段封装成分组(IP数据报、数据报)和包进行传送。互联网是由大量的异构(heterogeneous)网络通过路由器(router)相互连接起来的。互联网使用的网络层协议是无连接的网际协议(Intert Prococol)和许多路由选择协议,因此互联网的网络层也叫做网际层或IP层。
    • 协议:
      在这里插入图片描述

    2.4 数据链路

    • 功能:两台主机之间传输数据,是在一段链路一段链路上进行的,所以需要专门的链路层协议。两个相邻节点之间传送数据**时,数据链路层会将网络层的IP数据报封装成帧,每帧包括数据和一些控制信息。接收数据时,数据链路层可以通过控制信息知道帧的起始和结束,然后提取数据部分传给网络层。并且丢弃出差错的帧,避免浪费网络资源。
    • 协议:ppp

    2.5 物理层:

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

    三、 应用层

    3.1. 域名系统

    在这里插入图片描述

    3.2. HTTP协议

    3.2.1HTTP长连接、短连接

    HTTP的长短连接其实是TCP的长短连接。

    • a. 短连接:客户端和服务器之间每进行一次HTTP操作,就会建立一次连接。任务结束,连接断开。
    • b. 长连接:在HTTP/1.1中,默认使用长连接。在HTTP协议头部加上connection:keep-alive,连接一直保持,当一个网页打开完成之后,客户端和服务器之间用于传输HTTP数据的TCP连接不会断开。但是不会永久保持连接,可以在不同的服务器(Apache)中设置时间。但前提条件是客户端和服务器都要支持长连接。
    • c. TCP短连接: client向server发起连接请求,server接到请求,然后双方建立连接。client向server发送消息,server回应client,然后一次读写就完成了,这时候双方任何一个都可以发起close操作,不过一般都是client先发起 close操作.短连接一般只会在 client/server间传递一次读写操作。
    • d. TCP长连接:client向server发起连接,server接受client连接,双方建立连接。Client与server完成一次读写之后,它们之间的连接并不会主动关闭,后续的读写操作会继续使用这个连接。

    3.2.2 HTTP报文

    • a. 请求报文
      发生在客户端。发送HTTP请求的过程就是构建HTTP请求报文并通过TCP协议中发送到服务器指定端口(HTTP协议80/8080, HTTPS协议443)。HTTP请求报文是由三部分组成: 请求行, 请求报头和请求正文。
      常用的方法有: GET, POST, PUT, DELETE, OPTIONS, HEAD。
      在这里插入图片描述
    • b. 响应报文:服务器返回给浏览器的文本信息,通常HTML, CSS, JS, 图片等文件就放在这一部分。状态码, 响应报头和响应报文。后端工程师眼中的HTTP。后端从在固定的端口接收到TCP报文开始,这一部分对应于编程语言中的socket。它会对TCP连接进行处理,对HTTP协议进行解析,并按照报文格式进一步封装成HTTP Request对象,供上层使用。这一部分工作一般是由Web服务器去进行,一般Web服务器有Tomcat, Jetty和Netty等等。
      在这里插入图片描述
    • c. put,post,get的区别

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

    • a. HTTP和HTTPS:
      (1) HTTPS协议需要到CA申请证书,一般免费证书很少,需要交费。
      (2) HTTP协议时超文本传输协议,信息明文传输;HTTPS则是具有安全性的SSL加密传输协议,即安全版的HTTP。
      (3) HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
      (4) HTTPS的连接很简单,是无状态的;HTTPS协议是有由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比HTTP协议安全。

    面试题之HTTPS加密方式

    • b. HTTPS:

    • 为什么要加密呢?
      因为HTTP报文是包裹在TCP报文里面的,服务器端收到报文段后,会解包提取HTTP报文,而HTTP报文是明文,所以若传输过程中被截取,有可能泄露信息,所以需要在HTTP报文进入TCP报文之前,先使用SSL对HTTP报文进行加密。HTTPS协议的本质就是HTTP + SSL(or TLS)。

    • 过程是什么?
      HTTPS在传输数据之前需要客户端与服务器进行一个握手(TLS/SSL握手),在握手过程中将确立双方加密传输数据的密码信息。TLS/SSL使用了非对称加密,对称加密以及hash等。HTTPS相比于HTTP,虽然提供了安全保证,但是势必会带来一些时间上的损耗,如握手和加密等过程,是否使用HTTPS需要根据具体情况在安全和性能方面做出权衡。 在这里插入图片描述

    3.2.4状态码:

    在这里插入图片描述
    最常见的状态码,比如:200(OK)、404(Not Fount)、403(Forbidden,禁止访问错误)、302(Redirect,重定向)、504(Bad Gateway,无效网关)。

    四、运输层

    4.1 UDP

    1. UDP报头:
      在这里插入图片描述
    2. 特点:
      在这里插入图片描述
    3. 协议:
      NFS: 网络文件系统
      TFTP: 简单文件传输协议
      DHCP: 动态主机配置协议
      BOOTP: 启动协议(用于无盘设备启动)
      DNS: 域名解析协议

    4.2 TCP

    1. 报头:
      在这里插入图片描述

    4.2.1 TCP 的主要特点

    • TCP 是面向连接的。(就好像打电话一样,通话前需要先拨号建立连接,通话结束后要挂机释放连接);
    • 面向字节流。TCP 中的“流”(Stream)指的是流入进程或从进程流出的字节序列。“面向字节流”的含义是:虽然应用程序和 TCP 的交互是一次一个数据块(大小不等),但 TCP 把应用程序交下来的数据仅仅看成是一连串的无结构的字节流。
    • 可靠传输—序列号,超时重传,确认应答,拥塞控制(提高传输效率:滑动窗口,流量控制,延迟应答,捎带应答)

    4.2.2面试题之TCP如何实现数据传输的可靠性?**(TCP缓冲区有哪些输入和输出,从缓冲区中读取数据,不是从网络中直接读取)

    1. 校验和
      (1) 作用:监测数据在传输过程中的任何变化
      (2) 方法:发送的数据包的二进制相加后取反
      在这里插入图片描述

    2. 确认应答+序列号
      (1) 序列号seq:TCP传输时将每个字节的数据都进行了编号
      (2) TCP传输的过程中,每次接收方收到数据后,都会对传输方进行确认应答。ack=seq+1,通过序列号可以告诉发送方,接受到了那些数据,下一次从哪儿开始发

    3. 超时重传
      发送方没有接收到响应的ACK报文原因可能有两点:
      a、数据在传输过程中由于网络原因等直接全体丢包,接收方没有接收到。
      b、接收方接收到了响应的数据,但是发送的ACK报文响应却由于网络原因丢包了。

      发送方在发送完数据后等待一个时间,时间到达没有接收到ACK报文,那么对刚才发送的数据进行重新发送。如果是刚才第一个原因,接收方收到二次重发的数据后,便进行ACK应答。如果是第二个原因,接收方发现接收的数据已存在(判断存在的根据就是序列号,所以上面说序列号还有去除重复数据的作用),那么直接丢弃,仍旧发送ACK应答。

    4. 连接管理:三次握手&四次挥手

    5. 流量控制(滑动窗口协议)
      作用:接收端处理数据的速度是有限的. 如果发送端发的太快, 导致接收端的缓冲区被打满, 这个时候如果发送端继续发送, 就会造成丢包, 继而引起丢包重传等等一系列连锁反应。
      滑动窗口:窗口大小即一次传输数据的个数
      TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。
      在这里插入图片描述
      在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    滑动窗口机制(可提高传输效率):

    1. 窗口大小指的是无需等待确认应答而可以继续发送数据的最大值.
    2. 发送窗口内字段的时候, 不需要等待任何ACK, 直接发送;
    3. 收到第一个ACK后, 滑动窗口向后移动, 继续发送下一个窗口字段的数据; 依次类推;
    4. 操作系统内核为了维护这个滑动窗口, 需要开辟发送缓冲区来记录当前还有哪些数据没有应答; 只有确认应答过的数据, 才能从缓冲区删掉;
    5. 窗口越大, 则网络的吞吐率就越高

    流量控制:

    1. 接收端将自己可以接收的缓冲区大小放入TCP首部中的 “窗口大小” 字段, 通过ACK端通知发送端;
    2. 窗口大小字段越大, 说明网络的吞吐量越⾼高;
    3. 接收端一旦发现自己的缓冲区快满了, 就会将窗口大小设置成一个更小的值通知给发送端;
    4. 发送端接受到这个窗口之后, 就会减慢自己的发送速度;
    5. 如果接收端缓冲区满了, 就会将窗口置为0; 这时发送⽅方不再发送数据, 但是需要定期发送一个窗口

    1. 拥塞控制(提高传输效率)
      (1) 拥塞控制是TCP在传输时尽可能快的将数据传输,并且避免拥塞造成的一系列问题。对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能会变坏。
      (2) 判断出现网络拥塞的依据:没有按时收到应当到达的确认报文(发生超时重传)
      (3) 拥塞控制主要是四个算法:1)慢开始,2)拥塞避免,3)快重传,4)快恢复
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
      快重传:
      在这里插入图片描述
      快恢复:
      在这里插入图片描述
      在这里插入图片描述

    4.2.3 TCP协议如何提高传输效率?

    提高传输效率:滑动窗口、流量控制、延迟应答、捎带应答

    1. 延迟应答
      如果接收数据的主机立刻返回ACK应答, 这时候返回的窗口可能比较小.窗口越大, 网络吞吐量就越大, 传输效率就越高. 我们的目标是在保证网络不拥塞的情况下尽量提高传输效率;

    2. 捎带应答
      在延迟应答的基础上, 我们发现, 很多情况下, 客户端服务器在应用层也是 “一发一收” 的.意味着客户端给服务器说了 “How are you”, 服务器也会给客户端回一个 “Fine, thank you”; 那么这个时候ACK就可以搭顺风车, 和服务器回应的 “Fine, thank you” 一起回给客户端。

    如何区分流量控制和拥塞控制

    在这里插入图片描述

    4.3 TCP与UDP的区别?

    相同点:

    • UDP协议和TCP协议都是传输层协议。
    • TCP(Transmission Control Protocol,传输控制协议),UDP(User Data Protocol,用户数据报协议)

    不同点:

    • TCP面向连接(如打电话要先拨号建立连接);
      UDP是无连接的,即发送数据之前不需要建立连接

    • TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;
      UDP尽最大努力交付,即不保证可靠交付

    • TCP面向字节流,即TCP把数据看成一连串无结构的字节流
      UDP面向报文,没有拥塞控制,因此网络拥塞并不会降低源主机的发送效率(对实时应用比较有用,eg:IP电话和实时视频会议)

    • 每一条TCP连接只能是点到点的;
      UDP支持一对一,一对多,多对一和多对多的交互通信

    • TCP对系统资源要求较多,
      UDP对系统资源要求较少。

    • Tcp首部,20字节。UDP首部,8个字节。

    • TCP逻辑通信信道是全双工的可靠通信
      UDP(可多对多,多双工),只是是不可靠通信

    • UDP和TCP编程步骤也有些不同,如下:

    TCP:

    TCP编程的客户端一般步骤是:
    	1、创建一个socket,用函数socket(); 
    		SOCKET SocketListen =socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
      2、设置socket属性,用函数setsockopt(); * 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind(); 
      	SOCKET_ERROR = bind(SocketListen,(const sockaddr*)&addr,sizeof(addr))
      4、开启监听,用函数listen();                 
      	SOCKET_ERROR == listen(SocketListen,2)
      5、接收客户端上来的连接,用函数accept();   
       	SOCKET SocketWaiter = accept(SocketListen, _Out_struct sockaddr *addr_Inout_  int *addrlen);
      6、收发数据,用函数send()recv(),或者read()write(); 
      7、关闭网络连接; 
      	closesocket(SocketListen);closesocket(SocketWaiter);
      8、关闭监听; 
    		SOCK_STREAM这种的特点是面向连接的,即每次收发数据之前必须通过connect建立连接,而SOCK_DGRAM这种是User Datagram Protocol协议的网络通讯,它是无连接的,不可靠的。
    
    TCP编程的客户端一般步骤是: 
    	1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
      4、设置要连接的对方的IP地址和端口等属性; 
      5、连接服务器,用函数connect(); 
      6、收发数据,用函数send()recv(),或者read()write(); 
      7、关闭网络连接;
    int send(
      _In_  SOCKET s,         //向哪个socket发送,accept返回的socket。
      _In_  const char *buf,
      _In_  int len,
      _In_  int flags
    );                               由于
    send(SocketClient,(const char *)&fh,sizeof(fh),0);
    recv(SocketClient,szbuf,sizeof(szbuf),0);
    

    UDP:

    UDP编程的服务器端一般步骤是:
    	1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind(); 
      4、循环接收数据,用函数recvfrom(); 
      5、关闭网络连接; 
    

    UDP编程的客户端一般步骤是:

    	1、创建一个socket,用函数socket(); 
      2、设置socket属性,用函数setsockopt();* 可选 
      3、绑定IP地址、端口等信息到socket上,用函数bind();* 可选 
      4、设置对方的IP地址和端口等属性; 
      5、发送数据,用函数sendto(); 
      6、关闭网络连接;
    	int recvfrom(
    	  _In_         SOCKET s,       //绑定的socket
    	  _Out_        char *buf,
    	  _In_         int len,
    	  _In_         int flags,
    	  _Out_        struct sockaddr *from,  //用来接收对方的
    	  _Inout_opt_  int *fromlen
    	);
    	int nres=recvfrom(pThis->m_socketListen,szBuf,sizeof(szBuf),0,(sockaddr*)&addrClient,&nSize);//0处标志位
    	sendto(m_socketListen,szBuffer,nSize,0,(const sockaddr*)&addr,sizeof(sockaddr_in))
    	TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
    	
    

    4.4 为什么UDP有时比TCP更有优势?

    • UDP以其简单、传输快的优势,在越来越多场景下取代了TCP,如实时游戏。
    • 网速的提升给UDP的稳定性提供可靠网络保障,丢包率很低,如果使用应用层重传,能够确保传输的可靠性。
    • TCP为了实现网络通信的可靠性,使用了复杂的拥塞控制算法,建立了繁琐的握手过程,由于TCP内置的系统协议栈中,极难对其进行改进。
    • 采用TCP,一旦发生丢包,TCP会将后续的包缓存起来,等前面的包重传并接收到后再继续发送,延时会越来越大,基于UDP对实时性要求较为严格的情况下,采用自定义重传机制,能够把丢包产生的延迟降到最低,尽量减少网络问题对游戏性造成影响。

    4.5TCP协议段格式与UDP协议段格式

    1. UDP报头:
      在这里插入图片描述

    面试之TCP粘包问题

    在这里插入图片描述

    五. 三次握手和四次挥手全过程

    5.1 三次握手

    5.1.1 为什么要三次握手

    因为当服务器端收到客户端发送来的请求之后,需要向客户端发送确认信息,但是该确认信息

    5.1.2 为什么要传回 SYN

    5.1.3传了 SYN,为啥还要传 ACK

    5.2 四次挥手

    5.2.1为什么要四次挥手

    六. 在浏览器中输入一个www.baidu.com后执行的全部过程? 在浏览器中输入url地址 ->> 显示主页的过程?

    6.1 过程

    • a. DNS域名解析:
      DNS解析的过程就是寻找哪台机器上有你需要资源的过程。当你在浏览器中输入一个地址时,例如www.baidu.com,其实不是百度网站真正意义上的地址。互联网上每一台计算机的唯一标识是它的IP地址,但是IP地址并不方便记忆。用户更喜欢用方便记忆的网址去寻找互联网上的其它计算机,也就是上面提到的百度的网址。所以互联网设计者需要在用户的方便性与可用性方面做一个权衡,这个权衡就是一个网址到IP地址的转换,这个过程就是DNS解析。它实际上充当了一个翻译的角色,实现了网址到IP地址的转换。网址到IP地址转换的过程是如何进行的?
      在这里插入图片描述在这里插入图片描述
      文字说明:
      (1) 浏览器会首先搜索"浏览器的DNS缓存",看自身的缓存中是否有www.baidu.com对应的没有过期的条目,有解析结束。
      (2) 搜索操作系统的DNS缓存(在Windows系统的命令行下使用 ipconfig/displaydns 进行查看),有解析结束。
      (3) 尝试读取 hosts 文件(位于C:\Windows\System32\drivers\etc),有解析结束。
      (4) 浏览器会向本地DNS服务器发起域名解析请求(通过的是UDP协议向DNS的53端口发起请求,这个请求是递归的请求),当本地的DNS服务器收到请求后,服务器会先查询自己的缓存,找到对应的条目,且没有过期,则解析成功
      (5) 本地的DNS服务器就向根DNS服务器发起请求进行查询。根DNS服务器上是没有记录哪个域名和IP的对应关系的,他会告诉本地的DNS服务器可以到某个域服务器上进行查询,并且告诉它这个域服务器的地址,这个过程是迭代查询的。以www.baidu.com为例,根DNS服务器发现这是一个顶级域com域的一个域名,就会将这个顶级域com域的IP地址告诉本地DNS服务器。这时候本地的DNS服务器会向该域服务器发起请求,当com域服务器接收到请求后并不会直接返回这个域名对应的IP地址,而是告诉本地DNS服务器该域名对应的DNS地址(这个一般是由域名注册商提供的);于是本地DNS服务器就会向www.baidu.com这个域名的DNS地址发起请求,这时候本地的DNS服务器才能拿到这个域名对应的IP地址,并返回给操作系统内核,内核又把结果返回给浏览器,至此浏览器才拿到www.baidu.com这个域名对应的IP地址,就能进行下一步了。

    (题外话—DNS负载均衡:
    不知道大家有没有思考过一个问题: DNS返回的IP地址是否每次都一样?如果每次都一样是否说明你请求的资源都位于同一台机器上面,那么这台机器需要多高的性能和储存才能满足亿万请求呢?其实真实的互联网世界背后存在成千上百台服务器,大型的网站甚至更多。但是在用户的眼中,它需要的只是处理他的请求,哪台机器处理请求并不重要。DNS可以返回一个合适的机器的IP给用户,例如可以根据每台机器的负载量,该机器离用户地理位置的距离等等,这种过程就是DNS负载均衡,又叫做DNS重定向。大家耳熟能详的CDN(Content Delivery Network)就是利用DNS的重定向技术,DNS服务器会返回一个跟用户最接近的点的IP地址给用户,CDN节点的服务器负责响应用户的请求,提供所需的内容。)

    • b. 建立TCP连接
      拿到域名对应的IP地址之后,User-Agent(一般是指浏览器)会以一个随机端口(1024 < 端口 < 65535)向服务器的WEB程序(常见的有tomcat、nginx等)80端口发起TCP的连接请求。这个连接请求(原始的http请求经过TCP/IP4层模型的层层封包)到达服务器端后(这中间通过各种路由设备,局域网内除外),进入到网卡,然后是进入到内核的TCP/IP协议栈(用于识别该连接请求,解封包,一层一层的剥开),还有可能要经过Netfilter防火墙(属于内核的模块)的过滤,最终到达WEB程序,最终建立了TCP/IP的连接。
    • c. 发起http请求
      HTTP请求报文的方法是get方式,如果浏览器存储了该域名下的Cookies,那么会把Cookies放入HTTP请求头里发给服务器。
    • d. 服务器响应http请求,浏览器得到html代码
      服务器端WEB程序接收到http请求以后,就开始处理该请求,处理之后就返回给浏览器html文件。
    • e. 浏览器解析html代码,并请求html代码中的资源
      浏览器拿到index.html文件后,就开始解析其中的html代码,遇到js/css/image等静态资源时,就向服务器端去请求下载(会使用多线程下载,每个浏览器的线程数不一样),这个时候就用上keep-alive特性了,建立一次HTTP连接,可以请求多个资源,下载资源的顺序就是按照代码里的顺序,但是由于每个资源大小不一样,而浏览器又多线程请求请求资源,所以从下图看出,这里显示的顺序并不一定是代码里面的顺序。浏览器在请求静态资源时(在未过期的情况下),向服务器端发起一个http请求(询问自从上一次修改时间到现在有没有对资源进行修改),如果服务器端返回304状态码(告诉浏览器服务器端没有修改),那么浏览器会直接读取本地的该资源的缓存文件.
    • f. 浏览器对页面进行渲染呈献给用户
      最后,浏览器利用自己内部的工作机制,把请求到的静态资源和html代码进行渲染,渲染之后呈现给用户.

    六.1 面试题之有限状态机解析HTTP请求的过程 ??未解决

    七、面试题之正向代理和反向代理(防火墙技术):

    1. 正向代理(位于客户端和原始服务器之间的一个服务器)
      (1) 当客户端需要访问一个自己不能直接访问的网站时,而客户端可以访问一个代理服务器,而该代理服务器恰好能访问该网站时,就利用代理向原始服务器提交请求并将获得的内容返回给客户端。。

      (2) 客户端需要设置正向代理服务器,即需要知道它的ip地址和代理程序的端口。

      (3) 用途举例:
      访问原来无法访问的资源
      作为缓存(用户需要访问的数据已经在代理服务器中存在),加速访问资源
      对客户端访问授权,上网进行认证。
      代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

      简单理解:正向代理是为客户端做代理,代替客户端去访问服务器。反向代理是为服务器做代理,代替服务器接收客户端请求

    2. 反向代理:
      (1) 代理服务器代替服务器接收客户端的请求,然后将请求转交给内网中的服务器,然后将服务器上得到的结果返回给Internet上请求连接的客户端。

      (2) 作用:
      保证内网安全
      优化网站负载(负载均衡的选择内网服务器去处理请求)
      在这里插入图片描述
      在这里插入图片描述

    九、数据链路层

    1. 面试题之差错检测CRC

    1. 相关概念:
      在这里插入图片描述
    2. 如何检测数据在传输过程中产生了比特差错?
      在这里插入图片描述
    3. 检错方法
      (1)奇校验(漏检率较高,一般不采用)
      在这里插入图片描述
      (2) 循环冗余校验CRC(是一种检错码)
      a. 作用:数据链路层中用来检测传输数据是否发生错误的一种方法。
      b. 缺陷:检错码只能检测出帧在传输过程中出现了差错,但是并不能定位错误,因此无法纠错。若想纠正,可使用冗余信息更多的纠错码进行前向纠错,但开销较大。
      c. 循环冗余校验CRC有很好的检错能力(漏检率低),虽然计算复杂,但益于用硬件实现,故被广泛应用于数据链路层。

    在这里插入图片描述
    在这里插入图片描述

    底层知识点补充:

    一、什么是网络通讯 tcp udp

    二、什么是网络编程 Socket编程

    局域网特性的三个要素

    一般认为决定局域网特性的主要技术有三个,它们是:
    局域网(Local Area Network,LAN)是指在某一区域内由多台计算机互联成的计算机组。

    • 1、用于传输数据的传输介质。数据传输系统中在发送器和接收器之间的物理通路。 导向传输媒体和非导向传输媒体。在导向传输媒体中,电磁波被导向沿着固体媒体(铜线或光纤)传播,而非导向传输媒体就是指自由空间,在非导向传输媒体中电磁波的传输常称为无线传播。传输媒体(如电缆、光缆和无线媒体)和网络适配器(亦称为网卡)互连在一起的计算机。
    • 2、用以连接各种设备的拓扑结构
    • 3、用以共享资源的 媒体访问控制方法。(IEEE802.3局域网协议等)俗称协议,是各个协议和一个协议的集合。又可分为以太网、令牌环网、FDDI网和无线局域网等。其中,以太网是当前应用最普遍的局域网技术。

    因特网的路由选择协议

    1. 因特网采用的路由选择协议主要是自适应的(即动态的)、分布式路由选择协议。
    2. RIP是基于距离向量的路由选择协议,RIP选择一个到目的网络具有最少路由器的路由(最短路由)。
    3. OSPF最主要特征是使用分布式链路状态协议,所有的路由器最终都能建立一个链路状态数据库(全网的拓扑结构图)。
    4. BGP-4采用路径向量路由选择协议。BGP所交换的网络可达性信息是要到达某个网络所要经过的自治系统序列
    展开全文
  • 涵盖了所有最重要Oracle体系结构特性,包括文件、内存结构和进程,锁和闩,事务、并发和多版本,表和索引,数据类型,以及分区和并行,并利用具体例子来充分介绍每个特性,不仅讨论了各个特性是什么,还说明了它...
  • Hinton机器学习与神经网络课程的第二章学习笔记 该笔记为自己以后方便查阅,要是有大神感觉我的笔记有哪些地方记的有误差或者不对...在应用中常见的体系结构类型为前馈神经网络,在前馈网络中,信息从输入单元层开始朝
  • 问题1-4:在具有五层协议的体系结构中,如果下面一层使用面向连接服务或无连接服务,那么在上面一层是否也必须使用同样性质服务呢?或者说,是否我们可以在各层任意使用面向连接服务或无连接服务呢? 问题1-5...
  • 计算机网络2021题库

    2021-01-23 12:49:54
    2、简单说下每一层对应的网络协议有哪些?3、ARP 协议的工作原理?4、谈下你对 IP 地址分类的理解?5、TCP 的主要特点是什么?6、UDP 的主要特点是什么?7、TCP 和 UDP 的区别?8、TCP 和 UDP 分别对应的常见应用层...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 125
精华内容 50
关键字:

常见的网络体系结构有哪些