计算机网络学习(面试学习)(持续更新)

1. OSI 七层协议模型

  • 应用层:向应用程序提供通信服务,如 http、ftp、smtp、DNS等

  • 表示层:格式化数据、加密、解密等,如FTP允许你选择以二进制或ASCII格式传输

  • 会话层:管理会话,控制会话的开始与结束

  • 运输层:高层与低层的衔接,数据传输的单位是报文,报文过长时将其分割然后交给网络层,TCP/UDP

  • 网络层:负责将数据从源送到目的地

  • 数据链路层:控制网络层与物理层的通信,以帧为单位

  • 物理层:以二进制数据的形式在物理媒体上传输

七层协议模型是一个理论模型,在实际应用中数据传输多变,因此该模型仅做参考作用

2. TCP/IP 四层协议模型

  • 应用层 http
  • 运输层TCP/UDP
  • 网络层 IP
  • 链路层

3. TCP/IP/UDP 等数据结构

  1. TCP

TCP

  1. IP

IP

  1. UDP

image-20200625113131087

  1. Http

image-20200625113921034

4. 数据传输中可能遇到的问题及解决办法(序列号是关键)

  1. 数据丢包通过确认应答ACK来验证,发送方没有收到确认应答表明数据丢失(也可能是ACK丢失或延迟),引发重传机制
  2. 数据重复通过序列号来辨认
  3. 数据完整性校验 每一个TCP数据包都有一个包校验字段
  4. 数据乱序 根据序列号来排序

5. 三次握手

image-20200623000114768

6. 四次挥手

image-20200701173926454

6.1 三次挥手?五次挥手?

有时候会出现三次挥手的情况,是因为第二次挥手和第三次挥手合并了,因为服务端没有数据继续传输,如

image-20200627122317842

至于五次挥手,想多了。。。没有的,如果抓包挥手过程中出现5个报文,那么那个多出来的ACK报文一定是前面某个报文的确认报文,一般就是挥手第一个FIN报文的前一个报文的ack

7. TCP的停止等待协议与滑动窗口协议

  1. 停止等待协议:每一个报文都要确认后才能发送下一个报文,效率低下

image-20200623001013169

  1. 滑动窗口协议:延迟ACK的发送,等待接收量到窗口大小才发送,如果中间丢失某一个报文,则只会发送一个表示该丢失报文之前的报文被接收到的ACK确认,即要求发送方从丢失报文处开始发送

image-20200623001245494

8. 网络安全

1. 摘要算法

​ 摘要算法是不可逆的,无论多长的数据都会在经过摘要算法后生成一个短短的字符串,只要数据变了一丢丢,生成的字符串都是不相同的。因此,摘要算法经常用来签名,检验数据的完整性,或者也可用来加密不需要逆转的数据,如用户密码等 。常见的摘要算法有MD5、SHA1、SHA2、MAC等。

2. 对称加密

​ 双方使用相同的密匙对数据进行加密解密,常见的对称加密算法有DES、3DES、AES

3. 非对称加密

​ 双方使用不同的密钥对数据进行加密解密,密钥是成对存在的,一个叫公钥,可以提供给别人;一个叫私钥,自己保存,不能泄漏,一旦泄漏要及时更换密钥对。关键点是私钥加密的数据只有公钥能解密,公钥加密的数据只有私钥能解密。常见的算法有RSA、DSA

9. Https原理

参考:https://blog.csdn.net/LAf_HUAZAI/article/details/107093295

10. IP伪造

11. 传输层/网络层数据包的拆分与重组原理

  1. 传输层TCP会对数据进行分包,包的最大size由MSS决定,一般为1460字节,每一个包都有序列号,服务端收到后会按序列号来重组
  2. 网络层IP协议也会对传输层送来的包进行拆分,称为分片,包的大小由MTU来决定,在链路层每帧的大小限定为1500,即MTU一般为1500。也就是说,如果传输层送来的包大小大于1500,则ip层会对这个包进行分片。反之,如果包大小小于1500,则不会分片,由此我们可以看出TCP已经对包进行了拆分,每个包的大小都不会超过MTU,所以一般情况下使用TCP协议的包在IP层不会被分片。
  3. UDP协议没有拆分功能,也就是说使用UDP协议的包基本上都会在IP层进行分片,一个IP数据报被拆分成多个报文,每个报文都有各自的IP头部,头部中有一个标识ID和段偏移量,服务端接收到后,具有相同ID的报文会被重组为一个IP数据报,段偏移量来确定报文的顺序。

12. 拥塞控制

注:cwnd -----由发送方维持的拥塞窗口大小,控制网络中的流量,rwnd-----接收窗口大小

ssthresh-----拥塞窗口门限

  1. 慢启动-----试探,慢慢增加cwnd(指数增长,一般为2倍数)
  2. 拥塞避免-----当cwnd > ssthresh时,改用拥塞避免算法,cwnd呈线性增长(cwnd++)

无论是在慢开始还是拥塞避免中,一旦出现网络拥堵(没有按时收到ACK)就会将ssthresh置为原来的一半(实际上有精确的算法来计算),cwnd置为 1,然后重新开始慢启动,以迅速降低网络拥堵

  1. 快速重传-----尽早重传未被确认的报文段,例如接收方收到了m2,m4,m5,m6,m7,没有收到m3,那么接收方会在收到m4,m5,m6—的时候重复发送m2的重复ACK。按规定,发送方连续收到三个重复确认(4个ACK)就不必等待m3超时重传,而是立即重传m3,这个方法能提高网络吞吐量约20%

注意此时发送方会认为网络很可能没有堵塞,因为收到重复ACK表明发送的报文顺利到达接收方

  1. 快速恢复-----当连续收到三个重复ACK时,快速重传生效后,将ssthresh减半,cwnd变为ssthresh减半后的数值,然后执行拥塞避免算法

实际上的cwnd还有一个上限rwnd,即cwnd不会超过rwnd

注:New Reno 算法有变化,Reno算法只考虑了丢失一个报文,若在一次网络拥塞中丢失了多个报文,会多次将cwnd和ssthresh减半,甚至cwnd < 3以致没有足够的ACK,只能等待超时重传,超时后cwnd会被置 1,ssthresh=cwnd/2,进入慢启动 ,大大降低了TCP传输效率。

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华仔哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值