计算机网络总结

关于计算机网络的问题总结.

计算机网络总结

1.OSI,TCP/IP,五层协议的体系结构,以及各层协议

OSI分层 (7层): 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层。
TCP/IP分层(4层): 网络接口层、 网际层、运输层、 应用层。
五层协议 (5层): 物理层、数据链路层、网络层、运输层、 应用层。

每一层的协议如下:
物理层:RJ45、CLOCK、IEEE802.3 (中继器,集线器)
数据链路层:PPP、FR、HDLC、VLAN、MAC (网桥,交换机)
网络层:IP、ICMP、ARP、RARP、OSPF、IPX、RIP、IGRP、 (路由器)
传输层:TCP、UDP、SPX
会话层:NFS、SQL、NETBIOS、RPC
表示层:JPEG、MPEG、ASII
应用层:FTP、DNS、Telnet、SMTP、HTTP、WWW、NFS

每一层的作用如下:
物理层:通过媒介传输比特,确定机械及电气规范(比特Bit)
数据链路层:将比特组装成帧和点到点的传递(帧Frame)
网络层:负责数据包从源到宿的传递和网际互连(包PackeT)
传输层:提供端到端的可靠报文传递和错误恢复(段Segment)
会话层:建立、管理和终止会话(会话协议数据单元SPDU)
表示层:对数据进行翻译、加密和压缩(表示协议数据单元PPDU)
应用层:允许访问OSI环境的手段(应用协议数据单元APDU)

OSI将计算机网络体系结构(architecture)划分为以下七层:
物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人。
数据链路层: 决定访问网络介质的方式。在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。
网络层: 使用权数据路由经过大型网络 相当于邮局中的排序工人。
传输层: 提供终端到终端的可靠连接 相当于公司中跑邮局的送信职员。
会话层: 允许用户使用简单易记的名称建立连接 相当于公司中收寄信、写信封与拆信封的秘书。
表示层: 协商数据交换格式 相当公司中简报老板、替老板写信的助理。
应用层: 用户的应用程序和网络之间的接口老板。

2.TCP协议中的三次握手,为什么两次握手不行

建立连接的过程是利用客户服务器模式,假设主机A为客户端,主机B为服务器端。
(1)TCP的三次握手过程: 主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;主机A再次对主机B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。考虑这样一种特殊情况 ,主机A第一次发送的连接请求并没有丢失,而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,主机B就一直在等待主机A发送数据,导致主机B的资源浪费。
(3)采用两次握手不行,原因就是上面说的“失效的连接请求“的特殊情况。

3.TCP和UDP有什么区别,什么场景使用TCP,什么场景什么UDP,哪些应用层协议使用了TCP,哪些使用了UDP

TCP和UDP最主要的区别是TCP是可靠传输的,UDP是不可靠传输的 。所以如果我们的发送消息之类的场景,因为你要确保用户的消息不会丢失,需要使用TCP协议。如果你是在进行视频聊天或者看直播,那你可以使用UDP协议,因为即使几个画面丢失了,对用户来说影响也不是很大。

TCP提供面向连接的、可靠的数据流传输,而UDP提供的是非面向连接的、不可靠的数据流传输。
TCP传输单位称为TCP报文段,UDP传输单位称为用户数据报。
TCP注重数据安全性,UDP数据传输快,因为不需要连接等待,少了许多操作,但是其安全性却一般。

TCP对应的协议和UDP对应的协议
TCP对应的协议:
(1) FTP:定义了文件传输协议,使用21端口。
(2) Telnet:一种用于远程登陆的端口,使用23端口,用户可以以自己的身份远程连接到计算机上,可提供基于DOS模式下的通信服务。
(3) SMTP:邮件传送协议,用于发送邮件。服务器开放的是25号端口。
(4) POP3:它是和SMTP对应,POP3用于接收邮件。POP3协议所用的是110端口。
(5)HTTP:是从Web服务器传输超文本到本地浏览器的传送协议。
UDP对应的协议:
(1) DNS:用于域名解析服务,将域名地址转换为IP地址。DNS用的是53号端口。
(2) SNMP:简单网络管理协议,使用161号端口,是用来管理网络设备的。由于网络设备很多,无连接的服务就体现出其优势。
(3) TFTP(Trival File Transfer Protocal),简单文件传输协议,该协议在熟知端口69上使用UDP服务。

4.TCP三次握手和四次挥手的全过程

运输连接有三个阶段,即:连接建立、数据传送和连接释放。

TCP建立连接的过程叫做握手,握手需要在客户和服务器之间交换三个TCP报文段。详见计算机网络(第七版谢希仁)238,240,218,219页。说是三次握手其实是不准确的,具体情况是一次握手过程中交换了三个报文,而并不是进行了三次握手,这有点像两个人见面进行一次握手时,他们的手上摇晃了三次,但这并非进行了三次握手。RFC937文档中有这样的描述:“three way(three message) handshake”。handshake使用的是单数而不是复数,表明只是一次握手。准确的译名应该是“三报文握手”。

三次握手(三报文握手):

一个易于理解的图:

20180618232834260

详细的图:

img

第一次握手:客户端发送SYN = 0[同步]包(seq[序号] = x)到服务器,并进入SYN_SEND 状态,等待服务器确认;
第二次握手:服务器收到SYN包,必须确认客户的SYN[同步](ACK = 1,ack = x + 1),同时自己也发送一个SYN包(SYN=1,seq=y),即SYN + ACK包,此时服务器进入SYN_RECV 状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ACK = 1,seq = x + 1, ack = y + 1),此包发送完毕,客户端和服务器进入ESTABLISHED 状态,完成三次握手。
握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。

四次挥手(四报文握手):

img

与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。
第一次挥手:主动关闭方发送一个FIN包(FIN = 1,seq = u),同时进入FIN-WAIT-1 阶段,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不 会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可 以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK(ACK = 1, seq = v, ack = u + 1)给对方,服务器为CLOSE-WAIT 状态,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN(FIN = 1, ACK = 1, seq = w, ack = u + 1),用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了,客户端进行到FIN-WAIT-2 阶段,服务器B进行到LAST-ACK 阶段。
第四次挥手:主动关闭方收到FIN后,发送一个ACK(ACK = 1, seq = u + 1, ack = w + 1)给被动关闭方,确认序号为收到序号+1,客户端进到TIME-WAIT 状态,服务端关闭,在等待2MSL后,客户端关闭,至此,完成四次挥手。

注意:

TIME-WAIT 状态,必须等待2MSL时间有两个理由。

第一,为了保证A发送的最后一个ACK报文段能够到达B。因为这个ACK报文段有可能丢失,如果在LAST-ACK状态的B收不到对方发送的FIN + ACK 报文段的确认,B会超时重传这个FIN + ACK 报文段,而 A就能在2MSL时间内收到这个重传的FIN + ACK报文段。接着A重传一次确认,重新启动2MSL计时器。最后,A 和 B都正常进入到CLOSED状态。

第二,防止“已失效的连接请求报文段”出现在本连接中。A在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络中小时。这样就就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

5.什么是窗口滑动协议,什么是快速重传,什么是拥塞避免,什么是慢启动?

滑动窗口协议: 属于TCP协议中的一种应用,用于网络数据传输时的流量控制,以避免拥塞的发生。该协议允许发送方在停止并等待确认前发送多个数据分组。由于发送方不必每发送一个分组就停下来等待确认,所以该协议可以加速数据的传输,提高网络吞吐量。
滑动窗口是接受数据端使用的窗口大小,用来告知发送端接收端的缓存大小,以此可以控制发送端发送数据的大小,从而达到流量控制的目的。

网络中的链路容量和交换结点中的缓存和处理机都有着工作的极限,当网络的需求超过它们的工作极限时,就出现了拥塞。拥塞控制就是防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。常用的方法就是:

  1. 慢开始、拥塞避免
  2. 快重传、快恢复

慢开始算法:先让拥塞窗口cwnd=1,然后每经过一个传输轮次(RTT),拥塞窗口 cwnd 就加倍,直到 cwnd = ssthresh(慢开始门限)
拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。
快重传:发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段,而不必继续等待设置的重传计时器到期
快恢复:把慢开始门限ssthresh减半,把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。
参考博客:https://www.cnblogs.com/losbyday/p/5847041.html
参考博客:https://blog.csdn.net/qq_37924084/article/details/78409096

6.当你输入域名访问一个网站的时候,背后的过程是什么?

这个问题是比较开放的,你可以回答的内容有很多,但是你如果回答得越详细肯定是越好的。第一步就是域名解析,域名解析的话你可以说一下域名缓存在哪些地方,然后如果你域名在本地没有缓存的话,是如何通过DNS来进行域名解析的,如果你的DNS服务器上没有保存那个域名,那你的DNS服务器将如何处理来得到这个域名的ip。第二步就是说一下TCP连接的三次握手的过程。其他拓展内容有很多可以说,看你知识储备。例如你可以说通过CDN来进行访问加速。也可以说目前网站基本上都是前后端分离的,访问的时候会先访问反向代理服务器进行负载均衡之类的。

7.在浏览器中输入www.baidu.com后执行的全部过程

1、客户端浏览器通过DNS解析到www.baidu.com 的IP地址220.181.27.48,通过这个IP地址找到客户端到服务器的路径。客户端浏览器发起一个HTTP会话到220.181.27.48,然后通过TCP进行封装数据包,输入到网络层。
2、在客户端的传输层,把HTTP会话请求分成报文段,添加源和目的端口,如服务器使用80端口监听客户端的请求,客户端由系统随机选择一个端口如5000,与服务器进行交换,服务器把相应的请求返回给客户端的5000端口。然后使用IP层的IP地址查找目的端。
3、客户端的网络层不用关心应用层或者传输层的东西,主要做的是通过查找路由表确定如何到达服务器,期间可能经过多个路由器,这些都是由路由器来完成的工作,我不作过多的描述,无非就是通过查找路由表决定通过那个路径到达服务器。
4、客户端的链路层,包通过链路层发送到路由器,通过邻居协议查找给定IP地址的MAC地址,然后发送ARP请求查找目的地址,如果得到回应后就可以使用ARP的请求应答交换的IP数据包现在就可以传输了,然后发送IP数据包到达服务器的地址。

8.什么是https协议?https协议用到了哪种密钥?

https是在http上面套了一层ssl,用来实现安全连接。用到的密钥有对称密钥和非对称密钥。目前基本上大一点的网站,都会使用https,这里面涉及的知识点也不是很多,但是过程相对来说会复杂一点,感兴趣的话可以去看一下。基本上就是有数字证书,然后把对称密钥作为消息内容,通过非对称密钥来进行传输。之后双方的通信就通过对称密钥来进行解密就行了。
参考博客:https://www.cnblogs.com/zxj015/p/6530766.html

9.什么是socket?

socket是用来进行网络通信的。
TCP/IP只是一个协议栈,就像操作系统的运行机制一样,必须要具体实现,同时还要提供对外的操作接口。这个就像操作系统会提供标准的编程接口,比如win32编程接口一样。TCP/IP也要提供可供程序员做网络开发所用的接口,这就是Socket编程接口。

为了区别不同的应用程序进程和连接,许多计算机操作系统为应用程序与TCP/IP协议交互提供了称为套接字 (Socket)的接口,区分不同应用程序进程间的网络通信和连接。

实际上socket是对TCP/IP协议的封装,它的出现只是使得程序员更方便地使用TCP/IP协议栈而已。socket本身并不是协议,它是应用层与TCP/IP协议族通信的中间软件抽象层,是一组调用接口

10.什么是IO,什么是NIO,什么是AIO,什么是netty框架?

BIO:同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。
NIO:同步非阻塞式IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。
AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。
Netty:Netty是一款异步的事件驱动的网络应用框架和工具,用于快速开发可维护的高性能、高扩展性协议服务器和客户端。也就是说,Netty是一个NIO客户端/服务器框架,支持快速、简单地开发网络应用,如协议服务器和客户端。它极大简化了网络编程,如TCP和UDP套接字服务器。

11.ARP是地址解析协议,简单语言解释一下工作原理

  1. 首先,每个主机都会在自己的ARP缓冲区中建立一个ARP列表,以表示IP地址和MAC地址之间的对应关系。
  2. 当源主机要发送数据时,首先检查ARP列表中是否有对应IP地址的目的主机的MAC地址,如果有,则直接发送数据,如果没有,就向本网段的所有主机发送ARP数据包,该数据包包括的内容有:源主机 IP地址,源主机MAC地址,目的主机的IP 地址。
  3. 当本网络的所有主机收到该ARP数据包时,首先检查数据包中的IP地址是否是自己的IP地址,如果不是,则忽略该数据包,如果是,则首先从数据包中取出源主机的IP和MAC地址写入到ARP列表中,如果已经存在,则覆盖,然后将自己的MAC地址写入ARP响应包中,告诉源主机自己是它想要找的MAC地址。
  4. 源主机收到ARP响应包后。将目的主机的IP和MAC地址写入ARP列表,并利用此信息发送数据。如果源主机一直没有收到ARP响应数据包,表示ARP查询失败。
    广播发送ARP请求,单播发送ARP响应。

13.从用户在浏览器输入域名,到浏览器显示出页面的过程

https://blog.csdn.net/qq_22313585/article/details/78926141这篇文章写的比较详细

同时感谢朋友的博客提供的问题:https://lzh0108.site/%E5%A4%A7%E6%95%B0%E6%8D%AE/%E5%A4%A7%E6%95%B0%E6%8D%AE%E9%9D%A2%E8%AF%95%E7%9F%A5%E8%AF%86%E7%82%B9%E6%B1%87%E6%80%BB/#more

-------------本文结束感谢您的阅读-------------
愿你所有幸运,都不期而遇;愿你所有美好,都如约而至。