【笔记】计算机网络笔记

目录

基础部分

进阶部分

基础部分

1.OSI七层模型(从下数起,物理层是第一层)

  • 应用层:
    • 提供网络服务接口
    • FTP、Telnet、DNS、SMTP、POP、HTTP协议
  • 表示层:规范数据格式
  • 会话层:管理会话,socket在这一层
  • 传输层:
    • 数据单位为段
    • 网关
    • TCP、UDP协议
  • 网络层:
    • 数据单位为IP数据包
    • 寻址、选路由、连接的建立保持与终止
    • IP、ICMP、ARP、RARP协议
  • 数据链路层:
    • 数据单位为帧
    • 网桥、交换机、网卡
    • 以太网协议
  • 物理层(在终端设备间传输比特流):提供物理媒体中继器、集线器(不具备寻址功能,会把信息发送给所有主机)

TCP/IP 5层模型:应用层、传输层、网络层、数据链路层、物理层

TCP/IP 4层模型:应用层、传输层、网络层、网络接口层

2.ARP/RARP协议:是一个根据IP地址获取物理地址的协议,ARP命令可用于查询本机ARP缓存中IP地址和MAC地址的对应关系或进行修改

  • ARP缓存中会保存当前网络上所有主机IP地址与物理地址的对应信息,有生存期
  • ARP解析会先检查ARP缓存,缓存中没有再去访问IP地址对应的硬件地址并广播ARP请求帧,找到后还会更新缓存
  • RARP与ARP相反:将局域网某个主机的物理地址转换为IP地址

3.TCP负责发现传输问题,一旦有异常就发信号要求重新传输,还采用滑动窗口的方式进行流量限制

  • 三次握手
    • Client发送请求报文SYN,还会传初始序列号seq1
    • Server接受后发送SYN+ACK,这会传初始序列号seq2和确认字段ack为seq1,表示上一个初始序列号已收到
    • Client接受后发送ACK,seq=x+1,ack=y+1

为什么是三次握手?

答:三次握手是为了确保双方都知道彼此都已经准备好。若改为两次握手的话,在Server发送SYN+ACK出去时就已经满足,但这个SYN+ACK可能会在中途丢失,导致Client不知道Server是否准备好,从而一直在等待形成死锁。而三次握手的话,即使最后一次Client发送的ACK丢失也不受影响

  • 四次挥手
    • Client发送中断连接请求报文FIN并进入FIN_WAIT状态
    • Server接受后发送ACK(此时仍在传数据),Client进入FIN_WAIT状态(第二次)
    • Server发送中断报文FIN
    • Client收到后发送ACK,并进入TIME_WAIT状态(进入该状态后2msl默认4分钟后会中断连接)
  • msl是报文最大生存时间,默认2分钟,但实际其实一般用30s代替

为什么是四次挥手?
答:因为发送端提出FIN报文后,接收端很有可能还有数据未传完,因此先回一个ACK,然后传完数据后再回FIN,因此比三次握手额外多一步操作

TIME_WAIT状态的意义是什么?

答:TIME_WAIT是以防第四次挥手的ACK中途丢失而导致Server不知道要关闭连接,所以Client会在此状态多等2msl,在此期间若没有收到Server发送过来的回复则表明Server收到了ACK,明白此时关闭连接是安全的再关闭连接

(ps:在连接建立与关闭的过程中,TCP具有超时重传机制,即若该端规定时间内没有收到预期报文,它会默认上一次自己发送的报文丢失从而再重新发一次)

4.一个电子邮件程序使用的TCP/IP协议:

  • 使用SMTP来发送邮件(包括发送方发给发送方邮件服务器,和发送方服务器发给接受方邮件服务器)
    • SMTP只能传ASII码数据,如果非ASII码,需要用MIME转化成ASII码再用SMTP传(接收方也要用MIME进行解析)
  • 使用POP从邮件服务器下载邮件
    • IMAP也可以
  • ps:用浏览器去登录邮箱并不涉及以上协议,用户只用http协议即可,SMTP和POP等由邮件服务器内部处理

5.TCP靠什么保证数据传输可靠?

  • 校验和:数据段当做整数加起来,进位补在末尾,最后取反
  • 序列号seq:每个字节的数据都有编号
  • 确认应答ack:有ACK报文机制
  • 超时重传
  • 连接管理:三次握手、四次挥手
  • 流量控制:滑动窗口,根据接受端能力决定发送速度
    • 滑动窗口是接受端buffer的大小,用来告诉发送端的
  • 拥塞控制
    • 拥塞窗口是发送端的窗口

6.TCP如何解决粘包、拆包问题?

  • 给数据包添加包首部,首部至少包括包的长度
  • 将数据包封装为固定长度,不够长的用0填充
  • 在数据包之间设置边界,如添加特殊符号

7.DNS原理(以www.tmall.com为例):树状结构、迭代递归查询

  • 先在本机DNS缓存查
  • 再到根服务器查
  • 再到com域DNS服务器查
  • 再到tmall.com域DNS服务器查
  • 最后到www.tmall.com域DNS服务器查
    (DNS使用别名CNAME是为了方便cdn配置,用于实现CDN加速效果)

8.HTTP状态码

  • 1开头表示信息
  • 2开头表示成功(200-请求成功)
  • 3开头表示发生了重定向(301-网页被永久转移到其他URL)
  • 4开头表示客户端错误(404-请求的网页不存在)
  • 5开头表示服务端错误(500-内部服务器错误)

9.HTTPS加密过程(七次握手)

  • 前三次就是TCP建立连接的三次握手
  • 第四次:client发送TLS版本号+支持加密套件列表+希望使用的TLS选项(TLS是安全的传输层协议)
  • 第五次:server发送一个选择的加密套件+选择的TLS选项+自己的证书(证书包含公钥)+
  • 第六次:client发送公钥加密出的对称密钥+自己的证书
  • 第七次:server使用对应私钥解出对称的密钥后,发送Finish,之后就可以用这个对称秘钥进行传递了
  • 总而言之就是先非对称加密传递,最后再对称加密传递(优点计算量小、加密速度快、加密效率高),加密套件就是密钥生成遵循的算法

10.HTTP与HTTPS主要区别

11.常见端口

  • 20-FTP文件传输协议数据端口
  • 21-FTP文件传输协议控制端口
  • 25-SMTP简单邮件传输协议
  • 53-DNS域名服务器
  • 80-HTTP超文本传输协议
  • 110-POP3邮件协议
  • 443-HTTPS超文本传输协议
  • 1080-sockets
  • 3306-MySQL

12.五类IP地址范围

  • A类:1.0.0.1到127.255.255.255(第一段为网络,剩下三段为本地计算机号码)
  • B类:128.0.0.1到191.255.255.255(前两段为网络,后两段为本机计算机号码)
  • C类:192.0.0.1到223.255.255.255(前三段为网络,最后一段为本地计算机号码)
  • D类:224.0.0.0到239.255.255.255(又叫多播地址,组播地址,最高位为“1110”)
  • E类:以“1111”开头,留作未来使用

13.在浏览器中键入URL并回车会发生什么?

  • 1.DNS解析获得目标IP地址:浏览器缓存-操作系统缓存-host文件查找-路由器缓存-IPS DNS缓存-顶级/根DNS服务器查找
  • 2.通过对IP地址ARP解析获得物理MAC地址
  • 3.TCP连接和TLS握手
  • 4.client发送HTTP请求
  • 5.server收到并响应HTTP请求,处理请求并生成html代码,返回给浏览器
  • 6.浏览器解析并渲染页面显示

14.TCP/IP数据链路的交互过程

  • 网络层等到满足以下两个条件时,会去自己的ARP缓存表中查找
    • 数据链路层得到mac地址
    • 数据包到达网络层,准备发往数据链路层
  • 若查到,则将目标ip的mac地址封装到发往数据链路层的数据包的包头
  • 若查不到,则发起一个广播,让具有该ip的机器回复其mac地址,并重复上述操作

15.http中的GET请求、POST请求和PUT请求

  • GET请求
    • 参数通过url明文传递,只能用ASCII码,有长度限制,这个长度是浏览器限制的,实际上http别未有这种限制
    • 浏览器会主动缓存(包括传的参数)
    • 按RFC规范来是只读操作,是安全幂等的(幂等指的是多次执行相同操作,结果都是相同的)
  • POST请求
    • 参数放在request body里,有多种编码方式(get只能url编码)
    • 不会被浏览器主动缓存
    • 按RFC规范来说是新增操作,不是安全幂等的(实际上开发者可以不遵循规范,让get也去修改服务器数据)
  • PUT请求(其他和POST相似)
    • 按RFC规范来说是更新操作,是安全幂等的
  • RFC规范并没有规定GET请求不能带body的,任何请求都可以带body的。只是因为RFC规范定义的GET请求是获取资源,所以根据这个语义不需要用到body。
  • URL 中的查询参数也不是GET所独有的,POST请求的URL中也可以有参数的。

16.互联网主要硬件有中继器、网桥(用于局域网)和路由器

17.网络发送数据的原则是:先发大的,再发小的

18.根据CSMA/CD原理

传输速度-最短帧长度 = 网络传输速率-最大距离-2

19.路由器总是具有两个或两个以上的IP地址,并且路由器接口可以自动获取IP地址

20.信息帧头部包括:标志字段、地址字段、控制字段和协议字段(0021H表示网络层使用IP协议)

21.发送窗口一定要小于接受窗口

22.协议是水平的,用于控制同一地位的实体间的通信规则;服务是垂直的,是下层向上层通过层间接口提供的功能

23.以太网MAC协议时无连接不可靠的,因为局域网通道质量好,它只负责高效率地交付,纠错由高层来完成

24.网络延迟:报文进入网络到它离开网络的时间,可以看成是发送端到接受端的时间

往返延迟:报文从客户端发出到客户端收到服务端响应的时间

25.192.168.0.234/26是C类,所以前三段是网络地址,子网掩码默认为255.255.255.0,但由于有个/26,所以子网掩码实际上是255.255.255.26,ip地址与子网掩码与运算得到网络地址

26.路由器和交换机的区别

  • 交换机主要工作在数据链路层;路由器工作在网络层
  • 交换机转发所依据的对象时:MAC地址;路由转发所依据的对象是:IP地址
  • 交换机主要用于组建局域网,而路由主要功能是将由交换机组好的局域网相互连接起来,或者接入Internet。
  • 交换机能做的,路由都能做。交换机不能分割广播域,路由可以。路由还可以提供防火墙的功能。路由配置比交换机复杂
  • 总而言之路由器是快递分拣中心,交换机是区域快递员

27.DNS主要靠UDP协议传输,只有请求超过512字节时才会去用TCP协议,可以分割成多个片段

28.TCP/IP报文

  • Ethemet帧头
  • IP头部
    • 版本:占4比特,用来表明IP协议实现的版本号,当前一般为IPv4,即0100
  • TCP头部
    • 确认号:占32比特。只有ACK标志为1时,确认号字段才有效。它包含目标端所期望收到源端的下一个数据字节
    • 标志位字段:占6比特。各比特的含义如下:
         - URG:紧急指针(urgent pointer)有效
         - ACK:确认序号有效
         - PSH:接收方应该尽快将这个报文段交给应用层
         - RST:重建连接
         - SYN:发起一个连接
         - FIN:释放一个连接
  • 上层数据
  • FCS

29.HTTPS和HTTP的区别主要如下:

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

30.DNS在进行区域传输的时候使用TCP,普通的查询使用UDP

  • 因为UDP快,开销小但是基于UDP传输的DNS为了限制报文不超过576(历史原因),所以将DNS报文限制在512字节

31.网络请求说明

  • 200,成功访问
  • 500,服务器错误
  • 304,服务器告知本次访问的资源自上次访问以来没有变化,此时浏览器可以直接使用上一次缓存的本地资源

32.http和tcp的关系

  • http在应用层,tcp在传输层
  • http是建立在tcp基础之上的,当发起一个http请求时,http会通过tcp建立一个与服务器的链接通道,但是一旦得到自己要的数据就会断开(相当于把tcp长连接当短连接使用),所以也叫无状态链接
    • 无状态连接就是每次传输数据就新建一个连接,而有状态连接是固定一个连接传多次数据,服务器在这个过程中能记录下数据的一些信息,所以叫有状态连接
  • http用建立tcp通道传输数据,tcp通过套接字socket传输数据
  • http1.1后默认开启keep-alive,即一直持续到客户端或服务器端提出断开连接

33.浏览器的缓存机制

  • 概念:优先用上次访问接受到的数据来渲染,除非有变化
  • 实现方式:
    • 强制缓存:正常发起请求,只要之前这个请求的响应头里的相对时间Cache-Control或绝对时间Expires没过期,就一定要去使用浏览器的本地缓存
      • 同时存在时,Cache-Control优先级大于Expires
    • 协商缓存:发起一个带协商缓存字段的请求,响应码为304,表示可以使用本地缓存。有两种实现
      • 请求头If-None-Match本地缓存的资源的id,响应头Etag表示资源的id
        • 如果服务器判断If-None-Match == 当前资源的id,那么就会返回200和资源,否则返回304
      • 请求头If-Modified-Since表示本地缓存的该资源的最后修改时间,响应头Last-Modified表示该资源的最后修改时间
        • 如果服务器判断If-Modified-Since时间早于当前修改时间,那么就会返回200和资源,否则返回304
  • 一般都是先判断是否能强制缓存,强制缓存未命中才发起待协商缓存字段的请求

34.cookie

  • 是为了让服务器能够记住用户而引入的一个字段
  • 当用户访问站点的时候,站点会为该用户分配一个Cookie值,站点使用该 Cookie 值来标记用户
  • 当浏览器接受到包含 Cookie 值的数据包后,会将Cookie 值取出,存放到浏览器中,随后浏览器会在发往该站点的数据包中就会自动为用户填充该值。

进阶部分

1.TCP/IP中包含一系列通信协议

  • TCP传输控制协议:应用程序之间通信
  • UDP用户数据包协议:应用程序之间简单通信
  • IP网际协议:计算机之间通信
  • ICMP因特网消息控制协议:针对错误和状态
  • DHCP动态主机配置协议:针对动态寻址

2.TCP使用固定连接

  • 某应用程序发送一个通信请求,该请求必须被送到一个确定的地址
  • 双方“握手”
  • TCP在两个应用程序之间建立一个全双工的通信(半双工是双发可以互发,但同一时间只能有一个互发),这个通信将占用两个计算机之间的通信线路

(UDP与TCP相似,但更简单,可靠性也更低,它俩相比就是UDP缺少像TCP这样的流控制)

3.IP是无连接的:

  • IP不会占用计算机之间的通信线路;
  • 通过IP,数据被分割为小的独立的包,并通过因特网在计算机之间传送;

4.IP路由器:

  • 当一个IP包从一台计算机被发送,它会到达一个IP路由器,然后由IP路由器负责将这个包路由至它的目的地,过程中还可能会经过其他的路由器
  • 在一个相同的通信中,一个包所经由的路径可能会和其他的包不同,而路由器负责根据通信量、网络中的错误或其他参数来进行正确寻址

5.TCP/IP工作协同:

  • TCP负责应用软件和网络软件之间的通信,IP负责计算机之间的通信
  • TCP负责将数据分割成IP包,在它们到达时再重新组合,IP负责将包发送到接受者

6.TCP/IP用4个数字来作为计算机编址:XXX.XXX.XXX.XXX(每个XXX在0~255之间,因为每个XXX用8位二进制表示)

  • 每个计算机必须有一个IP地址才能连入因特网
  • 每个IP包必须有一个地址才能发送到另一台计算机

7.域名的存在是为了方便记忆,域名要经过DNS程序翻译成数字形式的TCP/IP地址

当一个新的域名连同TCP/IP地址一起注册后,全世界的DNS服务器都会对此信息进行更新

8.TCP长连接

  • Client与Server先建立连接,建立后不断开,再进行报文传递,适用于操作频繁的通讯,可节省资源
  • 缺点是连接不关闭,随着Client数量增多,Server的负载承受不住

TCP短连接

  • 每进行一次报文收发交易才通讯连接,交易完毕后立即断开,即存在的连接都是有效连接
  • 缺点是若操作频繁则会浪费时间、带宽

9.TCP的拥塞控制

  • 发送方维护cwnd变量用来表示拥塞窗口
    • 没有出现拥塞,cwnd增大
    • 出现拥塞,cwnd减小
  • 发送方将当前拥塞窗口大小作为发送窗口大小,即swnd = cwnd
  • 发送方维护一个慢开始门限ssthresh
    • cwnd < ssthresh时,采用慢开始算法
    • cwnd = ssthresh时,采用两种算法都可以
    • cwnd > ssthresh时,采用拥塞避免算法
  • 拥塞控制的四种特性
    • 慢开始算法:先发1,确认后发2,再确认后发4…(乘2)
    • 拥塞避免算法:先发1,确认后发2,再确认后发3…(线性加1)
    • 快速重传:收到连续3个重复确认后,立即重传(避免等RTO超时重传)
    • 快速恢复:收到连续3个重复确认后,将当前ssthresh和cwnd减半,并执行拥塞避免算法

10.UDP协议是面向无连接的通讯协议,UDP数据包括目的端口号和源端口号,由于通讯不需要连接,所以可以实现广播发送

  • 使用UDP协议的有:TFTP、SNMP、DNS、NFS、BOOTP
  • TCP与UDP区别
    • TCP面向连接,是可靠的字节流服务
    • UDP面向无连接,是不可靠的数据报服务
  • 如何用UDP实现TCP可靠传输(已有的UDP可靠传输RUDP、RTP、UDT)
    • 添加seq/ack机制(seq是序号)
    • 添加发送和接受缓冲区,实现超时重传

11.ip地址是ip协议提供的统一地址格式,为互联网上每个网络、每台主机分配的一个逻辑地址,由网络号和主机号组成(主机号为0的ip地址表示网络地址)

12.什么是子网掩码?

答:子网掩码用来识别两个IP地址是否同属于一个子网,1表示网络位,0表示主机位。若两IP地址与子网掩码经过位与计算后结果相同,则表明它们在同一子网。“0”地址和“1”地址一般不用来计算子网掩码,因为一个是网络地址、一个是广播地址。(ip地址与掩码取反再相与就是主机地址,ip地址与掩码直接相与就是网络地址)

13.HTTP各版本特点

  • HTTP1.0:无状态、无连接(即无法复用连接)
  • HTTP1.1:
    • 长连接:默认开启kepp-alive
    • 支持请求管道化:使请求能够看起来像是并行发送,实际上仍是有顺序的,并且请求发出去后不用等待其回来就可以发二个请求出去
    • 缓存处理
    • 断电传输
    • 增加Host字段:使一个服务器能创建多个Web站点
  • HTTP2.0:
    • 二进制分帧:在应用层和传输层之间
    • 头部压缩:重复的请求头只需要发一次
    • 服务器推送:无需用户发出请求)
  • HTTP2.0:
    • 无队头阻塞
    • 更快的连接建立
    • 连接迁移

14.对称加密和非对称加密

  • 对称加密:明文+密钥=密文; 密文+密钥=明文
  • 非对称加密:明文+公钥=密文; 密文+私钥=明文
  • HTTPS先采用非对称加密传输密钥,传完后数据就都可以使用对称加密要传输了

15.两个机制(注意它俩不能同时使用,否则会造成互相等待)

  • 延时确认:发送ack后
    • 有segment,立即发送
    • 没有segment。等待下一个200ms超时时再发送一个ack
  • Nagle算法:一个TCP连接上只能有一个没有被确认的数据包,在这个确认没有被收到前不发送任何数据段,此时会收集小的报文段以便确认到达时一起发送

16.早期拨号上网用SLIP协议,现在用的时PPP点到点协议

17.计网系统的基本组成时通信子网和资源子网

18.CSRF通过伪装来自受信任用户的请求来进入网址,XSS时实现CSRF的一条途径,在Client端增加伪随机数可以阻挡CSRF

19.Websocker至少需要一次握手,模型与node类似

20.IP、UDP和TCP传送数据的协议

  • OSPF网络层协议用IP数据报发送数据
  • RIP应用层协议使用UDP传送数据
  • BGP应用层协议使用TCP传送数据

21.多级页表更好时因为有助于减少实现进程的虚拟空间所需的页表大小

22.使用RS232在两台主机之间通信时,不需要有路由选择的网络层

23.SDH设备出现帧丢失(LOF)后,应立即倒换

24.曼切斯特编码时一种同步时钟编码技术(本身具有同步信号),每个码元被调成两个电平,因此数据传输速率只有调制速率的一半

25.5类线的传播距离最大时100米

26.交换机中找不到mac就会向其它端口转发

27.提供差错控制的有传输层、网络层、数据链路层

  • 传输层
    • 目的是做到”无传输差错”。即弥补帧丢失、帧重复、帧失序
    • 校验对象是段
  • 网络层
    • 校验只用于针对网络层的头部
    • 校验对象是包
  • 数据链路层
    • 目的是为了防止网卡软硬件bug、电缆不可靠、信号干扰而造成信号失真、数据错误
    • 只保证无比特出错,检测不出帧丢失、帧重复、帧失序
    • 校验对象是帧

28.NAT协议

  • 当在专用网内部的一些主机本来已经分配到了本地IP地址(即仅在本专用网内使用的专用地址),但又想和因特网上的主机通信(并不需要加密)时,可使用NAT
  • 所有使用本地地址(私网IP地址)的主机在和外界通信时,都要在NAT路由器上将其本地地址转换成全球IP地址,才能和因特网连接

29.VPN工作原理

  • vpn通过操作系统的接口直接虚拟出一张网卡,后续整个操作系统的网络通讯都将通过这张虚拟的网卡进行收发。这和任何一个代理的实现思路都差不多,应用层并不知道网卡是虚拟的,这样vpn虚拟网卡将以中间人的身份对数据进行加工,从而实现各种神奇的效果
  • 具体来说,vpn是通过编写一套网卡驱动并注册到操作系统实现的虚拟网卡,这样数据只要经过网卡收发就可以进行拦截处理
  • 一句话,vpn在IP层工作,而ss在TCP层工作。