计算机网络

  • 物理层——没有特殊协议
    • 单工:单向通信
    • 半双工:双向交替通信
    • 全双工:双向同时通信
    • 把离散的数字信号转化为连续的模拟信号
    • 信道复用:频分,时分,统计时分,波分,码分(每个用户m bit)
  • 数据链路层——ARP,RARP
    • CSMA/CD载波监听多点接入/碰撞检测:在广播信道上,同一时间只允许一台计算机发送数据。
    • 扩展局域网
      • 1.在物理层扩展:集线器
      • 2.在链路层扩展:交换机【存储着MAC地址到接口的映射】
        • 发送一个数据的时候,交换机就记录下源MAC地址和接口的映射。查找目的地址,找不到就广播数据,目的地址收到数据后,发回源MAC地址的接口,同时交换机记录下目的MAC地址和接口的映射。
      • 3.虚拟局域网
    • MAC地址:48位,网卡地址
    • LLC逻辑链路控制
    • MAC介质访问控制
      • 确定的:环流(令牌环,FDDI)
      • 不确定的:先来先服务(以太网)CSMA/CD载波监听多路访问与碰撞检测
  • 网络层——ARP,RARP,IP
    • IP因特网协议
    • IP地址:32位,网络号+主机号
      • A类:0+7+24
      • B类:10+14+16
      • C类:110+21+8
      • IP地址消耗的解决方法:NAT私有地址转换成IP地址,CIDR把很多小子网合并成一个大的路由条目,IPv6
      • 分配子网:
        1. 先确定是哪类网,默认子网掩码是_______
        2. 再确定要多少子网以及每个子网可支持的主机数;(题目给出)
        3. 确定借位数(比如13个子网,10个host,就要借4+4位)、
        4. 计算子网掩码:最后4位(host的位数)置为0,再从host开始的4位(子网的位数)置为1,所以最后8位为11110000,即240
        5. 子网网段地址:将IP地址和子网掩码做与操作
    • RARP逆向地址解析协议:发送主机发送广播,声明自己MAC地址,并让收到此信号的服务器分配一个IP地址,服务器检查RARP列表,查找收到该MAC地址对应的IP,如果存在,相应并提供IP,不存在就不响应
    • BOOTP自举协议:客户机发送广播请求IP,服务器收到后返回IP
    • DHCP动态主机配置协议:广播寻找服务器,服务器提供IP租用地址,客户端接受IP租约,告诉服务器,租约确认,租期确认【不需要手动配置IP地址,即插即用】
    • ARP地址解析协议:利用IP查MAC地址:先查ARP表,不存在目的IP的MAC地址则广播,目的收到发现和自己匹配的IP后发一个包含自己的MAC地址,源主机收到响应后,把MAC地址加入ARP表,再发送数据
    • ICMP因特网控制报文协议(用来传输出错报告控制信息)
      • Ping就是应用层直接使用网络层ICMP的例子
    • 路由器
      • 内部网关协议:
        • RIP基于距离向量(相邻为1)
        • OSPF最短路径优先
      • 外部网关协议:BGP寻找好的而不是最好的
      • 路由算法:
        • 静态:最短路径Dijkstra
        • 动态:距离矢量【测量邻节点的距离然后路由表传送给所有邻节点】/链路状态【发现并学习邻节点,然后把内容发送给其他所有人】
  • 传输层——TCP,UDP
    • TCP传输控制协议:可靠,面向连接的,软件检查数据段,重新发送丢失或错误的信息,要求应答,提供流控制&拥塞控制,只能1对1,全双工
      • FTP(建立2个并行的TCP:控制连接&数据连接)
    • UDP用户数据电报协议:不可靠,无连接(面向报文),不提供软件纠错,不要求应答,不提供流控制(但是快),可以1对1,多对多,1对多等
      • RIP,DNS,SNMP,TFTP,DHCP
    • 都使用端口来跟踪同一时间的通过网络的不同会话
    • Socket(IP_address,port端口)
    • TCP:面向字节流
      • 建立连接(3次握手)
        • 第一次握手
        • 服务器:执行监听和接受原语,并被动监视。
        • 客户端:执行连接原语,用SYN = 1生成一个TCP段,ACK = 0,表示连接请求。
        • 第二次握手
        • 服务器检查是否存在服务进程监视端口
        • 如果没有进程,则用RST=1回答TCP段
        • 如果存在进程,则决定拒绝或接受请求。
        • 如果接受连接请求,发送一段SYN=1和ACK=1.
        • 第三次握手
        • 客户端发送一段SYN = 0和ACK = 1来确认连接。
      • 细节:stop-and-wait protocol等到应答才发送下一条。ARQ自动重传请求。滑动窗口:要求源设备在向目的设备发送一定数量数据后接受一个确认
      • 拆除连接(4次挥手)
        • 第一次:客户端 → 服务器, FIN = 1
        • 第二次:服务器 → 客户端, ACK = 1
        • 第三次:服务器 → 客户端, FIN = 1
        • 第四次:客户端 → 服务器, ACK = 1
      • MSL最长报文段寿命:第四次挥手要等待2个MSL
        • 为了保证A 发送的最后一个ACK 报文段能够到达B【如果不等2MSL的话,发送完ACK直接关闭,一旦ACK丢失,那么服务器无法正常关闭】
        • 防止”己失效的连接请求报文段”出现在本连接中。
      • 流量控制:控制发送方的发送速率,保证接收方来得及接收。设置接收方的确认报文中的窗口字段,=0的时候发送方不能发送数据
      • 拥塞控制:降低整个网络的拥塞程度。
        • 发送方维护名为拥塞窗口cwnd的状态变量
        • 1.慢开始:发送的最初执行慢开始,cwnd=1,发送方知能发送1个报文段;收到确认后,cwnd翻倍,2、4、8…..
        • 2.拥塞避免:设置慢开始的门限ssthresh,超过门限时,每次cwnd+1,如果超时,令ssthresh=cwnd/2,然后重新开始
        • 3.快重传:接收方每次发送对已收到报文段的确认,如果发送方连续收到3个重复确认,那么可以确认下一个报文段丢失,立即快重传
        • 4.快恢复:只是丢失个别报文段,而不是网络拥塞,执行快恢复,令ssthresh=cwnd/2,cwnd=ssthresh,然后重新开始
    • 丢包,粘包:一般的做法是先收取一个固定大小的包头信息,接着根据包头里面指定的包体大小来收取包体大小
  • 会话层
  • 表现层
  • 应用层——Telnet,FTP,SMTP,SNMP,HTTP
    • FTP文件传输协议
    • Web页面请求过程
      • 1.DHCP配置主机IP等信息
      • 2.ARP
      • 3.DNS
      • 4.HTTP请求
        • 1,tcp3次握手
        • 2,请求
        • 3,响应
        • 4,浏览器渲染web界面
    • HTTP超文本传输协议
      • 简单快速,灵活(任意类型数据对象),HTTP0.9和1.0使用非持续连接,HTTP1.1使用持续连接,无状态(没有记忆能力),支持BS&CS
      • 一次HTTP操作称为一个事务。包括:建立连接,客户机发送请求给服务器,服务器发送响应给客户机,客户机显示。
      • 状态码
        • 1xx请求接受,继续处理
        • 2xx成功
        • 3xx重定向,要完成请求必须进行进一步操作
          • 301:永久;302:临时
        • 4xx客户端错误
          • 400:语法;401:认证;403:无理由
        • 5xx服务器端错误
          • 503:超负载/停机
      • HTTP请求方法
        • HTTP1.0:get获取,post发送,head
        • HTTP1.1新增:delete删除,connect,options,trace
      • HTTP1.0和HTTP1.1主要区别
        • 长(持久)连接(1.0需要使用keep-alive参数来建立,1.1默认支持)(发送多个请求,建立一次TCP🔗)
        • 节约带宽(1.1可以治发送head,等服务器回应状态码,再发送body,这样如果服务器返回401,就不用再发body了)
        • Host域(多个虚拟站点共享1个ip和port),1.1支持,1.0不支持
      • HTTP1.0和HTTP2.0主要区别
        • 多路复用(同一个连接并发处理多个请求)(帧对数据进行顺序标志,就可以并行传输数据)(Http2对请求都是基于流,只建立一路连接)
        • 头部压缩(HPACK算法)
        • 服务器推送(对客户端的一个请求发送多个响应,比如把相关资源一起发送给客户端)
        • 二进制格式:1.1解析基于文本,2.0采用二进制格式
      • HTTP和HTTPS的区别
        • HTTPS=HTTP+SSL(依靠证书来验证服务器的身份)
        • https要ca申请证书,要钱
        • http是明文传输,https是具有安全性的ssl加密传输
        • http用的是不同的连接方式,端口也不一样,http是80,https是443
        • http的连接无状态,
        • 缺点:费时,要钱,加密有限
      • 对称加密&非对称加密
        • 对称加密:加密解密用的是同样的钥匙
        • 非对称加密:加密解密用不同的钥匙
        • SSL的对称加密和非对称加密:
          • 客户端请求,服务器返回非对称的公钥
          • 浏览器用非对称的公钥加密对称钥匙和url给服务器
          • 服务器用非对称的私钥解密对称钥匙,用对称钥匙发送url内容
          • 浏览器用对称钥匙解密url内容
        • SSL的四次握手:
          • 1、client请求;
          • 2、server生成随机数1,并返回数字证书和公钥;
          • 3、client生产随机数2,该随机数用服务器公钥加密,防止被窃听,并返回给服务器
          • 4、server用私钥解密随机数2,随后生成随机数3,然后用三个随机数生成“对话密钥”(session key),并返回给客户端,用来加密接下来的整个对话过程
    • DNS域名系统
    • SMTP简单邮件传输协议(发)POP3(收)
    • TFTP简单文件传输协议
  • Socket是对TCPIP协议的封装,是接口而不是协议
    • 步骤:服务器时刻监听,客户端请求,连接确认
    • socket为长连接
    • Socket可以服务器直接发,http需要收到客户端请求
    • Open-write/read-close
  • HTTP状态码
    • 1XX:continue
    • 2XX:成功
      • 200 OK
      • 204 OK,但是响应报文不包含实体的主体(不需要返回数据
      • 206 客户端进行了范围请求
    • 3XX:重定向
      • 301:永久性重定向
      • 302:临时性重定向
      • 303:302+要求采用GET方法
      • 304:不满足请求报文头部的条件
      • 307:302+不要求采用GET方法
    • 4XX:客户端错误
      • 400:请求报文存在语法错误
      • 401:请求需要有认证信息
      • 403:无理由拒绝
      • 404:not found
    • 5XX:服务器错误
      • 500:服务器在执行请求时发生错误
      • 503:服务器暂时超负载或停机维护中,无法处理
  • HTTP首部字段:通用/请求/响应/实体
  • Session和Cookie的区别
    • session是服务器用来跟踪用户的一种手段,每个session都有一个sessionID,服务器创建了session后,把sessionID放在cookie中响应给客户端,客户端保存在浏览器中,然后之后的请求报文都含有sessionID。session用于服务器端,cookie用于客户端
    • 还有一种方法:URL重写
  • 通信数据转发:
    • 代理:接受客户端请求,转发给其他服务器,一般透明,不会改变url。目的:缓存、网络访问控制、访问日志记录。
    • 网关:将HTTP转化为其他协议进行通信,从而请求其他服务器的服务
    • 隧道:使用SSL等加密手段,建立安全的通信
  • Web攻击技术
    • 主动攻击:直接攻击服务器,比如SQL注入和OS命令注入
    • 被动攻击:让用户发送有攻击代码的HTTP请求,用户发送以后就泄漏Cookie等个人信息
      • 跨站脚本攻击XSS:把含有HTML,JS的代码注入到网页使用户加载。从而窃取个人信息,Cookie,显示伪造的文章图片
        • 过滤特殊字符:
          • Java:xssprotect
          • Nodejs:node-validator
          • Python:cgi.escape
          • PHP:htmlentities
        • 指定HTTP的Content-Type
      • SQL注入攻击:比如 passWord = “1’ OR ‘1’=’1”;
        • 参数化查询
        • 先针对传入的参数作字符取代(将1个单引号取代为连续2个单引号)
        • PHP魔术引号功能
        • 使用修正过的SQL数据库连接组件
        • 使用SQL防注入系统
      • 跨站点请求伪造XSRF:欺骗浏览器去访问曾经认证过的网站并执行一些操作
        • 检查referer字段:简单但是无法保证
        • 添加校验Token:要求提供一个特别的数据(比如伪乱数)
      • 拒绝服务攻击DoS:使目标的网络或者系统资源耗尽,使服务中断或停止
Table of Contents