计算机网络——总结

1.tcp/ip五层模型

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

  2.    数据链路层:两台主机的数据传输,总是一段一段链路的传输。两个相邻节点的数据传输,数据链路层将网络层交下来的IP数据包划分成帧,在两个相邻节点传输帧。

  3.   网络层:数据的传输需要经过不同的路由节点,不同的子网。网络层的任务就是选择合适的网间路由和交换节点,确保数据及时传输。在发送的时候,将传输层产生的报文段和用户数据段进行分组或包进行传输。

  4.   传输层:就是负责两个主机进程之间通信提供的通用的数据传输服务,通用就是指多个应用使用同一传输层,传输层获取数据后分付到各个应用进程

  5.  应用层:应用层的任务就是通过两个应用进程的交互来完成特定的网络交互,应用层协议定义的就是交互和通信的规则

2.应用层

2.1 应用层有哪些常见协议

  (1)DNS(域名解析协议) 是一个分布式数据库,提供了主机名和 IP 地址之间相互转换的服务。

  (2)TELENT远程登录协议

  (3)电子邮件协议:发送协议使用SMTP,读取协议使用POP3(读取了邮件会从服务器上删除邮件)或IMAP

  (4)动态主机解析协议 DHCP

  (5)HTTP超文本传输协议

2.2 HTTP

2.1HTTP方法有哪些,及其作用

     GET 获取资源   

    POST 传输实体主体

     PUT 上传资源

     DELETE 删除资源

     HEAD 获得报文首部

    OPTIONS  查询指定URL支持的方法

    TRANCE 服务端将通信路径返回给客户端

      CONNECT 要求在代理服务器进行通信的时候建立隧道 使用 SSL(Secure Sockets Layer,安全套接层)和 TLS(Transport Layer Security,传输层安全)协议把通信内容加密后经网络隧道传输。

2.2 HTTP状态码类型有哪些,及其作用

      1XX:接受的请求正在处理

      2XX : 请求处理完成(200 请求成功)

      3XX:  处理附加操作完成请求(301 资源被永久转到其他URL)

      4XX:  客户端出错(404 请求资源不存在,服务端无法根据客户端请求找到页面)

      5XX: 服务端处理请求出错(服务端错误状态码,内部服务器出错500)

2.3 GET和POST的区别

     GET用来获取资源,POST用来传实体主体,但是本质上都是TCP/IP连接,但是由于HTTP的规定和浏览器/服务器的限制

        (1)GET的参数在URL上,POST参数requestbody上

        (2)最重要的是GET发送一个TCP数据包(对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据)),POST发送两个TCP数据包(而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。)

        (3)GET请求在URL中传送的参数是有长度限制的,而POST么有。

         (4)对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

        (5)GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。

        (6)GET在浏览器回退时是无害的,而POST会再次提交请求。

        (7)GET产生的URL地址可以被Bookmark,而POST不可以。

       (8)GET请求会被浏览器主动cache,而POST不会,除非手动设置。

       (9)GET请求只能进行url编码,而POST支持多种编码方式。

      (10)GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。

2.4 HTTP1.0 HTTP1.1 HTTP2.0,这三个有什么区别及其改进

  HTTP1.0和HTTP1.1的区别:

  1. 长/短链接:Http1.0使用的是短连接,每次请求都需要创建一个连接,创建断开连接需要三次握手和四次挥手,开销比较大。为了减少开销,HTTP1.1使用长连接,用长连接来处理多个请求,有流水线方式(在收到HTTP响应报文之前能继续发送请求)和非流水线方式(必须收到了前一个的响应报文才能继续发送请求)
  2. 错误状态码:HTTP1.1增加了24个新的错误响应状态码,409 请求的资源与当前的状态发生了冲突
  3. 缓存处理:HTTP1.0使用header的IF-MODIFIED-since,expired来做缓存的判断。HTTP1.1增加了更多的缓存策略:IF-MATCH
  4. 带宽优化及网络连接的使用:HTTP1.0只需要获得对象的某些资源,但是整个对象都会被请求。HTTP1.1在请求头引入了range,允许只请求部分资源。

   HTTP2.0和HTTP1.x的区别:

        ( 1)新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

       (2)多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

       (3)header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

      (4)服务端推送(server push),HTTP2.0也具有server push功能。服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端,省去了客户端重复请求的步骤。

2.5 HTTP如何实现状态化,cookie被禁用了怎么办(URL重写)

      HTTP协议是一个无状态的协议,即不保存状态。也就是说Http协议本身不对请求和响应之间的通信状态进行记录。如何保存用户状态呢,就是使用Seeion机制。Session的作用就是通过服务端记录用户的状态。在服务端中保存Session状态的方法有很多,存放在内存或者是数据库中。如何对Session进行记录跟踪,就是使用Cookie,在Cookie中存放SessionID。然后客户端发送请求的时候就会有这个Cookie。如果禁止使用了Cookie,那么利用URL重写,将Session放在URL后面。

2.6 Session和Cookie    

Cookie实际上是一小段的文本信息。客户端请求服务器,如果服务器需要记录该用户状态,就使用response向客户端浏览器颁发一个Cookie。客户端浏览器会把Cookie保存起来。当浏览器再请求该网站时,浏览器把请求的网址连同该Cookie一同提交给服务器。服务器检查该Cookie,以此来辨认用户状态。服务器还可以根据需要修改Cookie的内容。

      Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。客户端浏览器再次访问时只需要从该Session中查找该客户的状态就可以了。如果说Cookie机制是通过检查客户身上的“通行证”来确定客户身份的话,那么Session机制就是通过检查服务器上的“客户明细表”来确认客户身份。Session相当于程序在服务器上建立的一份客户档案,客户来访的时候只需要查询客户档案表就可以了。

     区别:

      (1)都是用来追踪浏览器用户身份的会话方式,但是应用场景不同。Cookie一般用来保存用户的状态信息(例如Cookie中会存放一个Token保存用户登录的信息,这样下次登录的时候就会把其他信息填写了),Session的主要作用就是通过服务器记录用户的状态(购物车的时候,不知道哪个用户添加的,就会给用户创建特定的Session用来表示用户)。

(2)Cookie保存在客户端,Session保存在服务端

(3)Session的安全性能比较高。如果在Cookie中存储敏感信息,就需要加密。

2.7 HTTP有哪些问题,加密算法有哪些,针对不同加密方式可能产生的问题,及其HTTPS是如何保证安全传输的(对称加密+非对称加密+数字证书)

HTTP 有以下安全性问题:

    (1)使用明文进行通信,内容可能会被窃听;

    (2)不验证通信方的身份,通信方的身份有可能遭遇伪装;

    (3)无法证明报文的完整性,报文有可能遭篡改。

加密方式:

    (1)对称密钥加密(Symmetric-Key Encryption),加密和解密使用同一密钥。

            优点:运算速度快;

           缺点:无法安全地将密钥传输给通信方。

   (2)非对称密钥加密,又称公开密钥加密(Public-Key Encryption),加密和解密使用不同的密钥。

         公开密钥所有人都可以获得,通信发送方获得接收方的公开密钥之后,就可以使用公开密钥进行加密,接收方收到通信内容后使用私有密钥解密。

       非对称密钥除了用来加密,还可以用来进行签名。因为私有密钥无法被其他人获取,因此通信发送方使用其私有密钥进行签名,通信接收方使用发送方的公开密钥对签名进行解密,就能判断这个签名是否正确。

         优点:可以更安全地将公开密钥传输给通信发送方;

         缺点:运算速度慢。

        非对称加对称加密会有中间人攻击,这个改善问题就是使用数据证书。

       HTTPS是一种通过计算机网络进行安全通信的传输协议,经由HTTP进行通信,利用SSL/TLS建立全信道,加密数据包。HTTPS使用的主要目的是提供对网站服务器的身份认证,同时保护交换数据的隐私与完整性。

    (1) client向server发送请求https://baidu.com,然后连接到server的443端口。

   (2)服务端必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面,这套证书其实就是一对公钥和私钥。

  (3)传送证书,这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间、服务端的公钥,第三方证书认证机构(CA)的签名,服务端的域名信息等内容。

  (4)客户端解析证书,这部分工作是由客户端的TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警告框,提示证书存在问题。如果证书没有问题,那么就生成一个随机值(密钥)。然后用证书对该随机值进行加密。

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

  (6)服务端加密信息,服务端用私钥解密,得到了客户端传过来的密钥(随机值),然后把内容通过该值进行对称加密。

(7)传输加密后的信息,这部分信息是服务端用密钥(随机值)对称加密后的信息,可以在客户端被还原。

(8)客户端解密信息,客户端用之前生成的密钥(随机值)解密服务端传过来的信息,于是获取了解密后的内容。

HTTP和HTTPS的差别:

  1. HTTP的url是http://开始的且使用默认的端口号是80,HTTPS的URL是由https://开始的且默认端口号是443。
  2. 安全性和资源消耗。http运行在TCP上,所有的传输都是明文的,客户端和服务端都无法验证身份。HTTPS是运行在SSL/TLS上的HTTP协议,SSL/TLS协议运行在TCP上,所有的传输都经过加密,加密采用对称加密,但是对称加密的秘钥采用了服务器的非对称加密。

3.传输层

3.1 TCP如何保证可靠传输

  1. TCP将数据包划分成合适大小的数据块进行发送
  2. TCP对数据包进行编号,接收方按顺序传递给应用层
  3. 校验和,首部有数据的校验和。端对端的校验,目的是检测在传输过程中的变化,如果出现了错误,将丢死这个报文段和对这个报文段不进行确认
  4. TCP不接受重复的数据
  5. 流量控制:TCP每一个连接的每一方都有固定大小的缓冲区。TCP只允许发送端发送接收端能接受的数据大小,当接收端来不及处理数据的时候,就会告诉发送端降低发送数据大小。这个是依靠可滑动窗口的
  6. 拥塞控制:当发生网络阻塞时,降低发送的速率
  7. ARQ协议:发送一个报文段停止发送,当收到了确认的时候,才发送下一个报文
  8. 超时重传:当发送报文后,启动一个计时器,等待目的方去人收到这个报文端,没有在时间内收到了确认,就会再次发送报文

3.2TCP的流量控制,当接收方的接收窗口为0的时候该怎么办

         TCP使用滑动窗口来实现流量控制,流量控制是为了降低发送方的发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段就是限制发送方发送的窗口大小。当接收窗口是0的时候,就不接受消息。

3.3 TCP的拥塞控制(慢启动,拥塞避免,超时间间隔传输及其快速重传,快速恢复)

     在某个时间内,对网络中某个资源的需求大于这个资源所能提供的可用部分,网络的性能就变坏了,这种情况就叫拥塞。拥塞控制就是防止更多的资源同时注入网络,这样可以使网络中的路由器和链路不过载。拥塞控制的前提是网络能承载现有的网络负荷。

     TCP发送方要维持一个拥塞窗口的状态变量。这个大小取决于网络中的拥塞程度,动态变化,发送方将自己的发送窗口取拥塞窗口和可滑动窗口的最小值。

  1. 慢启动:发送方发送数据的时候,如果立即把大量的数据注入网络,就会导致网络拥塞。现在还不知道网络的情况,最好是由小到大增大拥塞窗口的值
  2. 拥塞避免:让拥塞窗口的值慢慢增大,即经过一个往返时间将拥塞窗口值增大1
  3. 快重传:  快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认(为的是使发送方及早知道有报文段没有到达对方)而不要等到自己发送数据时才进行捎带确认。
  4. 快恢复:如果接收方收到了一个不按照顺序的字符段,会立即给发送方发送一个确认。如果发送方收到了三个确认,假定收到了确认件支出的数据段丢失了,并立即重传这些数据段。当有单个数据包丢失的时候,快重传和快恢复能很好的工作。

 3.4流量控制和拥塞控制有什么区别

     拥塞控制是一个全局性的过程,涉及到了所有的主机,所有的路由器,以及降低网络传输性能的有关的所有因素。相反,流量控制,则是控制点对点通信量的控制,是个端到端的问题。流量控制就是抑制发送端发送数据的速率,以便接收端接受。

3.5在浏览器中输入一个URL地址,这个过程

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

4. 网络层

4.1 简述ARP协议过程,是如何通过IP地址获取MAC地址的(这个使用在链路层)

       ARP 实现由 IP 地址得到 MAC 地址。每个主机都有一个 ARP 高速缓存,里面有本局域网上的各主机和路由器的 IP 地址到 MAC 地址的映射表。如果主机 A 知道主机 B 的 IP 地址,但是 ARP 高速缓存中没有该 IP 地址到 MAC 地址的映射,此时主机 A 通过广播的方式发送 ARP 请求分组,主机 B 收到该请求后会发送 ARP 响应分组给主机 A 告知其 MAC 地址,随后主机 A 向其高速缓存中写入主机 B 的 IP 地址到 MAC 地址的映射。

4.2  ping命令所使用的协议是什么(ICMP),简述其过程

    ICMP 是为了更有效地转发 IP 数据报和提高交付成功的机会。它封装在 IP 数据报中,但是不属于高层协议。ICMP 报文分为差错报告报文和询问报文。

    Ping 是 ICMP 的一个重要应用,主要用来测试两台主机之间的连通性。

    Ping 的原理是通过向目的主机发送 ICMP Echo (回送请求)请求报文,目的主机收到之后会发送 Echo 回答报文。Ping 会根据时间和成功响应的次数估算出数据包往返时间以及丢包率。

4.3 网络层的路由算法有哪些,简述RIP,OSPF过程

     RIP是基于距离向量的路由选择协议。距离是指跳数,相邻节点的跳数为1,最大是15。RIP按照固定的时间间隔仅与相邻路由器交互自己的路由表,经过若干次交换后,所有路由器就可以知道到达本自治系统中任何一个网络的最短路由路径和下一跳地址。

     对地址为X的相领路由器发来的RIP报文,对报文中所有的项目进行修改,下一跳地址改为X,跳数加一。

     对修改过的RIP报文中的每一个项目进行下面步骤:

        若原来的路由表中没有目的网络,就将该网络项目加到路由表中

        否则,若下一跳地址是X,则把收到的项目替换原来的路由表。否则,如果收到的项目中的路由距离小于路由表中的距离,则更新。否则什么都不做。

         若3分钟还没收到相邻路由器的更新路由表,则设置为不可达,距离设置为16.

RIP 协议实现简单,开销小。但是 RIP 能使用的最大距离为 15,限制了网络的规模。并且当网络出现故障时,要经过比较长的时间才能将此消息传送到所有路由器。

OSPF:最短路径优先表示使用了 Dijkstra 提出的最短路径算法 SPF。

OSPF 具有以下特点:

向本自治系统中的所有路由器发送信息,这种方法是洪泛法。

发送的信息就是与相邻路由器的链路状态,链路状态包括与哪些路由器相连以及链路的度量,度量用费用、距离、时延、带宽等来表示。

只有当链路状态发生变化时,路由器才会发送信息。

5. 链路层

5.1 链路层通过什么访问主机

通过MAC地址。也就是网卡的硬件地址。主机在网络层使用IP地址,向下交给数据链路层,链路层将数据封装成数据帧时需要使用目标主机的MAC地址作为目标地址的。如果不知道目标主机的MAC 地址可以发送ARP广播来查找指定IP的MAC地址。找到之后就可以完成数据帧的封装了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值