计算机网络十八讲

TCP的封包格式:TCP为什么要粘包和拆包

拆包:将数据拆分成多个TCP段传输
粘包:将多个数据合并成一个TCP段发送
TCP拆包的作用:将任务拆分处理,降低整体任务出错的概率,以及减小底层网络处理的压力,粘包过程需要保证数据经过网络的传输,又能恢复到原始的顺序

TCP是一个传输层协议,将数据拆分成很多部分进行发送
为什么要拆分?

  • 为了稳定性,一次发送的数据越多,出错的概率越大
  • 为了效率,拆分数据包就能更好的利用这些并行的路径
  • 发送和接收的时候,都存在着缓冲区(缓冲区是内存中开辟的一块区域,目的是缓冲)
  • 内存的最小分配单位是页表,如果数据的大小超过一个页表,可能会存在页面置换问题,造成性能的损失

因此,在传输层封包不能太大,以缓冲区大小为单位,TCP协议会将数据拆分成不超过缓冲区大小的一个个部分,每个部分有一个独特的名词,叫做TCP段,TCP段经过复杂的网络结构,由底层的IP协议,负责传输到目的地,然后再进行重组

  1. Source Port / Destination Port 描述的是发送端口号和目标端口号,代表发送数据的应用程序和接收数据的应用程序
  2. Sequence Number 和 Achnowledgement Number 是保证可靠性的两个关键
  3. Data Offset 是一个偏移量(TCP Header部分的长度是可变的,需要一个数值来描述数据从哪个字节开始)
  4. Reserved 是很多协议设计会保留的一个区域,用于日后扩展能力
  5. URG / ACK / PSH / RST / SYN / FIN 是几个标志位,用于描述TCP段的行为
  6. Window 也是TCP保证稳定性并进行流量控制的工具
  7. Checksum是校验和,用于校验TCP段有没有损坏
  8. Urgent Pointer指向最后一个紧急数据的序号
  9. Options中存储了一些可选字段 MSS
  10. Padding存在的意义是因为Options的长度不固定,需要Padding进行对齐

TCP的稳定性:滑动窗口和流速控制是怎么回事

传输需要保证可靠性,还要控制流速,这两个核心能力均由滑动窗口提供

滑动窗口是TCP协议控制可靠性的核心,发送方将数据拆包,变成多个分组
然后将数据放入一个拥有滑动窗口的数组,依次发出,仍然遵循先入先出(FIFO)的顺序
但是窗口中的分组会一次性发送。窗口中序号最小的分组如果收到ACK,窗口就会发生滑动
如果最小序号的分组长时间没有收到ACK,就会触发整个窗口的数据重新发送

在这里插入图片描述
快速重传: 如果接收方想丢弃某个段,可以选择不发ACK,发送端超时后,会重发这个TCP段,有时接收方希望发送方尽快补发某个TCP段,这时可以使用快速重传能力

UDP协议:TCP协议和UDP协议的优势和劣势?

TCP:可靠性
UDP:灵活 (数据传输 网络控制 音视频 Web技术)

UDP 目标是在传输层提供直接发送报文的能力
UDP协议不会帮助拆分数据,它的目标只有一个,就是发送报文

UDP的封包格式
Source Port 源端口号
Destination Port 目标端口号
Length 消息体长度
Checksum 校验和:校验数据在传输过程中有没有丢失、损坏
Data octets 一个字节一个字节的数据

TCPUDP
目的差异提供可靠的网络传输在提供报文交换能力基础上尽可能简化协议轻装上阵
可靠性差异在保证可靠性提供更好的服务只管发送数据封包
连接vs无连接面向连接的协议无连接协议
流控技术流控技术
传输速度协议简化,封包小,没有连接、可靠性检查,速度更快
场景差异不适应高速数据传输场景Ping 和 DNSLookUp,只需要一次简单的请求/返回,不需要建立连接

TCP场景

  • 远程控制(SSH)
  • File Transfer Protocol(FTP)
  • 邮件(SMTP、IMAP)等
  • 点对点文件传输(微信等)

UDP场景

  • 网络游戏
  • 音视频传输
  • DNS
  • Ping
  • 直播

模糊地带

  • HTTP(目前以为TCP为主)
  • 文件传输

UDP不提供可靠性,不代表不能解决可靠性
UDP的核心价值: 灵活、轻量,构造了最小版本的传输层协议
实现连接(Connection),实现会话(Session),实现可靠性(Reliability)

IPv4协议:路由和寻址的区别是什么

IPv4是IP协议的第四个版本,是目前互联网的主要网络层协议
IP协议接收IP协议上方的Host-to-Host协议传来的数据,然后进行拆分,这个能力叫做分片
鱼和熊掌不能兼得–延迟、吞吐量、丢包率

  • 延迟:指的是1bit的数据从网络的一个终端到另一个终端需要的时间
  • 吞吐量:指的的是单位时间内可以传输的平均数据量
  • 丢包率:指发送出去的封包没有到达目的地的比例

类型选择:低延迟 高吞吐量 低丢包率 低成本

IPv4:是4个8位排列而成,总共可以编址43亿个地址,如103.16.3.1
寻址:

  • 找到顶层网络,例如103.16.3.1最顶层的网络号可以和255.0.0.0做位与运算
  • 找到下一层网络,用IP地址和下一级的子网掩码做位与运算
  • 找到再下一级的网络
  • 定位设备

总结:寻址和路由的区别
寻址:通过地址找设备,和现实生活中的寻址是一样的,比如根据地址找到一个公寓
路由:本质是路径的选择,就好像知道地址,但每到了十字路口,还需要选择具体的路径

IPv6:Tunnel技术是什么?

IPv6:切片、增加封包头、路由(寻址)
IPv6接收上方主机到主机(Host-to-Host)协议传来的数据

IPv4:4个八位,总共32位,用.分隔
IPv6:8个16位,总共128位,用:分隔,用16进制

IPv6寻址最核心的内容:要对网络进行划分
寻址过程:先通过站点前缀找到站点、然后追踪子网,再找到接口

Tunnel就是隧道,隧道不是只有一辆车通过,而是每天有大量的车辆来来往往
两个网络,用隧道连接,位于两个网络中的设备通信,都可以使用这个隧道

局域网:网络地址转换是如何工作的

局域网:局域网所有设备的IP地址,通常以192.168开头
设备间通信的本质:设备拥有的网络接口(网卡)间的通信
为了区别每个网络接口,互联网工程任务组(IETE)要求每个设备拥有一个唯一的编号

对于一个网络接口,它如何能知道目标接口的MAC地址呢?
地址解析协议(ARP)
发送接口会发送一个广播查询给到交换机,交换机将查询转发给所有接口
如果某个接口发现自己就是对方要查询的接口,则会将自己的MAC地址回传
采用逐级缓存的设计减少ARP请求(发送接口先查询本地的ARP表,如果本地没有数据,然后广播ARP查询)

网络地址转换技术(NAT):解决内网和外网通信问题
NAT通常发生在内网和外网衔接的路由器中,由路由器中的NAT模块提供网络地址转换能力

socket编程:epoll为什么用红黑树?

socket是一种编程的模型
socket是一种文件,准确来说是一种双向管道文件(管道会将一个程序的输出,导向另一个程序的输入,双向管道文件连接的程序是对等的,都可以作为输入和输出)
当线程想要读取客户端传输来的数据时,就从客户端Socket文件中读取数据
当线程想要发送数据到客户端时,就向客户端Socket文件中写入数据
服务端监听端口的本质:将服务端Socket文件和端口绑定,这个操作称之为bind
如nginx监听80端口,node监听3000端口,ssh监听22端口,tomcat监听8080端口

响应式:最合适的观察者时操作系统本身
原因:对Socket文件的读写都要经过操作系统
中间的观察者需要实现一个高效的数据结构(基于红黑树的二叉搜索树)
为什么用红黑树?
1让线程可以注册自己关心的消息类型
2.当Socket发生变化时能快速判断是哪个线程需要知道这个消息

流和缓冲区:缓冲区的flip是怎么回事

流和缓冲区都是用来描述数据的
计算机中数据往往会被抽象成流,然后传输

流:读取文件的时候,文件被抽象成流
流的内部构造,决定了每次能从文件中读取多少数据
从流中读取数据的操作,本质上是一种迭代器

文件流 -> 缓冲区 ->网络流
缓冲区:设计一个秒杀系统,如果同时到达的流量过高,也可以使用缓冲区将用户请求先存储下来,再进行处理,这个操作被称为削峰,削去流浪的峰值

网络I/O模型:BIO、NIO和AIO有什么区别?

  • 编程模型:合理设计API,让程序写的更舒服
  • 数据的传输和转化成本:比如减少数据拷贝次数,合理压缩数据等
  • 高效的数据结果:利用好缓冲区、红黑树等

BIO:Blocking I/O 阻塞 I/O,API的设计会阻塞程序调用
NIP:None Blocking I/O,API的设计不会阻塞程序的调用
AIO:Asynchronous I/O,API的设计会多创造一条时间线

无论哪种 I/O 模型,都要将数据从网卡拷贝到用户程序(接收),或者将数据从用户程序传输到网卡(发送)

  • 无论哪种编程模型都需要使用缓冲区,BIO、AIO、NIO都需要缓冲区
  • 类似epoll 这种注册 + 消息推送的方式,可以帮助我们节省大量定位具体线程以及事件类型的时间

如何实现RPC框架

RPC:远程过程调用
在远程必须定义这个方法,然后才可以通过RPC框架调用该方法
远程调用不仅可以传参数,获取到返回值,还可以捕捉调用过程中的异常。RPC让远程调用就像本地调用一样

RPC本质上是数据的传递,传递数据有一个最基本的问题要处理,就是提升吞吐量
在设计RPC框架的时候,负载均衡器的设计往往是需要和RPC框架一起考虑
因为RPC框架提供了注册、发现的能力,提供发现能力的模块本身就是一个负载均衡器

DNS域名解析系统:CNAME记录的作用是?

DNS域名解析系统:本质是定位资源

  • host:站点,DNS主要作用就是根据Host查找IP地址
  • Port:端口,代表提供服务的应用
  • Path:路径,代表资源在服务中的路径
  • Query:查询条件,代表需要的是资源中的某一个部分
  • Fragment:二级查询条件,通常不在服务端响应,而是用于前端展示定位内容

根域名服务器:域名系统位于最顶层的是根域名服务器
根域名服务器存储的不是域名和IP的映射关系,而是一个目录

域名分级和数据分区:根服务器提供的目录有一定的索引规则
在域名的世界中,通过分级域名的策略建立索引
通过域名的分级,可以将数据库划分成一个个区域

浏览器会缓存DNS,操作系统、路由器、本地DNS服务器也会…
绝大多数情况,请求不会到达根DNS服务器

CNAME:用于定义域名的别名
a.example.com IN CNAME b.example.com
这条DNS记录定义了a.exanple.com是b.exanple.com的别名
用处 1.当你想把一个网站迁移到新域名、旧域名仍然保留的时候 2.当你想把自己的静态资源放到CDN上的时候,CNAME就非常有用

内容分发网络:CDN回源如何工作?

内容分发网络(CDN ): 一个专门用来分发内容的分布式应用,CDN构建在现有的互联网之上,通过在各地部署数据中心,让不同地域的用户可以就近获取内容
需要考虑到流量、单点故障、延迟等因素

  • 在离用户更近的地理位置提供资源,可以减少延迟
  • 按照地理位置分散地提供资源,也可以降低中心化带来的服务压力

在这里插入图片描述
在这里插入图片描述
单一数据源(SSOT):在程序设计中,尽可能的去减少数据的来源,最好每个数据源只有单独一份
谁来提供这个单一的数据源呢? —服务提供者本身

HTTP协议:强制缓存和协商缓存的区别是什么

HTTP2.0 的多路复用:当一个网站需要加载的资源较多时,浏览器会尝试并发送请求(利用多线程技术)
浏览器会限制同时发送并发请求的数量,通常是6个
这样做一方面是对用户本地体验的一种保护,防止浏览器抢占太多网络资源
另一方面也是对站点服务的保护,防止瞬时流量过大

HTTP方法和RestFul架构
在RestFul框架中,状态仅仅存在于服务端,前端无状态
前端没有业务状态,却又要展示内容,因此前端拥有的是状态的表示,也就是Representation

强制缓存:请求过一次不需要再次发送请求的缓存模式,在HTTP协议中称为强制缓存
协商缓存:通过服务器来判断缓存是否可用,比强制缓存多发一次请求

流媒体技术:直播网站是如何实现的?

在流媒体技术不发达的时代,数据往往是以单个文件的形式存在的
在这里插入图片描述

  • 通常视频文件较大,因此在传输前通常需要压缩
  • 在播放前需要解码
    视频的压缩技术:是针对视频的特征进行特别处理的压缩技术

在人数较多时的优化策略

  • 放弃点到点技术,直接采用类似直播架构的中心化服务
  • 利用边缘计算,让距离相近的参会者利用共同的离自己最近的服务器交换数据

通常在一个网络中,等价成本下吞吐量、丢包率和延迟三者不能兼得
对延迟要求较高的场景:可能需要降低视频质量,或者部署边缘服务

爬虫和反爬虫:如何防止黑产爬取我的数据

爬虫:
Chronium(Chrome的开源内核)
用Chronium发起请求的时候,对于服务图工坊的反爬虫系统你的请求就变成了一次标准的用户行为,如果对方网站需要登陆才能爬去数据,不法分子还会模拟登陆行为。
如果仅仅是输入用户名和密码,那这个网站登陆行为非常容易模拟,只需要找到对方对应的接口,用户名和密码传过去,就可以拿到访问资源的令牌
破解验证码:只需要获得足够多的验证码图片样本,然后用tensorflow分析一下,基本上都可以做到一定的识别率,可以高于80%以上
模拟用户动作:对于一个爬取数据用的浏览器内核,往往还提供了模拟用户行为的功能:点击按钮,滚动一下页面,输入一行文字
IP的反追踪:利用代理,增加追踪的成本。比如黑客在从事犯罪活动通过多次代理。在爬虫领域有很多人会购买IP,购买大量的IP然后模拟成几百个用户在使用B站,防止B站的追诉以及防止B站安全策略的屏蔽

反爬虫:
1.从法律上高速爬虫哪些页面是不可以爬取的,写好robots.txt 放到网页的根目录
2.用户的识别,对于高频访问的IP要予以关注
设备指纹:利用设备上的信息,生成一个具有唯一性的字符串,因为这种生成算法是非标准化的,因此不同的数据安全团队会有自己的算法
3.字体加密:自己实现字符编码和字体文件,增加爬虫爬取数据的成本
4.加密传输:App的数据抓取就依赖于App数据传输使用的标准协议,比如一个用HTTPS协议传输数据的App,爬虫可以在App端安装证书,然后再利用代理实现中间人抓包,但如果数据用自己的协议加密,爬虫抓包的同时,必须能够破解这个加密协议

网络安全概述:对称、非对称加密的区别

对称加密算法:双方加密解密都用相同秘钥的算法
使用对称加密双方都知道秘钥和算法,会造成很多问题

非对称加密:公钥发送的数据必须用私钥解密,私钥发送的数据必须用公钥解密,目前最常见最广泛使用的非对称加密算法是RSA算法

私钥的创建:秘钥通常由提供服务的一方创建
每次创建是一对公私钥对,然后提供者将公钥给用户,自己保留私钥

是不是所有的加密都应该用非对称加密呢?

  • 非对称加密需要更多的运算资源
  • 很多协议使用非对称加密解决最核心的安全问题,再用对称加密解决其他问题
  • 例如:HTTPS协议:客户端和服务器之间会先用非对称加密交换临时对称加密密钥然后之后的通信会以对称加密执行,直到连接结束

信任链:为什么可以相信一个HTTPS网站

摘要算法:摘要是对原文的证明,从原文到摘要是一个不可逆的过程
目前多数网站用户的密码是以摘要的形式保存的
摘要算法解决了这几个问题

  • 为原文生成固定长度的内容证明(内容摘要)
  • 摘要无法被逆向的到原文,看上去是随机的,黑客拿到了也不知道原文
  • 极少概率碰撞:不同的内容极大概率(绝大多数接近100%)会生成不同的摘要

数字签名: 将合同生成摘要,再使用自己的私钥加密摘要得到一个密文串
数字签名是对摘要的加密,因此数字签名本身还拥有摘要能力

互联网世界需要机构提供证书,由机构证明他们的公钥

攻防手段:如何抵御SYN拒绝攻击

拒绝服务攻击(DoS):利用大量的流量迅速向一个网站发送出去

  • 直接不停发送Ping消息的,利用底层的ICMP协议,称为ICMP攻击
  • 走UDP协议的,称之为UDP洪水
  • 不停利用TCP协议发送SYN消息的,也叫SYN攻击
  • 模拟用户行为,不停发帖、浏览帖子、浏览网页、加购物车等,称为挑战黑客攻击

防范措施

  • 防火墙会根据特征识别出攻击行为,进行过滤
  • 进行多活建设:两地三机房
  • CDN是大量的缓存节点,DoS攻击CDN时候用不上力
  • 对服务适当降级
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值