计算机网络

1.ping的详细过程

作用:用于测试网络连通性的程序。
过程:

1.源主机创建一个ICMP回送请求数据报;
2.将ICMP报文连同目的IP地址,交给网络层封装,将源IP,目的IP,协议字段设置为 1 表示是 ICMP 协议,这些信息封装成一个IP数据包;
3.接下来交给数据链路层,为IP数据包加上MAC地址,封装成数据帧;
4.第三步可以细分,如果数据链路层发现目的IP是同一个网段,那就查表,找到目的IP对应的MAC地址,封装成帧,然后发送;如果目的IP不是同一个网段的,那就以网关的MAC地址为目的地址,直接交给网关转发;
5.目的主机收到报文,先检查数据帧的目的MAC地址和本机MAC地址是否是本机MAC,是的话就收,不是的话就拒收;
6.目的主机从数据帧解析出IP数据包,交给网络层,网络层从IP数据包解析出是ICMP数据,就交给ICMP协议处理;
7.ICMP协议发现这是一条回送请求消息,他要检查本机是否设置了不让别人ping,如果设置过,那就不理;如果没设置,那就回复一个ICMP回送响应数据包给源主机。如果源主机在ttl内收到这个包,那么就ping通了,否则就不通。

2.traceroute

traceroute的作用是检测出:从源IP走到目的IP 的 途中经过的所有路由器的IP地址,以及各个路由器的延迟/网络情况。
原理:

从源主机往目的主机发送UDP数据报,需要进行如下设置:
通过设置从1开始递增的ttl,让途中的路由器返回ICMP差错报文,其类型是超时,这样就可以从返回的ICMP差错报文中得出路由器的IP地址;通过设置一个不可达的目的端口,让目的主机返回一个ICMP差错报文,其类型是端口不可达

3.TCP流量控制

所谓流量控制就是让发送发送速率不要过快,让接收方来得及接收。利用滑动窗口机制就可以实施流量控制。
原理这就是运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方发回的窗口大小。

4.TCP拥塞控制

拥塞

计算机网络中的带宽、交换结点中的缓存和处理机等,都是网络的资源。在某段时间,若对网络中资源的需求超过了可用的资源,若网络中许多资源同时供应不足,网络的性能就会变坏,整个网络的吞吐量随之负荷的增大而下降。这种情况就叫做拥塞。类似于堵车

拥塞控制

就是防止过多的数据注入网络中,这样可以使网络中的路由器或链路不致过载。和流量控制不同,流量控制指点对点通信量的控制。

拥塞控制的机制

  1. 慢开始和拥塞避免
    发送方维持一个拥塞窗口 cwnd ( congestion window )的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞窗口。
    发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。
    慢开始算法的思路就是,不要一开始就发送大量的数据,先探测一下网络的拥塞程度,也就是说由小到大逐渐增加拥塞窗口的大小。
    通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为1。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至原来的2倍。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。
    为了防止拥塞窗口cwnd增长过大引起网络拥塞,还需要设置一个慢开始门限ssthresh状态变量(每当丢包发生,ssthresh会被设置为cwnd窗口的一半)。慢开始门限ssthresh的用法如下:
    当 cwnd < ssthresh 时,使用上述的慢开始算法。
    当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。
    当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。
    拥塞避免:每收到一个对新的报文的确认后,cwnd加1

快重传

快重传算法首先要求接收方每收到一个失序的报文段后就立即发出重复确认;

快重传的一个案例

现在假定接收方没有收到M3但接着收到了M4。显然,接收方不能确认M4,因为M4是收到的失序报文段。根据 可靠传输原理,接收方可以什么都不做,也可以在适当时机发送一次对M3的确认。但按照快重传算法的规定,接收方应及时发送对M2的重复确认,这样做可以让 发送方及早知道报文段M3没有到达接收方。发送方接着发送了M5和M6。接收方收到这两个报文后,也还要再次发出对M2的重复确认。这样,发送方共收到了 接收方的四个对M2的确认,其中后三个都是重复确认。快重传算法还规定,发送方只要一连收到三个重复确认就应当立即重传对方尚未收到的报文段M3,而不必 继续等待M3设置的重传计时器到期。

与快重传配合使用的还有快恢复算法,其过程有以下两个要点:

当发送方连续收到三个重复确认,就执行“乘法减小”算法,把慢开始门限ssthresh设置为cnwd的一半。而是把cwnd值设置为 慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

5.TCP三次握手四次挥手

点击访问

6.TCP如何保证可靠传输

校验和

TCP首部有校验和字段,目的是:将发送的数据包的二进制相加然后取反,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP将丢弃这个报文段和不确认收到此报文段。

确认应答+序列号

TCP给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
接收方收到报文就会确认(累积确认:对所有按序接收的数据的确认)

超时重传

当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

流量控制

TCP通过TCP首部的窗口大小这一字段,来控制发送方的发送速率,好让接收方来得及接受,是点到点的控制。

拥塞控制

慢开始、拥塞控制:

发送方通过维护一个拥塞窗口,来限制发送速度:
当cwnd < ssthresh 时,若发出去的数据全部得到确认,那么cwnd = cwnd*2;
当cwnd >= ssthreah时,若发出去的数据全部得到确认,那么cwnd = cwnd + 1;
当发生超时重传时,ssthresh = cwnd/2, cwnd = 1,并且再次回到上面的循环。

快重传、快恢复:

当接收方收到不连续的数据包的时候,会向发送方确认自己收到的连续序列的最后一个数据包,后续接收方每收到一个数据包,都会重复的发送确认。接收方收到连续三个对同一个数据报的确认的时候,意味着这个数据包确定丢失,然后发送方会立即重传这个丢失的数据包,并且发送方将自己的ssthresh = cwnd/2, cwnd = ssthresh。这就是快恢复。

7.可变大小的滑动窗口协议

TCP会话的双方都各自维护一个发送窗口 和一个接收窗口
功能
协调收发双方处理数据包速度不一致的问题:接收方通过设置窗口大小这一字段的值,来限制放松方的发送速率;
提高吞吐量:如果没有滑动窗口,那么为了实现可靠传输,就只能用停等协议了,效率极低。

滑动机制:

收到确认,窗口就可以往右边滑动

8.DNS解析流程

在这里插入图片描述
下面是迭代式的查询:

1.终端先检查本地hosts文件是否有记录,有就返回结果,否则:
2.查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,否则:
3.向本地域名服务器(TCP/IP参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器)发出请求,如果有记录或者有缓存,就直接返回,否则:
4.本地域名服务器向根域名服务器查询(比如查询.com这个后缀由哪个顶级域名服务器管理),如果根域名有对应的记录,就返回对应的IP地址给本地域名服务器;
5.本地域名服务器向顶级域名服务器查询,查询对应的二级域名…
6.直到查到对应网址的ip,就由本地域名服务器返回给终端。

9.HTTP HTTPS

HTTP
超文本传输协议,设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。默认端口是80

  1. http1.0

HTTP 1.0规定浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建立一个TCP连接。比如请求一个网页,不仅需要请求HTML文件,还需要请求页面中的图片、css、js等文件,每一个文件都需要单独的连接,十分的浪费资源和时间。

  1. HTTP1.1

为了克服HTTP 1.0的这个缺陷,HTTP 1.1支持持久连接,一个包含有许多图像的网页文件的多个请求和应答可以在一个连接中传输。
HTTP 1.1还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求。
HTTP1.1新增了一个HOST请求头字段,使用HOST可以明确表示要访问服务器上的哪个WEB站点。比如某一台服务器上面部署了A,B,C3个网站,可以在HOST里面指定要访问的网站。
HTTP1.1新增了一个RANGE请求头字段<RANGE:bytes>,用于断点续传。而HTTP1.0里面只能从0开始重新请求整个文件。

  1. HTTP2.0

HTTP2.0之前的版本中,浏览器会限制某一时间段内对同一域名的请求数量,超过数量限制的请求会被阻塞。HTTP/2 通过多路复用,使得通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。
HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩。
在HTTP1.1中每一个资源都必须明确地请求,而2.0里面,服务器可以主动发送页面资源给客户端。

HTTPS
HTTP协议传输的数据都是未加密的,HTTPS是密文传输。
HTTP使用80号端口,HTTPS使用443端口。
HTTPS = HTTP + SSL
握手过程:
在这里插入图片描述

10.tcp listen backlog

内核维护两个队列,一个是未完成队列,一个是已建立连接的队列。在第一个sync到达时,先将连接塞入第一个队列,再回复ACK+SYNC。此时,连接状态变为SYN_RCVD;
第二个是完成队列。客户端的ACK上来后,对应的连接移入完成队列。此状态的连接会被accept系统调用返回,状态变为ESTABLISHED。
另一方面,如果请求上来时队列已满,则TCP忽略之。客户端来重试。
backlog控制两种状态连接数的总和。

backlog被规定为两个队列总和的最大值,大多数实现默认值为5。backlog为0 时在linux上表明允许不受限制的连接数,这会导致扛不住SYN Flooding攻击

11.HTTP无状态,如何标注用户身份?

cookie 和 session;
当用户授权成功的时候,服务器会为用户生成一个唯一的sessionID保存在服务器中,并且在响应中,通过“set-cookie”字段来告知用户下次请求要带上这个sessionID。
cookie保存在客户端,session保存在服务器。

12.HTTPS如何验证证书的合法性?

证书由如下部分组成:
证书名字(如www.baidu.com);
公钥

颁发机构(CA);
颁发者签名(CA的私钥,对此证书进行加密的结果)。
1.浏览器拿到证书之后,检查证书的颁发机构(CA)是不是自己信任的机构;
2.如果不信任,直接弹出警报;
3.如果信任,浏览器就用该CA的公钥对证书的签名进行解密,解密得到证书的摘要(一般是hash),如果该摘要与现有证书的摘要(这个hash可以算)一样,那么信任他。

13.如何保证HTTP传输安全

点击查看

14.说一下应用层中使用UDP协议的应用?TCP?UDP+TCP?

UDP:DNS,QQ语音,视频等
TCP:SMTP,HTTP,FTP等

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值