网络原理_网络原理多媒体学习网站设计开发 - CSDN
精华内容
参与话题
  • 计算机网络原理

    万次阅读 2017-02-14 11:46:25
    面向终端的计算机网络 计算机-计算机网络 开放式标准化网络 因特网的广泛应用与高速网络技术发展 计算机网络组成 资源子网和通信子网 资源子网:主机HOST和终端T 通信子网:通信节点和通信链路 计算机网络功能 硬件...

    概述

    计算机发展的四个过程

    1. 面向终端的计算机网络
    2. 计算机-计算机网络
    3. 开放式标准化网络
    4. 因特网的广泛应用与高速网络技术发展

    计算机网络组成
    资源子网和通信子网

    • 资源子网:主机HOST和终端T
    • 通信子网:通信节点和通信链路

    计算机网络功能

    • 硬件资源共享
    • 软件资源共享
    • 用户间信息交换

    计算机网络分类

    拓扑类型
    - 点对点信道
    - 广播信道

    星形拓扑
    中央节点复杂
    这里写图片描述

    总线拓扑
    不具有实时功能
    这里写图片描述

    环形拓扑
    分布式
    一个断全网断
    这里写图片描述

    树形拓扑
    广播
    根节点压力大
    这里写图片描述

    网形拓扑
    广泛
    这里写图片描述

    混合型拓扑

    交换方式

    • 电路交换(Circuit Swithing)
    • 报文交换(Message Swithing)
    • 分组交换(Packet Swithing)

    覆盖范围

    • 局域网LAN
    • 广域网WAN

    网络传输技术

    • 广播式网络(Broadcast Network)
    • 点对点式网络(Point-to-Point Network)

    其他
    双绞线网,同轴电缆网,光纤网,无线网
    窄带网,宽带网
    科研网,教育网,商业网,企业网

    计算机网络标准化

    • ISO国际标准化组织
    • ITU国际电信联盟
    • NBS美国国家标准局
    • ANSI美国国家标准协会

    计算机网络体系结构
    计算机网络各层次的结构模型及协议的集合

    这里写图片描述

    这里写图片描述

    计算机网络协议 (主要)

    • OSI/RM
    • TCP/IP

    OSI/RM
    包括体系结构,服务定义,协议规范三级抽象

    七层的功能:
    物理层Physical Layer
    使原始数据比特流在物理介质上传输
    数据链路层Data Link Layer
    将不可靠的物理链路改造成对网络层来说是无差错的数据链路,还要协调收发双方的数据传输速率
    网络层Network Layer
    解决如何使数据分组跨越通信子网从源传送到目的地
    传输层 Transport Layer
    传输层提供端到端的透明数据传输服务,使高层用户不必关心通信子网的存在
    会话层Session Layer
    两个会话层实体之间进行对话连接的建立和拆除
    表示层Presetation Layer
    管理标准方法定义的抽象数据结构,将计算机内部的表示形式转换成网络通信中采用的标准表示形式
    应用层Application Layer
    不同的应用层为特定类型的网络应用提供访问OSI环境的手段

    TCP/IP
    应用层Application Layer

    • SMTP
    • FTP
    • DNS
    • FTP

    传输层Transport Layer

    • TCP传输控制协议
    • UDP用户数据报协议

    互联层Internet Layer

    • IP互连网协议
    • ICMP互连网控制报文协议
    • ARP地址转换协议
    • RARP反向地址转换协议

    主机-网络层Host-to-Network Layer

    • 广域网协议 ARPANET,NILNET和 X.25
    • 局域网协议 IEEE802.3的CSMA/CD,IEEE802.4的Token Bus及 IEEE802.5的Token Ring等

    这里写图片描述

    两大参考模型比较:
    相同:
    两者协议栈,都采用了层次结构的概念
    不同:
    OSI有七层,TCP/IP只有四层
    无连接和面向连接的通信范围有所不同
    OSI网络层同时支持,传输层上只支持面向连接
    TCP/IP网络层只有无连接,传输层上同时支持

    每层对应协议比较:

    这里写图片描述

    物理层

    物理层四个重要特性

    • 机械特性
      几何尺寸和插口芯数排列方式
    • 电气特性
      非平衡方式
      采用差动接收器的非平衡方式
      平衡方式
    • 信号的功能特性
      规定了接口型号来源,作用以及其他型号之间的关系
      DTE-DCE 1XX
      DTE-ACE 2XX
      EIA RS-232C 字母组合命名法
      EIA RS-449 英文缩写命名法
      EIA RS-232C 非平衡发送和接收
      EIA RS-449
      EIA RS-423 差动收发器非平衡
      EIA RS-422 平衡
    • 规程特性
      数据交换的控制步骤
      V.24 V.25 V.54
      X.20 X.21 X.21bis
      重要 EIA RS-449及X.21
      常用异步通信接口 EIA RS-232C

    物理传输介质特性

    • 双绞线
      电话通信中模拟信号传输,也可以用于数字信号传输
      无屏蔽双绞线
      屏蔽双绞线
    • 同轴电缆
      同轴电缆上使用频分多路复用技术可以支持大量视频,音频通道
    • 光纤
      光源:
      发光二极管LED 多模光纤
      注入型激光二极管ILD 单模光纤
      光电二极管 将光波转换成电能
      PIN检波器 APD检波器
      移幅键控ASK
    • 无线传输介质
      无线电波,微波,红外线,可见光
      蜂窝无线通信
      卫星通信
      低轨道LEO

    比较:

    • 双绞线
      价格便宜,对于低通信容量局域网性价比可能是最好的
    • 同轴电缆
      容量大时选择
    • 光纤
      频带宽,速率高,体积小,重量轻,衰减小,能电磁隔离

    数据传输速率
    最大传输速率

    R=1T.log2N(bps)

    T 数字脉冲信号宽度(全宽码情况)或重复周期(归零码情况)
    N 码元所取得有效离散值个数
    B=1T(Baud)

    B 信号传输速率,也称码元速率,调制速率或波特率(Baud)
    R=B.log2N(bps)

    B=R/log2N(bps)

    信道容量
    无噪声下码元速率极限值B与信道带宽H的关系:

    B=2.H(Baud)

    H 信道的带宽,频率范围

    奈奎斯特公式

    C=2.H.log2N(bps)

    N 码元所取得有效离散值个数
    C 信道最大数据传输速率

    香农公式

    C=H.log2(1+S/N)(bps)

    S 信号功率
    N 噪音功率
    C 信噪比 表现为10log10(S/N) 单位分贝dB
    例如 30dB=10log10(1030/1010)

    通信方式

    • 并行通信方式
      这里写图片描述
    • 串行通信方式
      这里写图片描述

    串行通信的方向性:单工,半双工,全双工

    多路复用技术
    频分多路复用FDM
    在物理信道可用带宽超过单个原始信号所需带宽情况下,可将该物理信道的总带宽分割成若干个与传输单个信号相同(或略宽)的子信道,每个信道传输一路信号这里写图片描述
    时分多路复用TDM
    若介质能达到的位传输率超过所需的数据传输速率,将一条物理信道按时间分成若干个时间片轮流地分配给多个信号使用。
    这里写图片描述
    波分多路复用WDM
    频分多路复用在极高频率上的应用

    同步传输异步传输
    模拟信号 连续
    数字信号 离散

    • 异步传输
      一次只传输一个字符
    • 同步传输
      需要在数据块开始和结束处加一个帧头和帧尾
      面向字符
      加入同步字符SYN
      面向位
      帧头和帧尾使用01111110为标识,避免在数据同样出现此模式,数据中每出现5个1就插入一个附加的0,接受后按同样规则删除。

    模拟数据和数字数据

    • 模拟数据是某区间内连续变化的值,例如声音和视频都是幅度连续变化的波形
    • 数字数据是离散的值

    数据编码
    数字数据的数字信号编码
    数字信号可以采用基带传输,所谓基带就是指表示二进制比特序列的矩阵脉冲信号所占的固有频带,称为基本频带
    判决门限

    NRZ
    - 单极性不归零码

    这里写图片描述

    • 双极性不归零码

    这里写图片描述
    这两种属于全宽码,重复发送“1”码势必连续发送正电流,反之亦然,导致码元与码元之间没有间隙,不易识别
    需要发送器和接收器定时或同步

    • 单极性归零码
      “1”码发送正电流,短于一个码元时间宽度,即窄脉冲,”0”码发送不完全电流

    这里写图片描述
    - 双极性归零码
    “1”码发送正窄脉冲,”0”码发送负窄脉冲,取样时间脉冲中心

    这里写图片描述
    归零码脉冲窄,根据脉冲宽度与传输宽度成反比,占用的频带较宽
    单极与双极的区别在于0码是否发送负电流
    归零不归零的区别在于脉冲宽度

    基带传输的重要问题:同步问题
    同步:

    • 位同步:接收端每一位数据都要与发送端同步
      外同步法:接收端的同步信号事先从发送端送来
      自同步法:能从数据信号波形提取同步信号的方法
      曼彻斯特编码:从高到低跳变为”1”,从低到高跳变为”0”
      差分曼彻斯特编码:以有无跳变表示01,有跳变表示”0”,没有跳变表示”1”
    • 群同步:”群”以字符为单位,又称”异步传输”

    群同步传输规程:

    1. 1为起始位
    2. 5-8位数据位
    3. 1位奇偶校验位
    4. 1-2位停止位

    模拟数据的数字信号编码
    信号数字化的转换过程可包括采样,量化,编码
    为了绕过基带信号的相关问题,采用调制信号传输,用连续波的振幅,频率或者相位调制后用来传输信息

    数据交换技术

    • 电路交换
      电路传输
      数据传输
      电路拆除
      数据传输可靠,迅速
      电路空闲时信道容量容易被浪费

    • 报文交换
      存储-转发方式
      电路利用率高
      通信量很大时仍然可以接受报文
      一个报文发送到多个目的地
      不能满足实时或交互式的通信要求

    • 分组交换
      将一个报文分成若干个分组,每个分组的长度有一个上限
      虚电路方式
      逻辑通路,不需要路由选择判定
      数据报方式
      没有虚电路,为每个数据报做路由选择

    电路交换

    电路交换

    报文交换

    报文交换

    虚电路

    虚电路

    数据报

    数据报

    项目 电路交换 分组交换
    建立呼叫连接 要求 不要求
    专门的物理途径
    每个分组沿着相同的路由路径
    电文或分组按序到达
    一台交换机崩溃是否有严重影响
    可用带宽 固定 动态
    可能拥塞的时间点 建立呼叫连接的时候 每个分组传输的时候
    可能有浪费的带宽
    存储转发传输机制
    透明性
    收费 每分钟 每个分组

    数据链路层

    数据链路四大功能

    • 帧同步功能
      比特流中区分帧的起始与终止
    • 差错控制功能
    • 流量控制功能
    • 链路管理功能
      连接建立,维持,释放

    帧同步四种方法
    从比特流中区分帧的起始与终止

    • 使用字符填充首尾定界符法
      DLE
    • 使用比特填充的首尾标志法
      01111110
    • 违法编码法
      曼彻斯特编码 低-低 高-高
    • 字符计数法
      DDCMP
      这里写图片描述

    差错控制的原因和方法
    原因:通信系统必须具备发现差错的能力,并采取措施纠正之,是差错控制在所能允许的尽可能小的范围之内。
    方法:通常引入计时器限定接受方返回反馈信息的时间间隔,有限时间内未能收到接收方的反馈信息,则计时器超时,认为传出的帧已出错或丢失,重新发送。
    自动请求重发ARQ和前向纠错FEC
    使用计时器和序号保证每帧都能正确的递交给目标网络一次。

    奇偶校验码

    https://en.wikipedia.org/wiki/Parity_bit

    CRC校验码
    生成多项式

    发送方

    Xr.K(X)=G(X)Q(X)+R(X)

    Q(X)为商式

    接收方
    因为模2算法R(X)+R(X)=0
    所以

    Xr.K(X)/G(X)=(G(X)Q(X)+R(X))/G(X)=Q(X)...R(X)

    Xr.K(X)+R(X)/G(X)=Q(X)


    T(X)/G(X)=Q(X)

    收发双方流量控制

    • 停等协议
      需要缓冲存储空间小,发送方要停下来等待造成信道浪费
    • 顺序接收管道协议
    • Go-back-N
    • 选择重传协议

    Go-back-N
    这里写图片描述

    选择重传协议
    这里写图片描述

    方法 发送窗口 接收窗口
    停等 1 1
    Go-back-N N 1
    选择重传 N N

    链路管理方法

    • 异步协议
      字符为独立信息传输单位
    • 同步协议
      帧为传输单位
      面向字符
      面向比特
      面向字节

    BSC(二进制同步通信协议)
    任何链路层协议可由链路建立,数据传输,链路拆除三部分组成。
    BSC协议将在链路传输的信息分为数据报文和监控报文

    标记 名称 ASCII码值 EBCDIC码值
    SOH 序始 01H 01H
    STX 文始 02H 02H
    ETX 文终 03H 03H
    EOT 送毕 04H 37H
    ENQ 询问 05H 2DH
    ACK 确认 06H 2EH
    DLE 转义 10H 10H
    NAK 否认 15H 3DH
    SYN 同步 16H 32H
    ETB 块终 17H 26H
    BCC 块检验

    BSC协议数据块有以下四种格式:

    • 不带报头的单块报文或分块传输中的最后一块报文
      这里写图片描述

    • 带报头的单块报文
      这里写图片描述

    • 分块传输的第一块报文
      这里写图片描述
    • 分块传输中的中间报文
      这里写图片描述

    正反向监控报文

    • 肯定确认和选择响应
      这里写图片描述
    • 否定确认和选择响应
      这里写图片描述
    • 轮询/选择请求
      这里写图片描述
    • 拆链
      这里写图片描述

    HDLC
    高级数据链路控制协议
    HDLC:不依赖于任何一种字符编码集,数据报文可透明传输,用于实现透明传输的"0比特插入法"易于硬件实现;全双工通信,有较高的数据链路传输速率;所有帧均采用CRC校验
    HDLC常用操作方式:

    • 正常响应方式NRM
      传输过程由主站启动
    • 异步响应方式ARM
      传输过程由从站启动
    • 异步平衡方式ABM
      允许任何节点启动

    这里写图片描述
    标志字段:01111110
    地址:命令帧 对方站地址 响应帧 自己站地址
    控制字段:用于构成各种命令和响应
    信息字段:任意比特串
    帧校验序列:可以使用CRC校验

    HDLC的帧类型:信息帧,监控帧,无编号帧

    这里写图片描述
    I帧
    N(S)发送帧序号,N(R)稍待确认

    S帧 S1,S2

    • 00准备就绪
    • 01拒绝
    • 10接受未就绪
    • 11选择拒绝
      U帧
      M1-M5
      PPP
      因特网数据链路层协议:串行线路IP协议,点到点协议
      提供功能:成帧,链路控制,网络控制
      PPP面向字符,HDLC是面向位的
      这里写图片描述
      标准HDLC标志字节
      地址域总是被设置成二进制值11111111
      控制域默认00000011
      协议域指明净荷域属于那一分组
      校验和域通常为2个字节,但通过协商也可以是4个字节

    网络层

    计算机网络三大功能
    路由选择,拥塞控制,网际互连

    比较虚电路和数据报技术

    比较项目 数据包子网 虚电路子网
    建立电路 不需要 需要
    地址信息 每个分组包含完整的源地址和目标地址 每个分组包含一个很短的虚电路号
    状态信息 路由器不保留任何连接相关的状态信息 每个虚电路都要求路由器为每个连接建立表项
    路由 每个分组被独立地路由 当虚电路建立的时候选择路径,所有的分组都沿着这条路径
    路由器失效的影响 没有,除非在崩溃过程中分组丢失 所有经过此失效路由器的虚电路都将终止
    服务重量 很难实现 如果有足够的资源可以提倡分配给每一个虚电路,则很容易实现
    阻塞控制 很难实现 如果有足够的资源可以提倡分配给每一个虚电路,则很容易实现

    路由选择原理

    • 最短路由还是最有路由
    • 采用虚电路还是数据报的操作方式
    • 分布式算法还是集中式算法
    • 网络拓扑,流量和延迟
    • 静态路由或动态路由

      三种静态路由和两种动态路由的区别

      静态路由

    • 最短路有选择算法(D氏)

    • 扩散法
    • 基于流量的路由选择 考虑网络负载

    动态路由

    • 距离矢量路由算法(Distance Vector Routing) RIP
    • 链路状态路由算法(Link State Routing) OSPF

    静态路由不考虑网络当前负载情况,动态路由路由选择依靠当前的状态信息

    距离矢量与链路状态的区别:

    http://docwiki.cisco.com/wiki/Routing_Basics#Link-State_Versus_Distance_Vector

    Link-state algorithms (also known as shortest path first algorithms)
    flood routing information to all nodes in the internetwork. Each
    router, however, sends only the portion of the routing table that
    describes the state of its own links. In link-state algorithms, each
    router builds a picture of the entire network in its routing tables.
    Distance vector algorithms (also known as Bellman-Ford algorithms)
    call for each router to send all or some portion of its routing table,
    but only to its neighbors. In essence, link-state algorithms send
    small updates everywhere, while distance vector algorithms send larger
    updates only to neighboring routers. Distance vector algorithms know
    only about their neighbors. Because they converge more quickly,
    link-state algorithms are somewhat less prone to routing loops than
    distance vector algorithms. On the other hand, link-state algorithms
    require more CPU power and memory than distance vector algorithms.
    Link-state algorithms, therefore, can be more expensive to implement
    and support. Link-state protocols are generally more scalable than
    distance vector protocols.

    距离矢量向所有节点要求全部路由表,却只发给邻居节点
    链路状态发送路由表信息给所有节点,所有节点只需发送与该节点有关的链接信息

    距离矢量发送全部路由信息更新给邻居节点
    链路状态发送部分路由信息更新给所有节点

    路由表计算

    拥塞原因及控制方法
    某一部分分组数量太多,使得该网络来不及处理,以致引起这部分甚至整个网络性能下降的现象,严重时出现死锁。
    原因:多条流入线路有分组到达,路由器慢速处理器缘故
    开环原因决定结果,闭环原因结果互为因果

    拥塞控制的通用原则:
    开环

    • 确定何时接受新的变量
    • 确定何时丢弃分组和丢弃那些分组
    • 网络不同点上执行调度决策

    闭环

    • 监视系统
    • 将该信息传递到能够采取行动的地方
    • 调整系统的运行,以改正问题

    拥塞预防策略

    策略
    传输层 重传策略
    乱序缓存策略
    确认策略
    流控制策略
    确定超时策略
    网络层 子网内部的虚电路与数据报策略
    分组排队和服务策略
    分组丢弃策略
    路由算法
    分组生存管理
    数据链路层 重传策略
    乱序缓存策略
    确认策略
    流控制策略

    虚电路拥塞控制

    • 准入控制
    • 重构子网拓扑
    • 进行资源预留

      数据报拥塞控制

    • 警告位

    • 抑制分组
    • 逐跳抑制分组

      负载丢弃

    • 文件传输 葡萄酒策略(老的比新的好)

    • 流媒体 牛奶策略

      抖动控制

    服务质量控制

    应用 可靠性 延迟 抖动 带宽
    电子邮件
    文件传输
    Web访问
    远程登录
    音频点播
    视频点播
    电话
    视频会议

    集成服务和区分服务
    集成服务:主要的IETF协议是资源预留协议
    区分服务:基于类别(Class-based)的服务质量

    多协议标签交换协议MPLS
    应用:X.25,ATM,帧中继

    网络互连设备及网络互连协议
    设备:

    • 转发器(Repeater) 网络物理层连接
      信号增强
    • 网桥(Bridge)提供数据链路层上的协议交换
      局域网逻辑功能自下到上可分为物理层,介质访问控制层(MAC)及逻辑链路控制层(LLC)三层
    • 路由器(Router)作用于网络层,提供网络层上的协议转换
      建立并维护路由表
      提供网络间分组转发的功能
      这里写图片描述
    • 网关(Gateway)提供传输层以上各层间的协议转换

      透明网桥以混杂方式工作。接受连接到该网桥的局域网上传递的所有帧。每个网桥维护一个基于MAC地址的过滤数据库。透明网桥的路由机制采用生成树的方式。
      源路由选择的核心选择是坚定每个帧的发送者都知道接受者是否在同一个LAN上。当发送一个帧到另外的LAN时,源机器将目的地址的高位设置成1作为标记。另外它还在帧头加进此帧应走的实际路径。

      路由器和网桥的区别:
      网桥工作在数据链路层,而路由器工作在网络层。
      网桥连接两个局域网,数据链路层以上高层要采用相同的协议。路由器连接两个局域网,网络层以上采取相同的协议。
      网桥容易产生广播风暴

    协议:

    • 路由信息协议
    • 开放最短路径协议

    因特网互联层四大协议

    • 互联网协议(Internet Protocol)
    • 互联网控制报文协议(Internet Control Message Protocol)
      ping
    • 地址转换协议(Address Resolution Protocol)
    • 反向地址转换协议(Reserve Address Resolution Protocol)

    IGMP
    多播路由器和主机间询问和响应过程使用IGMP
    永久组不必创建永久存在
    临时组使用前先创建

    IP数据报格式
    这里写图片描述
    版本:IPV4,IPV6
    服务类型:服务
    IHL:4bit。代表头部长度,以32位字节为一个单位
    总长:16bit。头部数据总长。最大长度为65535个字节 2161
    DF:代表不要分段
    MF:代表还有进一步的分段
    分段偏移:13bit。标明分段在当前数据报什么位置
    生命期:8bit。用来限制分组生命周期的计数器。它在每个节点都递减。
    协议:8bit。说明分组发给哪个传输进程,如TCR,VDP
    头校验和:16bit。校验头部。
    源地址:32bit。源主机IP地址
    目的地址:目的主机IP地址
    选项:变长

    IPv4与IPv6的区别

    • IPv6把IP地址长度增加到128比特
    • 灵活的IP报文头部格式
    • 简化协议,加快报文转发
    • 提高安全性
    • 支持更多服务类型
    • 允许协议继续演变,增加新的功能

    传输层

    传输层地址和网络层地址的关系
    网际层地址是IP地址,即可以找到主机的地址;而传输层地址是主机上的某个进程使用的端口的地址

    这里写图片描述
    传输协议三要素

    1. 寻址
      传输地址
    2. 建立连接
      三次握手
    3. 释放连接
      对称释放方式
      非对称释放方式

    比较TCP协议和UDP协议
    TCP

    1. 面向连接的传输,传输数据需要先建立连接,数据传输完毕释放
    2. 端到端通信,不支持广播通信
    3. 高可靠性,确保传输数据正确性,不出现丢失或乱序
    4. 全双工方式传输
    5. 采用字节流方式,即以字节为单位传输字节序列。若字节流太长,将其分段。
    6. 提供紧急数据传送功能

    UDP

    1. 传送数据前无需建立连接
    2. 不对数据报进行检查与修改
    3. 无需等待对方的应答
    4. 以上特征,使其有较好的实时性,效率高

    比较TCP段和UDP段
    这里写图片描述
    源端口:16bit。源节点进程端口
    目标端口:16bit。目标节点端口
    序列号:32bit。TCP对字节流每个字节都编号。若每个数据段包含1000B,字节编号位X,X+1000。。。
    确认号:32bit。为准备接受的字节序列号
    头长度:4bit。随可变长度改变而改变
    标志:6bit。对其他字段说明或对控制功能的标志
    窗口:16bit。通知接收方还可以发送的数据字节数
    校验和:16bit。传输层差错校验
    紧急数据指针:16bit。标志字段为URG时,表示有紧急数据,紧急数据位于段的最开始
    选项:可变长度
    数据

    这里写图片描述
    校验和:不用时全部置为0
    TCP端口和UDP端口
    TCP
    0-256常用端口
    1-1023 IANA
    1024-5000 临时端口

    协议名称 协议内容 所使用的端口号
    FTP(控制) 文件传输服务 21
    FTP(数据) 20
    TELNET 远程登录 23
    HTTP 超文本传送协议 80
    GOPHER 菜单驱动解锁 70
    SMTP 简单邮件传送协议 25
    POP3 接受邮件传送协议 110

    UDP

    协议名称 协议内容 所使用的端口号
    DNS 域名解析服务 53
    SNMP 简单网络管理协议 161
    QICQ 聊天软件 8000
    TFTP 简单文件传输协议 69

    比较建立连接三次握手和拆除连接三次握手

    这里写图片描述

    这里写图片描述

    应用层

    IP地址的分类和私有地址范围
    A类地址:十进制 0.0.0.0~127.255.255.255
    二进制 0 1-7 8-31
    B类地址:128.0.0.0~191.255.255.255
    二进制 10 2-15 16-31
    C类地址:192.0.0.0~223.255.255.255
    二进制 110 2-23 24-31

    IANA-reserved private IPv4 network ranges Start End No. of addresses
    24-bit block (/8 prefix, 1 × A) 10.0.0.0 10.255.255.255 16777216
    20-bit block (/12 prefix, 16 × B) 172.16.0.0 172.31.255.255 1048576
    16-bit block (/16 prefix, 256 × C) 192.168.0.0 192.168.255.255 65536

    两台主机IP与子网掩码相与结果相同,则说明两台主机在同一个子网

    域名DNS组成和解析原理
    n级域名…二级域名.顶级域名
    国家级域名,国际级域名,通用级域名

    域名分:网络域名和主机域名
    域名结构是层级树状结构
    域名与IP地址无关,允许一台主机拥有多个不同的域名

    电子邮件收发工作原理
    SMTP连接和发送过程
    POP3收发邮件过程
    IMAP

    • 离线工作方式
    • 在线工作方式
    • 断连接方式

    WWW
    通过HTTP协议链接起来的无数web服务器中的网络资源
    HTTP TCP/IP应用层协议之一
    URL 标识被操作的资源

    1. 在客户端,建立连接,用户使用浏览器向Web服务器发送浏览信息请求
    2. Web服务器接收到请求,并向浏览器返回所请求的信息
    3. 关闭连接

    FTP
    文件传输服务软件
    允许Internet上的用户将一台计算机上文件传输到另一台上
    FTP匿名登录

    Telnet
    远程登陆服务协议
    允许用户在一台联网的计算机上登录到一个远程分时系统中,然后像使用自己的计算机一样使用该远程系统

    局域网技术

    两种分配方式比较
    广播信道分配策略
    - 静态分配方式
    频分多路复用和时分多路复用
    - 动态分配方式
    随机访问和控制访问
    控制访问:轮转和预约

    介质访问控制协议

    • 争用协议
    • 无冲突协议
    • 有限争用协议

    比较纯ALOHA和时分ALOHA系统
    争用协议
    吞吐量和网络负载的关系

    S=GP
    • 纯ALOHA
      任何用户有数据需要就可以发送,用户通过监听信道来获得是否产生冲突,数据冲突是否成功;若发现冲突导致数据传输失败,在等待一段随机时间后,再重新发送
      这里写图片描述
      概率推导使用泊松分布

    https://en.wikipedia.org/wiki/ALOHAnet#Pure_ALOHA

    帧发送成功概率:

    P=e2G

    系统吞吐量:
    S=Ge2G

    当G=0.5时,Smax=1/2e0.184
    - 时分ALOHA
    将时间分成等长的间隔,每个间隔可以用来发送一个帧;用户有数据帧要发送时,不论帧何时产生,都必须到下一个时隙开始时才能发送;用户通过监听信道来获知是否产生冲突,数据传输是否成功;若发现有冲突发生导致数据传输失败,则在随机等待若干个时隙后,再重新发送
    帧发送成功概率:
    P=eG

    系统吞吐量:
    S=GeG

    当G=1时,Smax=1/e0.368

    这里写图片描述

    CSMA载波监听多路访问
    与AKOHA协议主要不同是多一个载波监听装置

    • 1-坚持CSMA
      1-坚持指监听到信道忙继续监听信道;当监听到信道空闲时,其发送概率为1
    • 非坚持CSMA
      监听到信道忙就放弃监听
    • p-坚持CSMA
      当以节点发送数据时,首先监听信道,如果信道忙则坚持监听到下一个时隙;如果信道空闲,便以概率p发送数据,概率1-p推迟到下一个时隙;如果下一个时隙仍然空闲,便仍以概率p发送数据。以概率1-p推迟到下一个时隙;这样持续知道发送出去,或因其他节点发送检测到信道忙为止,若是后者,等待随机一段时间后重新开始监听

    带冲突检测的CSMA(CSMA with collision detection)
    当一个节点要发送数据时,首先监听信道;如果信道空闲时就发送数据,并继续监听;如果在数据发送过程中监听到冲突,则立刻停止数据发送,等待随机一段时间后,重新开始发送数据

    无冲突协议
    二进制倒计数协议
    有限争用协议

    局域网解决信道争用的两种控制方法
    二进制指数退避和1-坚持算法的CSMA/CD
    争用时隙长度确认为网络中最大传播时延的2倍

    SlotTime2S/0.7C+2tPHY

    Lmin=SlotTimeR(2S/0.7C+2tPHY)R

    MAC和LLC作用
    介质访问控制MAC(Medium Access Control)和逻辑链路控制LLC(Logical Link Control)
    MAC子层实现帧的寻址和识别
    LLC子层负责处理诸如差错控制,流量控制等问题,保证数据的可靠传输

    802标准系列
    这里写图片描述
    IEEE 802.3 MAC帧格式
    这里写图片描述
    前导码P:10101010
    SFD:帧起始定界符 10101011
    DA:2或6B。目的地址
    SA:2或6B。源地址
    LEN:2B。LLC帧长度字段,长度为0-1500B
    PAD:填充字符
    FCS:帧校验序列
    总长度为64-1518B

    环比特长度计算
    不计接口延迟,数据帧的传输时延等于信号在环路上的传播时延时,该数据帧的比特数就是比特度量的环路长度
    环比特长度 = 信号传播时延 * 数据传播速率 + 接口延迟位数
    = 环路介质长度 * 5(us/km) * 数据传播速率 + 接口延迟位数

    比较802.5和802.4及FDDI

    特性 FDDI 802.5
    介质类型 光纤 屏蔽双绞线
    数据速率 100Mbps 4Mbps
    可靠性规范 4B/5B编码 差分曼彻斯特编码
    编码效率 80% 50%
    时钟同步 分布式时钟 集中式时钟
    信道分配 定时令牌循环时间 接受完后产生新令牌
    环上帧数 可多个 最多一个

    FDDI帧格式
    这里写图片描述
    前导码P用以在收发双方实现时钟同步。发送站点以16个4bit空闲符号
    起始定界符由2个4bitMAC非数据符号组成
    帧控制字段FC格式为CLFFZZZZ,C表示同步帧还是异步帧,L表示地址2还是6B,FF表示LLC帧还是MAC控制帧,若为MAC帧最后4位ZZZZ表示控制帧状态
    数据字段
    帧检验序列FCS
    结束定界符ED 2个MAC控制符号
    帧状态字段FS用于返回地址识别,数据差错,数据复制
    4B/5B编码5bit编码中至少有2位”1”,保证传输光信号至少2次跳变
    高性能网络特点

    • 快速以太网
    • 千兆以太网
      介质访问:全双工和半双工
      载波扩展:半双工CSMA/CD
      数据包分组:允许站点每次发送多帧
    • 万兆以太网
      全双工
    • 交换型局域网

    无线局域网三种技术和标准
    技术:IEEE 802.11无线局域网技术,红外(Infrared rays,Ir)端口技术和蓝牙(Blue Tooth)

    IEEE 802.11标准集

    分割 802.11 802.11b 80211b+ 802.11a 802.11g
    频率 2.4GHz 2.4GHz 5GHz 2.4GHz 2.4GHz
    带宽 2/1Mbps 11/5.5/2/1Mbps 22/11/5.5/2/1Mbps 可达54Mbps 可达54Mbps
    距离 100m 100-300m 100-300m 5km-10km 5-10km
    业务 数据 数据 图像 数据 图像 语音 数据 图像 语音 数据 图像

    局域网操作提供的六大服务

    • 打印服务
    • 文件服务
    • 数据库服务
    • 通信服务
    • 信息服务
    • 分布式服务

    实用网络技术

    比较三种分组交换技术

    • x.25协议
      最早分组交换协议
    • 帧中继
      将数据链路层和网络层融合
    • ATM交换
      ATM不参与任何数据链路的功能,将差错控制与流量控制工作都交给终端
      这里写图片描述
      这里写图片描述
      这里写图片描述
      帧中继的六方面特点

    • FR支持OSI下两层服务并提供部分的网络层技术

    • FR采用光纤作为传输介质,传输误码率低
    • 将分组重发,流量控制,纠正错误,防止拥塞(正向拥塞通知,反向拥塞通知,丢失指示等)等处理过程有端系统去实现,简化了节点的处理过程,缩短了处理时间,降低了网络时延
    • 具有灵活可靠的组网方式,可采用永久虚电路(或交换虚电路)的方式,一条物理连接能够提供多个逻辑连接,用户所需进网端口数减少
    • FR具有按需分配带宽的特点,用户支付了一定的费用购买”承诺信息速率”,当突发性数据发生时,在网络允许的范围内,可以使用更高的速率
    • 使用FR,用户接入费用相应减少

    ATM交换的优点和特征
    ATM网络使用固定长度信元作为传输的基本单位,固定长度的信元头部都可以简化ATM交换机的处理;ATM网络允许混合多种高质量的传输介质(双绞线,同轴电缆和单模/多模光纤),并且支持不同的传输速率(25Mbps,45Mbps,155Mbps,625Mbps);同时,噶质量的传输介质使得ATM网络可以简化差错控制和流量控制的处理,从而,提高网络(或者ATM交换机)的吞吐率

    局域网和广域网的交换方式
    局域网:Fast Ip,Net Flow
    广域网:L3

    VLAN意义和三大交换技术三大划分方法
    意义:可以不受地理位置限制而像同一个局域网中那样进行数据通信。
    交换技术:

    • 端口交换
    • 帧交换
    • 信元交换

    划分方法:

    • 按交换端口号划分VLAN
    • 按MAC地址划分VLAN
    • 按第三层协议划分VLAN

    四大互通方式

    • 边界路由
    • “独臂”路由器
    • MPOA路由
    • 第三层交换

    VPN的定义和特点和VPN使用的四种安全技术
    定义:虚拟专用网
    特点:

    • 安全保障
    • 服务质量保障(QoS)
    • 可扩充性和灵活性
    • 可管理性

    安全技术:

    • 隧道技术
    • 加解密技术
    • 密钥管理技术
    • 使用者与设备身份认证技术

    网络管理5项基本功能

    • 故障管理
    • 计费管理
    • 配置管理
    • 性能管理
    • 安全管理

    网络安全性和完整性

    • 完整性(Interity)
      修改,伪造攻击目标
    • 可用性(Availability)
      中断的攻击目标
    • 保密性(Confidentiality and Privacy)
      截获攻击目标

    五种网络安全机制

    • 传统加密机制
      加密:将明文转换成密文
      对称加密
      非对称加密
      传统加密是对称单密钥加密
    • 公开密钥加密
      公钥私钥
    • 加密算法
      传统加密算法时分组密码
      DES 明文长度64bit,而密钥的长度为56bit
    • 认证
      保护数据不受主动攻击(伪造)
      证实内容没有改变,报文来源可信
      传统加密方式认证
      没有报文加密的报文认证
      使用密钥的报文认证码方式
      使用单向散列函数认证
    • 数字签名
      防止他人对传输文件进行破坏,以及如何确认发信人的身份还需要采用其他手段
      RSA签名
      DSS签名
      Hash签名 数字摘要法
      SHA MD5
    展开全文
  • 网络原理知识点汇总

    千次阅读 多人点赞 2019-12-03 16:28:14
    OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及各层协议 七层:物理层:为数据端... 网络层:IP选址及路由选择,IP,ICMP 传输层:建立,管理和维护端到端的连接,TCP,UDP 会话层:建立,管理和维护会...

    OSI七层模型 vs. TCP/IP 五层模型(有时候也说四层)及各层协议

    七层:物理层:为数据端设备提供传送数据的通路, IEEE802

             数据链路层:提供介质访问和链路管理, ARP,MTU

             网络层:IP选址及路由选择,IP,ICMP

             传输层:建立,管理和维护端到端的连接,TCP,UDP

             会话层:建立,管理和维护会话

             表示层:数据格式转化,数据加密

             应用层:为应用层序提供服务,FTP,SMTP,DNS,Telnet,HTTP

     

    给定一个网址,访问这个网址经过了那些过程?涉及哪些协议?

    (1) 浏览器通过域名判断使用哪种协议访问服务器

    (2) 浏览器向DNS请求解析域名对应的IP地址

    (浏览器缓存>本地host>本地DNS服务器>DNS服务器缓存>根DNS服务器或转发模式下的上一级DNS服务器)

    (3) 域名系统DNS解析出IP地址

    (4) 浏览器与该服务器建立TCP连接

    (5) 浏览器发出HTTP请求,请求百度首页

    (6) 服务器通过HTTP响应把首页文件发送给浏览器

    (7) 浏览器将首页文件进行解析,并将Web页显示给用户

    涉及协议:HTTP/HTTPS,DNS,UDP,TCP,IP,ARP(将本机默认网关 ip 地址映射成物理 MAC 地址,这样数据包便可以在以太网上传输)

    HTTP概述

    HTTP(hypertext transport protocol),即超文本传输协议。这个协议详细规定了浏览器和万维网服务器之间互相通信的规则。

    HTTP就是一个通信规则,通信规则规定了客户端发送给服务器的内容格式,也规定了服务器发送给客户端的内容格式。其实我们要学习的就是这个两个格式!客户端发送给服务器的格式叫“请求协议”;服务器发送给客户端的格式叫“响应协议”。   

    请求协议

    请求协议的格式如下:

    请求首行; 包括请求类型,要访问的资源以及所使用的HTTP版本.

    请求头信息;

    空行; \r\n      DOS/Windows:’\r\n’       UNIX/Linux:’\n’        Mac:’\r’

    请求体。

     

      浏览器发送给服务器的内容就这个格式的,如果不是这个格式服务器将无法解读!在HTTP协议中,请求有很多请求方法,其中最为常用的就是GET和POST。不同的请求方法之间的区别,后面会一点一点的介绍。

    GET请求

      打开IE,在访问hello项目的index.jsp之间打开HttpWatch,并点击“Record”按钮。然后访问index.jsp页面。查看请求内容如下:

    
    GET /hello/index.jsp HTTP/1.1
    Host: localhost
    User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0
    Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
    Accept-Language: zh-cn,zh;q=0.5
    Accept-Encoding: gzip, deflate
    Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7
    Connection: keep-alive
    Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98

     

    1. GET /hello/index.jsp HTTP/1.1:GET请求,请求服务器路径为/hello/index.jsp,协议为1.1
    2. Host:localhost:请求的主机名localhost
    3. User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0与浏览器和OS相关的信息。有些网站会显示用户的系统版本和浏览器版本信息,这都是通过获取User-Agent头信息而来的;
    4. Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8:告诉服务器,当前客户端可以接收的文档类型,其实这里包含了*/*,就表示什么都可以接收;
    5. Accept-Language: zh-cn,zh;q=0.5:当前客户端支持的语言,可以在浏览器的工具à选项中找到语言相关信息;
    6. Accept-Encoding: gzip, deflate:支持的压缩格式。数据在网络上传递时,可能服务器会把数据压缩后再发送;
    7. Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7:客户端支持的编码;
    8. Connection: keep-alive:客户端支持的链接方式,保持一段时间链接,默认为3000ms;(无状态的)
    9. Cookie: JSESSIONID=369766FDF6220F7803433C0B2DE36D98:因为不是第一次访问这个地址,所以会在请求中把上一次服务器响应中发送过来的Cookie在请求中一并发送去过

    POST请求

    为了演示POST请求,我们需要修改index.jsp页面,即添加一个表单:

    <form action="" method="post">

      关键字:<input type="text" name="keyword"/>

      <input type="submit" value="提交"/>

    </form>

     

    打开HttpWatch,输入hello后点击提交,查看请求内容如下:

    
    POST /hello/index.jsp HTTP/1.1
    
    Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*
    
    Referer: http://localhost:8080/hello/index.jsp
    
    Accept-Language: zh-cn,en-US;q=0.5
    
    User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)
    
    Content-Type: application/x-www-form-urlencoded
    
    Accept-Encoding: gzip, deflate
    
    Host: localhost:8080
    
    Content-Length: 13
    
    Connection: Keep-Alive
    
    Cache-Control: no-cache
    
    Cookie: JSESSIONID=E365D980343B9307023A1D271CC48E7D
    
    keyword=hello

    POST请求是可以有体的,而GET请求不能有请求体。

    1. Referer: http://localhost:8080/hello/index.jsp:请求来自哪个页面,例如你在百度上点击链接到了这里,那么Referer:http://www.baidu.com;如果你是在浏览器的地址栏中直接输入的地址,那么就没有Referer这个请求头了;
    2. Content-Type: application/x-www-form-urlencoded:表单的数据类型,说明会使用url格式编码数据;url编码的数据都是以“%”为前缀,后面跟随两位的16进制,例如“传智”这两个字使用UTF-8url编码用为“%E4%BC%A0%E6%99%BA”;
    3. Content-Length:13:请求体的长度,这里表示13个字节。
    4. keyword=hello:请求体内容hello是在表单中输入的数据,keyword是表单字段的名字。

     

    Referer请求头是比较有用的一个请求头,它可以用来做统计工作,也可以用来做防盗链。

    统计工作:我公司网站在百度上做了广告,但不知道在百度上做广告对我们网站的访问量是否有影响,那么可以对每个请求中的Referer进行分析,如果Referer为百度的很多,那么说明用户都是通过百度找到我们公司网站的。

    防盗链:我公司网站上有一个下载链接,而其他网站盗链了这个地址,例如在我网站上的index.html页面中有一个链接,点击即可下载JDK7.0,但有某个人的微博中盗链了这个资源,它也有一个链接指向我们网站的JDK7.0,也就是说登录它的微博,点击链接就可以从我网站上下载JDK7.0,这导致我们网站的广告没有看,但下载的却是我网站的资源。这时可以使用Referer进行防盗链,在资源被下载之前,我们对Referer进行判断,如果请求来自本网站,那么允许下载,如果非本网站,先跳转到本网站看广告,然后再允许下载。

     

    HTTP方法及相互区别

    GET 用于获取资源,而 POST 用于传输实体主体。

    GET 和 POST 的请求都能使用额外的参数,但是 GET 的参数是以查询字符串出现在 URL 中,而 POST 的参数存储在实体主体中。不能因为 POST 参数存储在实体主体中就认为它的安全性更高,因为照样可以通过一些抓包工具(Fiddler)查看

    因为 URL 只支持 ASCII 码,因此 GET 的参数中如果存在中文等字符就需要先进行编码。例如中文会转换为%E4%B8%AD%E6%96%87 ,而空格会转换为%20。POST参数支持标准字符集。

    GET请求在URL中传送的参数是有长度限制的,而POST么有

    HEAD获取报文首部,和 GET 方法类似,但是不返回报文实体主体部分

     

    其他请求方法

    GET(SELECT):从服务器取出资源(一项或多项)。

    POST(CREATE):在服务器新建一个资源。

    PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源,数据输入必须与由 GET 接收的数据表示保持一致)。

    PATCH(UPDATE):在服务器更新资源(客户端提供改变的属性)。

    DELETE(DELETE):从服务器删除资源。

    HEAD:获取资源的元数据。

    OPTIONS:

    1、获取服务器支持的HTTP请求方法

    2、用来检查服务器的性能

     

    响应内容

    响应协议的格式如下:

    响应首行;由HTTP协议版本号, 状态码, 状态消息 三部分组成。

    响应头信息;

    空行;

    响应体。

     

    响应内容是由服务器发送给浏览器的内容,浏览器会根据响应内容来显示。

    
    HTTP/1.1 200 OK
    
    Server: Apache-Coyote/1.1
    
    Content-Type: text/html;charset=UTF-8
    
    Content-Length: 724
    
    Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello
    
    Date: Wed, 25 Sep 2012 04:15:03 GMT
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    
      <head>
    
        <base href="http://localhost:8080/hello/">
    
       
    
        <title>My JSP 'index.jsp' starting page</title>
    
             <meta http-equiv="pragma" content="no-cache">
    
             <meta http-equiv="cache-control" content="no-cache">
    
             <meta http-equiv="expires" content="0">   
    
             <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    
             <meta http-equiv="description" content="This is my page">
    
             <!--
    
             <link rel="stylesheet" type="text/css" href="styles.css">
    
             -->
    
      </head>
    
     
    
      <body>
    
    <form action="" method="post">
    
      关键字:<input type="text" name="keyword"/>
    
      <input type="submit" value="提交"/>
    
    </form>
    
      </body>
    
    </html>
    1. HTTP/1.1 200 OK:响应协议为HTTP1.1,状态码为200,表示请求成功,OK是对状态码的解释;
    2. Server: Apache-Coyote/1.1:服务器的版本信息;
    3. Content-Type: text/html;charset=UTF-8:响应体使用的编码为UTF-8
    4. Content-Length: 724:响应体为724字节;
    5. Set-Cookie: JSESSIONID=C97E2B4C55553EAB46079A4F263435A4; Path=/hello:响应给客户端的Cookie
    6. Date: Wed, 25 Sep 2012 04:15:03 GMT:响应的时间,这可能会有8小时的时区差

    HTTP and HTTPS

    1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。

    2、http信息是明文传输,https则是通过TLS加密后传输。

    3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。

    HTTP缺点

    1. 明文传输,内容可能会被窃听
    2. 不验证通信方的身份,因此有可能遭遇伪装
    3. 无法证明报文的完整性,所以有可能已遭篡改

    HTTP+加密+认证+完整性保护=HTTPS

    用SSL将通信的报文主体内容进行加密,使用SSL建立http的安全通信线路,SSL处于http与TCP通信之间,这样的SSL与HTTP组合被称为HTTPS。

    HTTPS 采用对称加密和非对称加密两者并用的混合加密机制

    SSL/TLS

    SSL(Secure Socket Layer安全套接字层)TLS(Transport Layer Security)SSL发展到3.0版本后改成了TLS。

    TLS主要提供三个基本服务

    1. 加密
    2. 身份验证
    3. 消息完整性校验

    https://user-gold-cdn.xitu.io/2017/12/12/1604ac8ddcbc953d?imageslim

    通常,HTTP 直接和 TCP 通信。当使用 SSL 时,则演变成先和 SSL 通信,再由 SSL 和 TCP 通信了。用 SSL 建立安全通信线路之后,就可以在这条线路上进行 HTTP 通信了。

    SSL 是独立于 HTTP 的协议,所以不光是 HTTP 协议,其他运行在应用层的 SMTP 和 Telnet 等协议均可配合 SSL 协议使用。可以说 SSL 是当今世界上应用最为广泛的网络安全技术。

    虽然使用 HTTP 协议无法确定通信方,但如果使用 SSL 则可以。SSL 不仅提供加密处理,而且还使用了一种被称为证书的手段,可用于确定双方身份。

    证书由值得信任的第三方机构颁发,用以证明服务器和客户端是实际存在的。另外,伪造证书从技术角度来说是异常困难的一件事。所以只要能够确认通信方(服务器或客户端)持有的证书,即可判断通信方的真实意图。

     

    HTTP报文格式

    请求报文:请求行,消息头部,请求正文

    响应报文:状态行,响应头部,响应正文

     

    HTTP的无状态

    因为它的每个请求都是完全独立的,每个请求包含了处理这个请求所需的完整的数据,发送请求不涉及到状态变更。即使在HTTP/1.1上,同一个连接允许传输多个HTTP请求的情况下,如果第一个请求出错了,后面的请求一般也能够继续处理(当然,如果导致协议解析失败、消息分片错误之类的自然是要除外的)可以看出,这种协议的结构是要比有状态的协议更简单的,一般来说实现起来也更简单,不需要使用状态机

    对于有状态协议来说,如果将会话状态与连接绑定在一起,那么如果连接意外断开,整个会话就会丢失,重新连接之后一般需要从头开始

    而HTTP这样的无状态协议,使用元数据(如Cookies头)来维护会话,使得会话与连接本身独立起来,这样即使连接断开了,会话状态也不会受到严重伤害,保持会话也不需要保持连接本身。另外,无状态的优点还在于对中间件友好,中间件无需完全理解通信双方的交互过程,只需要能正确分片消息即可,而且中间件可以很方便地将消息在不同的连接上传输而不影响正确性,这就方便了负载均衡等组件的设计。

    具体无状态解决

    客户端和服务器在某次会话中产生的数据,从而【无状态】就意味着,这些数据不会被保留;协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。但是通过增加cookie和session机制,现在的网络请求其实是有状态的。在没有状态的http协议下,服务器也一定会保留你每次网络请求对数据的修改,但这跟保留每次访问的数据是不一样的,保留的只是会话产生的结果,而没有保留会话。

    与之相对的是TCP,TCP是有状态的,因为每一条消息的seq和ack(还有一堆滑动窗口,拥塞的控制参数,等)都和前面消息相关。

    HTTP并不会在内存里保留前次请求相关的任何状态,仅仅以协议逻辑(打包解包)存在,所以是它无状态的。

     

    无状态的设计会加强透明度(visibility),稳定度(reliability)和伸缩度(scalability)。提高透明度是因为系统无需通过请求内容以外的信息判断请求的完整内容;提高稳定度是指在部分失败的情况下,减轻了恢复的难度;提高伸缩度的原因是无需储存请求间的状态使服务器端可以很快释放资源并简化实现。

    优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用,缺点在于每次请求会传输大量重复的内容信息。

     

    HTTP状态码

    100 Continue :表明到目前为止都很正常,客户端可以继续发送请求或者忽略这个响应。

    200 OK

    204 No Content :请求已经成功处理,但是返回的响应报文不包含实体的主体部分。一般在只需要从客户端往服务器发送信息,而不需要返回数据时使用。

    206 Partial Content :表示客户端进行了范围请求,响应报文包含由 Content-Range 指定范围的实体内容。

    301 Moved Permanently :永久性重定向

    302 Found :临时性重定向

    303 See Other :和 302 有着相同的功能,但是 303 明确要求客户端应该采用 GET 方法获取资源。

    304 Not Modified :表示资源在由请求头中的If-Modified-Since或If-None-Match参数指定的这一版本之后,未曾被修改。在这种情况下,由于客户端仍然具有以前下载的副本,因此不需要重新传输资源。

    307 Temporary Redirect :临时重定向,与302相反,当重新发出原始请求时,不允许更改请求方法。

    400 Bad Request :请求报文中存在语法错误

    401 Unauthorized :该状态码表示发送的请求需要有认证信息。如果之前已进行过一次请求,则表示用户认证失败

    403 Forbidden :请求被拒绝

    404 Not Found :请求失败,请求所希望得到的资源未被在服务器上发现,但允许用户的后续请求。

    500 Internal Server Error :服务器正在执行请求时发生错误

    503 Service Unavailable :服务器暂时处于超负载或正在进行停机维护,现在无法处理请求。

    504 Gateway Timeout作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器

     

    HTML中指定响应头

    在HTMl页面中可以使用<meta http-equiv="" content="">来指定响应头,例如在index.html页面中给出<meta http-equiv="Refresh" content="3;url=http://www.itcast.cn">,表示浏览器只会显示index.html页面3秒,然后自动跳转到http://www.itcast.cn。

     

     

    HTTP 1.0 vs 1.1 vs 2.0

    HTTP1.0只保持短暂的连接,连接无法复用,浏览器每次请求都和服务器经过三次握手和慢启动。http1.0被抱怨最多的就是连接无法复用,和head of line blocking(请求队列的第一个请求因为服务器正忙(或请求格式问题等其他原因),导致后面的请求被阻塞)这两个问题。

    HTTP1.1 支持持久连接 一个TCP连接可以传送多个http请求和响应,减少了TCP建立连接和关闭连接的消耗。另外http1.1允许客户端不用等待上一次请求结果返回,就可以发出下一次请求,但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容。

    节约带宽 HTTP 1.1支持只发送header信息(不带任何body信息),如果服务器认为客户端有权限请求服务器,则返回100,否则返回401。客户端如果接受到100,才开始把请求body发送到服务器.这样当服务器返回401的时候,客户端就可以不用发送请求body了,节约了带宽。另外HTTP还支持传送内容的一部分。这样当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。这是支持文件断点续传的基础。

    HOST域 web server上的多个虚拟站点可以共享同一个ip和端口。HTTP1.0是没有host域的,HTTP1.1才支持这个参数。

    HTTP2.0 多路复用 HTTP2.0使用了多路复用的技术,做到同一个连接并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。

    数据压缩 HTTP1.1不支持header数据的压缩,HTTP2.0使用HPACK算法对header的数据进行压缩,这样数据体积小了,在网络上传输就会更快。

    服务器推送 当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。

    服务器推送还有一个很大的优势:可以缓存!也让在遵循同源的情况下,不同页面之间可以共享缓存资源成为可能。

     

    HTTP安全性

    使用明文进行通信,内容可能会被窃听;

    不验证通信方的身份,通信方的身份有可能遭遇伪装;

    无法证明报文的完整性,报文有可能遭篡改。

     

    TCP 及 UDP

    传输控制协议 TCP(Transmission Control Protocol)是面向连接的,提供可靠交付,有流量控制,拥塞控制,提供全双工通信,面向字节流(把应用层传下来的报文看成字节流,把字节流组织成大小不等的数据块),每一条 TCP 连接只能是点对点的(一对一)。

    用户数据报协议 UDP(User Datagram Protocol)是无连接的,尽最大可能交付,没有拥塞控制,面向报文(对于应用程序传下来的报文不合并也不拆分,只是添加 UDP 首部),支持一对一、一对多、多对一和多对多的交互通信。

     

    TCP如何保证可靠传输?

    1、确认和重传:接收方收到报文就会确认,发送方发送一段时间后没有收到确认就重传。

    2、数据校验

    3、数据合理分片和排序

    4、流量控制:当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。

    5、拥塞控制:当网络拥塞时,减少数据的发送。

     

    TCP的三次握手和四次挥手及其原因

    第三次握手是为了防止失效的连接请求到达服务器,让服务器错误打开连接。客户端发送的连接请求如果在网络中滞留,那么就会隔很长一段时间才能收到服务器端发回的连接确认。客户端等待一个超时重传时间之后,就会重新请求连接。但是这个滞留的连接请求最后还是会到达服务器,如果不进行三次握手,那么服务器就会打开两个连接。如果有第三次握手,客户端会忽略服务器之后发送的对滞留连接请求的连接确认,不进行第三次握手,因此就不会再次打开连接

    客户端发送了 FIN 连接释放报文之后,服务器收到了这个报文,就进入了 CLOSE-WAIT 状态。这个状态是为了让服务器端发送还未传送完毕的数据,传送完毕之后,服务器会发送 FIN 连接释放报文。

    客户端接收到服务器端的 FIN 报文后进入TIME_WAIT状态,此时并不是直接进入 CLOSED 状态,还需要等待一个时间计时器设置的时间 2MSL。这么做有两个理由:

    确保最后一个确认报文能够到达。如果 B 没收到 A 发送来的确认报文,那么就会重新发送连接释放请求报文,如果没有TIME_WAIT,那么B重传就无法到达A,连接可能无法断开。

    等待一段时间是为了让本连接持续时间内所产生的所有报文都从网络中消失,使得下一个新的连接不会出现旧的连接请求报文。

     

    TCP的流量控制与滑动窗口

    流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。

    TCP滑动窗口是缓存的一部分,用来暂时存放字节流。发送方和接收方各有一个窗口,接收方通过 TCP 报文段中的窗口字段告诉发送方自己的窗口大小,发送方根据这个值和其它信息设置自己的窗口大小。接收窗口只会对窗口内最后一个按序到达的字节进行确认,例如接收窗口已经收到的字节为 {31, 34, 35},其中 {31}按序到达,而 {34, 35} 就不是,因此只对字节 31 进行确认。发送方得到一个字节的确认之后,就知道这个字节之前的所有字节都已经被接收

    TCP使用累计确认(发送方一次发送多个连续包,接收方只需要确认最后一个包),快速重传(收到3个冗余的ACK包立马重传,不用等待超时)以及选择重传(只对丢失的包进行重传)提高效率

     

    TCP的拥塞控制与拥塞窗口

    拥塞控制:防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的都有一个前提:网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络传输性能有关的所有因素。

    发送方维持一个拥塞窗口 cwnd的状态变量。拥塞窗口的大小取决于网络的拥塞程度,并且动态地在变化。发送方让自己的发送窗口等于拥塞。发送方控制拥塞窗口的原则是:只要网络没有出现拥塞,拥塞窗口就再增大一些,以便把更多的分组发送出去。但只要网络出现拥塞,拥塞窗口就减小一些,以减少注入到网络中的分组数。

    几种拥塞控制方法:慢开始拥塞避免快重传快恢复

    慢开始算法:当主机开始发送数据时,如果立即将大量数据字节注入到网络,那么就有可能引起网络拥塞,因为现在并不清楚网络的负荷情况。因此,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是说,由小到大逐渐增大拥塞窗口数值。通常在刚刚开始发送报文段时,先把拥塞窗口 cwnd 设置为一个最大报文段MSS的数值。而在每收到一个对新的报文段的确认后,把拥塞窗口增加至多一个MSS的数值。用这样的方法逐步增大发送方的拥塞窗口 cwnd ,可以使分组注入到网络的速率更加合理。

    慢开始门限ssthresh的用法如下:

        当 cwnd < ssthresh 时,使用上述的慢开始算法

        当 cwnd > ssthresh 时,停止使用慢开始算法而改用拥塞避免算法。

        当 cwnd = ssthresh 时,既可使用慢开始算法,也可使用拥塞控制避免算法。

    拥塞避免算法:让拥塞窗口cwnd缓慢地增大,即每经过一个往返时间RTT就把发送方的拥塞窗口cwnd加1,而不是加倍。这样拥塞窗口cwnd按线性规律缓慢增长,比慢开始算法的拥塞窗口增长速率缓慢得多。

    无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(其根据就是没有收到确认),就要把慢开始门限ssthresh设置为出现拥塞时的发送方窗口值的一半(但不能小于2)。然后把拥塞窗口cwnd重新设置为1,执行慢开始算法。这样做的目的就是要迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。

    快速恢复算法:发送方认为网络很可能没有发生拥塞,因此与慢开始不同之处是现在不执行慢开始算法(即拥塞窗口cwnd现在不设置为1),而是把cwnd值设置为慢开始门限ssthresh减半后的数值,然后开始执行拥塞避免算法(“加法增大”),使拥塞窗口缓慢地线性增大。

     

    TCP的拆包粘包

    TCP粘包或拆包有原因:

    1、要发送的数据大于TCP发送缓冲区剩余空间大小,将会发生拆包。

    2、待发送数据大于MSS(最大报文长度),TCP在传输前将进行拆包。

    3、要发送的数据小于TCP发送缓冲区的大小,TCP将多次写入缓冲区的数据一次发送出去,将会发生粘包。

    4、接收数据端的应用层没有及时读取接收缓冲区中的数据,将发生粘包。

    解决办法:

    1、发送端给每个数据包添加包首部,首部中应该至少包含数据包的长度,这样接收端在接收到数据后,通过读取包首部的长度字段,便知道每一个数据包的实际长度了。

    2、发送端将每个数据包封装为固定长度(不够的可以通过补0填充),这样接收端每次从接收缓冲区中读取固定长度的数据就自然而然的把每个数据包拆分开来。

    3、可以在数据包之间设置边界,如添加特殊符号,这样,接收端通过这个边界就可以将不同的数据包拆分开。

     

    Socket编程

    对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。

    阻塞式 I/O(BIO)

    应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率会比较高。

    非阻塞式 I/O(NIO)

    应用进程执行系统调用之后,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。应用进程可以继续执行,但是需要不断的执行系统调用来获知I/O 是否完成,这种方式称为轮询(polling),并且当内核数据准备好后,拷贝数据到用户内存会是阻塞的。由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率比较低。

    IO复用

    也叫做事件驱动IO,select/epoll(实现IO复用的两个函数)的好处就在于单个process就可以同时处理多个网络连接的IO。它的基本原理就是select/epoll 函数会不断的轮询所负责的所有socket,当某个socket有数据到达了,就通知用户进程。

    异步 I/O(AIO)

    应用进程执行 aio_read 系统调用会立即返回,应用进程可以继续执行,不会被阻塞,内核会在所有操作完成之后向应用进程发送信号,没有任何阻塞过程。

    异步 I/O 与I/O 复用的区别在于,异步I/O不阻塞进程,而I/O复用会阻塞在调用函数阶段。异步 I/O 的信号是通知应用进程 I/O 完成,而I/O 复用是通知应用进程可以开始 I/O。

    并且I/O复用也是要轮询查看数据是否就绪,而异步I/O则不需要。

    AIO与NIO的区别在于:NIO虽然进程大部分时间都不会被block,但是它仍然要求进程去主动的check,并且当数据准备完成以后,也需要进程主动的再次调用recvfrom来将数据拷贝到用户内存。而AIO则完全不同。它就像是用户进程将整个IO操作交给了kernel完成,然后完成之后发信号通知。在此期间,用户进程不需要去检查IO操作的状态,也不需要主动的去拷贝数据。

     

    IO多路复用:select poll epoll

    select,poll,epoll都是IO多路复用的机制。I/O多路复用就是通过一种机制,一个进程可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作。

    Select将socket添加到select监视中,然后在while内一直调用select获取被激活的socket,一旦socket可读,便调用read函数将socket中的数据读取出来。虽然上述方式允许单线程内处理多个IO请求,但是每个IO请求的过程还是阻塞的(在select函数上阻塞),平均时间甚至比同步阻塞IO模型还要长。如果用户线程只注册自己感兴趣的socket或者IO请求,然后去做自己的事情,等到数据到来时再进行处理,则可以提高CPU的利用率。IO多路复用模型使用了Reactor设计模式实现了这一机制。

    select目前几乎在所有的平台上支持,其良好跨平台支持也是它的一个优点。select的一个缺点在于单个进程能够监视的文件描述符的数量存在最大限制,在Linux上一般为1024,可以通过修改宏定义甚至重新编译内核的方式提升这一限制,但是这样也会造成效率的降低。

    pollfd结构包含了要监视的event和发生的event,不再使用select“参数-值”传递的方式。同时,pollfd并没有最大数量限制(但是数量过大后性能也是会下降)。 和select函数一样,poll返回后,需要轮询pollfd来获取就绪的描述符。

    从上面看,select和poll都需要在返回后,通过遍历文件描述符来获取已经就绪的socket。事实上,同时连接的大量客户端在一时刻可能只有很少的处于就绪状态,因此随着监视的描述符数量的增长,其效率也会线性下降。

    epoll是在2.6内核中提出的,是之前的select和poll的增强版本。相对于select和poll来说,epoll更加灵活,没有描述符限制。epoll使用一个文件描述符管理多个描述符,将用户关系的文件描述符的事件存放到内核的一个事件表中,这样在用户空间和内核空间的copy只需一次。

    epoll对文件描述符的操作有两种模式:LT(level trigger)和ET(edge trigger)。LT模式是默认模式,LT模式与ET模式的区别如下:

    LT模式:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序可以不立即处理该事件。下次调用epoll_wait时,会再次响应应用程序并通知此事件。

    ET模式:当epoll_wait检测到描述符事件发生并将此事件通知应用程序,应用程序必须立即处理该事件。如果不处理,下次调用epoll_wait时,不会再次响应应用程序并通知此事件。

    在 select/poll中,进程只有在调用一定的方法后,内核才对所有监视的文件描述符进行扫描,而epoll事先通过epoll_ctl()来注册一个文件描述符,一旦基于某个文件描述符就绪时,内核会采用类似callback的回调机制,迅速激活这个文件描述符,当进程调用epoll_wait() 时便得到通知(此处去掉了遍历文件描述符,而是通过监听回调的机制。这正是epoll的魅力所在)

    epoll的优点主要是一下几个方面:

    1. 监视的描述符数量不受限制,它所支持的FD上限是最大可以打开文件的数目,这个数字一般远大于2048,举个例子,在1GB内存的机器上大约是10万左右,具体数目可以cat /proc/sys/fs/file-max察看,一般来说这个数目和系统内存关系很大。select的最大缺点就是进程打开的fd是有数量限制的。这对于连接数量比较大的服务器来说根本不能满足。虽然也可以选择多进程的解决方案( Apache就是这样实现的),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。
    2. IO的效率不会随着监视fd的数量的增长而下降。epoll不同于select和poll轮询的方式,而是通过每个fd定义的回调函数来实现的。只有就绪的fd才会执行回调函数。

    缓存

     

    强缓存与协商缓存

    浏览器HTTP缓存可以分为强缓存和协商缓存。强缓存和协商缓存最大也是最根本的区别是:强缓存命中的话不会发请求到服务器(比如chrome中的200 from memory cache),协商缓存一定会发请求到服务器,通过资源的请求首部字段验证资源是否命中协商缓存,如果协商缓存命中,服务器会将这个请求返回,但是不会返回这个资源的实体,而是通知客户端可以从缓存中加载这个资源(304 not modified)。

    控制强缓存的字段按优先级介绍

    1. Pragma        Pragma是HTTP/1.1之前版本遗留的通用首部字段,仅作为于HTTP/1.0的向后兼容而使用。虽然它是一个通用首部,但是它在响应报文中时的行为没有规范,依赖于浏览器的实现。RFC中该字段只有no-cache一个可选值,会通知浏览器不直接使用缓存,要求向服务器发请求校验新鲜度。因为它优先级最高,当存在时一定不会命中强缓存。
    2. Cache-Control        Cache-Control是一个通用首部字段,也是HTTP/1.1控制浏览器缓存的主流字段。和浏览器缓存相关的是如下几个响应指令:

    指令

    参数

    说明

    private

    表明响应只能被单个用户缓存,不能作为共享缓存(即代理服务器不能缓存它)

    public

    可省略

    表明响应可以被任何对象(包括:发送请求的客户端,代理服务器,等等)缓存

    no-cache

    可省略

    缓存前必需确认其有效性

    no-store

    不缓存请求或响应的任何内容

    max-age=[s]

    必需

    响应的最大值

    • max-age(单位为s)设置缓存的存在时间,相对于发送请求的时间。只有响应报文首部设置Cache-Control为非0的max-age或者设置了大于请求日期的Expires(下文会讲)才有可能命中强缓存。当满足这个条件,同时响应报文首部中Cache-Control不存在no-cache、no-store且请求报文首部不存在Pragma字段,才会真正命中强缓存。
    • no-cache  表示请求必须先与服务器确认缓存的有效性,如果有效才能使用缓存(协商缓存),无论是响应报文首部还是请求报文首部出现这个字段均一定不会命中强缓存。Chrome硬性重新加载(Command+shift+R)会在请求的首部加上Pragma:no-cache和Cache-Control:no-cache。
    • no-store  表示禁止浏览器以及所有中间缓存存储任何版本的返回响应,一定不会出现强缓存和协商缓存,适合个人隐私数据或者经济类数据。
    • public 表明响应可以被浏览器、CDN等等缓存。
    • private 响应只作为私有的缓存,不能被CDN等缓存。如果要求HTTP认证,响应会自动设置为private。
    • Expires        Expires是一个响应首部字段,它指定了一个日期/时间,在这个时间/日期之前,HTTP缓存被认为是有效的。无效的日期比如0,表示这个资源已经过期了。如果同时设置了Cache-Control响应首部字段的max-age,则Expires会被忽略。它也是HTTP/1.1之前版本遗留的通用首部字段,仅作为于HTTP/1.0的向后兼容而使用。

     

    幂等性

    (并非是HTTP的问题,而是服务器API设计问题)

    幂等性是http层面的问题吗,还是服务器要处理和解决的内容?

     

    对HTTP协议的使用实际上存在着两种不同的方式:一种是RESTful的,它把HTTP当成应用层协议,比较忠实地遵守了HTTP协议的各种规定;另一种是SOA的,它并没有完全把HTTP当成应用层协议,而是把HTTP协议作为了传输层协议,然后在HTTP之上建立了自己的应用层协议。这里所讨论的HTTP幂等性主要针对RESTful风格的,但幂等性并不属于特定的协议,它是分布式系统的一种特性;所以,不论是SOA还是RESTful的Web API设计都应该考虑幂等性。下面将介绍HTTP GET、DELETE、PUT、POST四种主要方法的语义和幂等性。

     

    HTTP GET方法用于获取资源,不应有副作用,所以是幂等的

    比如:GET http://www.bank.com/account/123456,不会改变资源的状态,不论调用一次还是N次都没有副作用。请注意,这里强调的是一次和N次具有相同的副作用,而不是每次GET的结果相同。GET http://www.news.com/latest-news这个HTTP请求可能会每次得到不同的结果,但它本身并没有产生任何副作用,因而是满足幂等性的。

     

    HTTP DELETE方法用于删除资源,有副作用,但它应该满足幂等性。

    比如:DELETE http://www.forum.com/article/4231,调用一次和N次对系统产生的副作用是相同的,即删掉id为4231的帖子;因此,调用者可以多次调用或刷新页面而不必担心引起错误。

     

    比较容易混淆的是HTTP POST和PUT。POST和PUT的区别容易被简单地误认为“POST表示创建资源,PUT表示更新资源”;而实际上,二者均可用于创建资源,更为本质的差别是在幂等性方面。在HTTP规范中对POST和PUT是这样定义的:POST所对应的URI并非创建的资源本身,而是资源的接收者。比如:POST http://www.forum.com/articles的语义是在http://www.forum.com/articles下创建一篇帖子,HTTP响应中应包含帖子的创建状态以及帖子的URI。两次相同的POST请求会在服务器端创建两份资源,它们具有不同的URI;所以,POST方法不具备幂等性。而PUT所对应的URI是要创建或更新的资源本身。比如:PUT http://www.forum/articles/4231的语义是创建或更新ID为4231的帖子。对同一URI进行多次PUT的副作用和一次PUT是相同的;因此,PUT方法具有幂等性

     

    长轮询与短轮询

    短轮询相信大家都不难理解,比如你现在要做一个电商中商品详情的页面,这个详情界面中有一个字段是库存量(相信这个大家都不陌生,随便打开淘宝或者京东都能找到这种页面)。而这个库存量需要实时的变化,保持和服务器里实际的库存一致。

     

    这个时候,你会怎么做?

     

    最简单的一种方式,就是你用JS写个死循环,不停的去请求服务器中的库存量是多少,然后刷新到这个页面当中,这其实就是所谓的短轮询

     

    这种方式有明显的坏处,那就是你很浪费服务器和客户端的资源。客户端还好点,现在PC机配置高了,你不停的请求还不至于把用户的电脑整死,但是服务器就很蛋疼了。如果有1000个人停留在某个商品详情页面,那就是说会有1000个客户端不停的去请求服务器获取库存量,这显然是不合理的。

     

    那怎么办呢?

     

    长轮询这个时候就出现了,其实长轮询和短轮询最大的区别是,短轮询去服务端查询的时候,不管库存量有没有变化,服务器就立即返回结果了。而长轮询则不是,在长轮询中,服务器如果检测到库存量没有变化的话,将会把当前请求挂起一段时间(这个时间也叫作超时时间,一般是几十秒,Object.wait)。在这个时间里,服务器会去检测库存量有没有变化,检测到变化就立即返回(Object.notify),否则就一直等到超时为止。

     

    对于客户端来说,不管是长轮询还是短轮询,客户端的动作都是一样的,就是不停的去请求,不同的是服务端,短轮询情况下服务端每次请求不管有没有变化都会立即返回结果,而长轮询情况下,如果有变化才会立即返回结果,而没有变化的话,则不会再立即给客户端返回结果,直到超时为止。

    这样一来,客户端的请求次数将会大量减少(这也就意味着节省了网络流量,毕竟每次发请求,都会占用客户端的上传流量和服务端的下载流量),而且也解决了服务端一直疲于接受请求的窘境。

     

    但是长轮询也是有坏处的,因为把请求挂起同样会导致资源的浪费,假设还是1000个人停留在某个商品详情页面,那就很有可能服务器这边挂着1000个线程,在不停检测库存量,这依然是有问题的。

     

    因此,从这里可以看出,不管是长轮询还是短轮询,都不太适用于客户端数量太多的情况,因为每个服务器所能承载的TCP连接数是有上限的,这种轮询很容易把连接数顶满。

    长连接与短连接

    HTTP的短连接和长连接;长连接与短连接的区别(LVS是通过长连接作负载均衡)

    HTTP的长连接和短连接本质上是TCP长连接和短连接。

    在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。

     

    但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:Connection:keep-alive。

    在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。

     

    长连接可以省去较多的TCP建立和关闭的操作,减少浪费,节约时间。对于频繁请求资源的客户来说,较适用长连接。不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。在长连接的应用场景下,client端一般不会主动关闭它们之间的连接,Client与server之间的连接如果一直不关闭的话,会存在一个问题,随着客户端连接越来越多,server早晚有扛不住的时候,这时候server端需要采取一些策略,如关闭一些长时间没有读写事件发生的连接,这样可以避免一些恶意连接导致server端服务受损。

     

    短连接对于服务器来说管理较为简单,存在的连接都是有用的连接,不需要额外的控制手段。但如果客户请求频繁,将在TCP的建立和关闭操作上浪费时间和带宽。

     

    URL

    url有最大长度限制,就问长度有限制是get的原因还是url的原因,为什么长度会有限制,是http数据包的头的字段原因还是内容字段的原因

    是GET的原因,长度受到服务器和客户端的限制。

    URL编解码

    Url的编码格式采用的是ASCII码,而不是Unicode,这也就是说你不能在Url中包含任何非ASCII字符,例如中文。

    Url中只允许包含英文字母(a-zA-Z)、数字(0-9)、-_.~4个特殊字符以及所有保留字符;

    RFC3986中指定了以下字符为保留字符:! * ' ( ) ; : @ & = + $ , / ? # [ ]

     

    Url编码通常也被称为百分号编码(Url Encoding,also known as percent-encoding),是因为它的编码方式非常简单,使用%百分号加上两位的十六进制字符。

    URI&URL

    URL(Uniform ResourceLocator)统一资源定位符,是专门为标识网络上的资源位置而设计的一种编址方式。URL一般由3个部分组成:

    应用层协议

    主机IP地址或域名

    资源所在路径/文件名

     

    统一资源标识符(Uniform Resource Identifier,或URI)是一个用于标识某一互联网资源名称的字符串。

    URI :Uniform Resource Identifier,统一资源标识符;

    URL:Uniform Resource Locator,统一资源定位符;

    URN:Uniform ResourceName,统一资源名称。

    其中,URL,URN是URI的子集。

    URL是一种具体的URI,它不仅唯一标识资源,而且还提供了定位该资源的信息。URI是一种语义上的抽象概念,可以是绝对的,也可以是相对的,而URL则必须提供足够的信息来定位。

     

    服务器保证公钥正确性——数字证书

    公钥是由数字证书认证机构(CA,Certificate Authority)和其相关机关颁发的公开密钥证书。

    数字证书认证机构处于客户端与服务器双方都可信赖的第三方机构的立场上。服务器会将这份由数字证书认证机构颁发的公钥证书发送给客户端,以进行公开密钥加密方式通信。公钥证书也可叫做数字证书或直接称为证书。

    接到证书的客户端可使用数字证书认证机构的公开密钥,对那张证书上的数字签名进行验证,一旦验证通过,客户端便可明确两件事:

    认证服务器的公开密钥的是真实有效的数字证书认证机构

    服务器的公开密钥是值得信赖的

    此处认证机关的公开密钥必须安全地转交给客户端。使用通信方式时,如何安全转交是一件很困难的事,因此,多数浏览器开发商发布版本时,会事先在内部植入常用认证机关的公开密钥。

    https://user-gold-cdn.xitu.io/2017/10/31/8584b7b52d7fbb33e6c8ed8541b161bc?imageslim

    过程

    ·  客户端发起HTTPS请求 这个没什么好说的,就是用户在浏览器里输入一个HTTPS网址,然后连接到服务端的443端口。

    ·  服务端的配置 采用HTTPS协议的服务器必须要有一套数字证书,可以自己制作,也可以向组织申请。区别就是自己颁发的证书需要客户端验证通过,才可以继续访问,而使用受信任的公司申请的证书则不会弹出提示页面。这套证书其实就是一对公钥和私钥。

    ·  传送证书 这个证书其实就是公钥,只是包含了很多信息,如证书的颁发机构,过期时间等等。

    ·  客户端解析证书 这部分工作是由客户端的SSL/TLS来完成的,首先会验证公钥是否有效,比如颁发机构,过期时间等等,如果发现异常,则会弹出一个警示框,提示证书存在的问题。如果证书没有问题,那么就生成一个随机值。然后用证书(也就是公钥)对这个随机值进行加密

    ·  传送加密信息 这部分传送的是用证书加密后的随机值,目的是让服务端得到这个随机值,以后客户端和服务端的通信就可以通过这个随机值来进行加密解密了。

    ·  服务端解密信息 服务端用私钥解密后,得到了客户端传过来的随机值,然后把内容通过该随机值(密钥)进行对称加密,将信息和私钥通过某种算法混合在一起,这样除非知道私钥,不然无法获取内容,而正好客户端和服务端都知道这个私钥,所以只要加密算法够复杂,私钥够复杂,数据就够安全。

    ·  传输加密后的信息 这部分信息就是服务端用私钥加密后的信息,可以在客户端用随机值解密还原

    ·  客户端解密信息 客户端用之前生产的私钥解密服务端传过来的信息,于是获取了解密后的内容。整个过程第三方即使监听到了数据,也束手无策。

    https://user-gold-cdn.xitu.io/2017/12/12/1604ac8e3ff148f8?imageslim

    客户端获得服务器的公钥的过程是基于非对称加密实现的(数字证书)

    而之后客户端和服务器之间的数据交换是基于对称加密实现的。

    更具体的过程

    ·  客户端通过发送 Client Hello 报文开始 SSL 通信。报文中包含客户端支持的 SSL 的指定版本、加密组件(Cipher Suite)列表(所使用的加密算法及密钥长度等)

    ·  服务器可进行 SSL 通信时,会以 Server Hello 报文作为应答。和客户端一样,在报文中包含 SSL 版本以及加密组件。服务器的加密组件内容是从接收 到的客户端加密组件内筛选出来的。

    ·  之后服务器发送 Certificate 报文。报文中包含公开密钥证书。

    ·  最后服务器发送 Server Hello Done 报文通知客户端,最初阶段的 SSL 握手协商部分结束。

    ·  SSL 第一次握手结束之后,客户端以 Client Key Exchange 报文作为回应。报文中包含通信加密中使用的一种被称为 Pre-master secret 的随机密码串。该 报文已用步骤 3 中的公开密钥进行加密。

    ·  接着客户端继续发送 Change Cipher Spec 报文。该报文会提示服务器,在此报文之后的通信会采用 Pre-master secret 密钥加密。

    ·  客户端发送 Finished 报文。该报文包含连接至今全部报文的整体校验值。这次握手协商是否能够成功,要以服务器是否能够正确解密该报文作为判定标准。

    ·  服务器同样发送 Change Cipher Spec 报文。

    ·  服务器同样发送 Finished 报文。

    ·  服务器和客户端的 Finished 报文交换完毕之后,SSL 连接就算建立完成。当然,通信会受到 SSL 的保护。从此处开始进行应用层协议的通信,即发 送 HTTP 请求。

    ·  应用层协议通信,即发送 HTTP 响应。

    ·  最后由客户端断开连接。断开连接时,发送 close_notify 报文。

     

    SOA

    Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术。是通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册

    SOA是一种架构风格,包括两个方面的内容:

    1)抽象出服务,这些服务满足离散、松耦合、可复用、自治、无状态等特征;

    2)服务可以灵活地组装和编排,满足流程整合和业务变化的需要

     

    WebService是SOA的一种实现技术,跨语言,跨平台,提供了标准的服务定义、服务注册、服务接入和访问的方式。使用了XML、SOAP、WSDL、UDDI等技术。

    SOA三角操作模型

    1)三种角色

    服务提供者:发布自己的服务,并且对服务请求进行响应

    服务请求者:利用服务注册中心查找所需要的服务,然后使用该服务

    服务注册中心:注册已经发布的服务,对其进行分类,并提供搜索服务

    2)三个操作:

    发布:为了使服务可访问,需要发布服务描述以使服务使用者可以发现它

    查找:服务请求者查询服务注册中心来找到满足其要求的服务

    绑定:检索到服务描述后,服务请求者继续根据服务描述中的信息调用服务

    XML

    XML:(Extensible Markup Language)扩展型可标记语言。面向短期的临时数据处理、面向万维网络,是Soap的基础。

     

    SOAP

    SOAP:(Simple Object Access Protocol)简单对象传输协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

     

    SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议;RPC作为一致性的调用途径,XML作为数据传送的格式,允许服务提供者和服务客户经过防火墙在INTERNET进行通讯交互。

     

    简单对象传输协议,是轻量级的、简单的、基于XML的用于交换数据的协议。

    SOAP本质上是一个 XML文档,包含以下元素:

    1)Envelope元素:必需元素,根元素,标识此XML文档为一条SOAP消息

    可以包含命名空间和声明额外的属性

    2)Header元素:可选元素,有关SOAP消息的应用程序专用消息

    3)Body元素:必需元素,包含所有的请求和响应信息

    4)Fault元素:可选元素,提供有关在处理此消息所发生错误的信息

     

    SOAP处理模型:

    1)用XML打包请求

    2)将请求发送给服务器

    3)服务器接收到请求,解码XML,处理请求,以XML格式返回响应

     

    SOAP并不假定传输数据的下层协议,因此必须设计为能在各种协议上运行。即使绝大多数SOAP是运行在HTTP上,使用URI标识服务,SOAP也仅仅使用POST方法发送请求,用一个唯一的URI标识服务的入口。

     

    使用 HTTP 协议的 SOAP,由于其设计原则上并不像 REST 那样强调与 Web 的工作方式相一致,所以,基于 SOAP 应用很难充分发挥 HTTP 本身的缓存能力。

    HTTP是其通信协议/传输协议,SOAP是其应用协议

     

     

    WSDL

    WSDL:(Web Services Description Language) WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。

    网络服务描述语言,是基于XML的,用于描述网络服务、服务定位和服务提供的操作的协议。

     

    UDDI

    UDDI (Universal Description, Discovery, and Integration) 是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

     

    统一描述、发现、集成协议,提供基于网络服务的注册和发现机制

    展开全文
  • 计算机网络原理简介

    千次阅读 多人点赞 2018-03-07 10:10:19
    把电脑连接起来的物理手段,主要规定了网络的一些电气特性,作用是负责传送0和1的电信号.而机械特性,及时如何去与硬件相连了,比如说插座的尺寸 数据链路层 物理层传过来了0和1,但是单纯的0和1没有啥意义,所以就要...

    物理层

    电脑要联网,需要做什么,电脑需要电, 然后电脑与电脑之间相连,需要网,可以用光纤,双绞线,同轴电缆,无线波等

    把电脑连接起来的物理手段,主要规定了网络的一些电气特性,作用是负责传送0和1的电信号.而机械特性,及时如何去与硬件相连了,比如说插座的尺寸

    数据链路层

    物理层传过来了0和1,但是单纯的0和1没有啥意义,所以就要规定解读方式,就像情报一样,怎么来解读. 这里我们了解到一组电信号构成一个数据块,这个数据块有了一个称呼:帧.每个帧两个部分,头和数据(head and data)

    帧是有底线(长度)的,所以如果数据量特别大,就需要分割成多个帧来发送.如果在传输过程中,有出错的数据,那么就需要重新发送了,所以帧必须得这么做.能够识别出物理层发过来的比特流,还得能识别出起始和终止.

    我们都知道,网络有时候很不稳定的,那你得怎么来区分,那个算是一帧呢.这里就有了这么几种方法来能够提高正确识别率.

     1.使用字符填充的是首尾定界符 2.使用比特填充的首尾标志法 3.违法编码法 4.字节计数法.

    生活中, 常见的这么一种情况 : 我在今目标给你传送一份文件,怎么确保我给你的文件中,有没有遭到损坏. 我是发出了,  具体是你来收,那么你就得有这么一个能力,能够发现给你的文件中,有没有差错.如果有,你给我说一下啊,收到的不对啊,你再给我重新发一份.也可能因为网络的问题,你的网掉线了,这样你就不能给我回复收到情况了. 那么我这里就启用一个定时器,到点了,你还没回复,那我就认为你收到的有问题, 再次重新发送.那么这个就是差错控制功能了.也是数据链路层主要功能之一.

    差错控制其实是有两种的,一种就是上面说的那种,我发现接收的文件异常,那么就让你重新给我发一份完整的. 这种方式叫:自动请求重复. 还有一种,它就是,我接收了一部分的文件,再次让你给我发的时候,是继续上一部分之后的内容发过来.这种方式对于我的要求就高了,不光能判断文件有差错,还得能判断发生错误的位置,方便你再次给我续传.叫:前向纠错FEC.

      

    网络层

    上面我们讲了,数据链路层,是两个相邻端点之间的数据帧的传送,现在需要从A传到Z,中间经过了BCD等等.那么这就需要网络层的支持了.

    再来个例子: 把我工位上的零食拿到你的工位,可以有n种走法,但是为了方便处理零食的传输,咱俩之间可以先建立这么一个逻辑通路(逻辑上了,那就是虚的喽),然后经过若干人传递给你.不过最终是只有一个人把所有零食都给你.

    还有一种方式就是: 把零食分成好几袋,若干袋零食构成了是我要送给你的.每个零食都带包装,我可以分开传送.然后你就会收到不定是谁给你的某一种.当然这也有种可能,中间零食被人吃了.你的零食就丢了部分.

    上面两种就是通信子网对端系统提供的两种网络服务: 虚电路和数据报.

    咱们继续讲上面的零食. 虚电路方式,从最开始我就确定了,先转给B,再转C,以此类推,直到转给你.

    而数据报呢,就是每次某个人收到这包零食,再去做出选择. 咱们这个来回转,拿这么一个词来表达: 路由选择.

    如果在传送的过程中, B 不光需要转我给你的零食,还要转其他人给好有的零食,那么B就可能因为需要转的东西太多.就给拥塞了.这个想想双十一,就完全就理解了.要么就是仓库太小,有些包就给丢了.有些就是因为分拣员少.来不及处理那么多的量.所以堵了很正常嘛.

    当然这个拥塞不光光是网络层可能出现,其它层也可能会出现的.

    为了解决这个堵塞,可以分组排队,按顺序来,也可以把一些包直接给丢了.减少压力.

     这里 有一个我们常说的ip

    那么现在就来讲讲这个ip,互联网上的每一台计算机,都会分配到一个ip地址.地址分为两个部分,前一部分代表的是网络,后一部分代表的是主机.前一部分代表的是网络,后一部分代表主机,处于同一个子网络的电脑,其ip地址网络部分必定是相同的.但是不一定是同一个子网络. 因为不清楚其网络部分是前24位,还是16位. 怎么才能从ip地址,判断两台计算机是属于同一个子网络的.需要一个参数了: 子网掩码.

    两个ip地址与子网掩码分别进行and运算(两个数位都为1,运算结果为1,否则为0),比较结果是否相同,是的话,就是在同一个子网络中了.否则就不是.

    ip协议的作用是啥: 就是先给每个计算机分配一个ip地址,方便寻址.然后确定哪些地址是同一个子网络中.这样ip从源传输实体取得数据,如果源址和目标地址在一个网络中,ip就直接通过网络将数据传输给目的主机了,而若目的主机不在一个网络中,ip数据报就会一个模块传到另一个模块.直到目的地址为止.

     

    传输层

    经过上面物理层, 电脑有了电,首先是活了经脉开始复苏.,经过数据链路层,成功把物理层的内容进行了解析开始传输,经过网络层,利用其路由的选择,成功的从一台主机联系上了目标主机.联系上了目标主机,但是主机上有很多的应用程序,他们都用到了网络.当你用今目标接收一个文件, 但同时你还开着wechat和qq,那么电脑怎么就确定了, 是今目标传过来的这个文件, 这里就有一个新的名词出现了,就是我们常说的端口. 文件可以理解成一个数据包,这个包发送到今目标的文件传输端口,今目标就能取到这个包了.

    我们都知道,基本没有什么东西,都是无限长的, 上面讲了帧有长度, 之前也有提过redis有固定槽数,端口也不例外. 介于0-63353,不过我们的系统启动, 会占用一定的端口,也就是0-1023,用户想用,只能用1024之后的.

    这么区分网络层和传输层,也就相对好区分一点了. 网络主要是确定主机到主机,但是传输层就变成了端到端了.有了主机ip和端口,就可以唯一确定一值了. 程序之间的通信到目前就接通了.

    上面我们说了,找到了组织了,就比如说: 找到了中国共产党的接头人. 但是情报不能乱给吧.这里就需要建立连接了. 数据包要传输,要传输到哪里,就需要在数据包中添加 一个端口,方便一一对应. 数据包加入端口信息,就得需要一个新的协议了.最简单的方式就是UDP协议了.格式很简单.就是标头和数据.标头中有源端口和目标端口,长度和校验和. 数据就是具体的内容了. 整个UDP数据包中是放在ip数据包中的数据部分了. 它是怎么来发送的呢,就是只要我手里有内容,管你能不能收,反正我是脱手了.也不对这个数据包进行检查和修改. 所以它快, 但是不可靠啊.所以就得完善它,那么就有了tcp协议. 

    tcp与udp最大的区别就是, 它有确认机制.udp不管你能不能收,所以很有可能这个包就丢了. tcp就会确保数据不会遗失, 那它怎么做到的: 

    三次握手: 我发送请求,你回应请求,我再次发送收到你回应请求的请求.

    当然也可能你没有回应请求,我就来个计时器,到点了,还没给我应答, 我就重发,也会记录这个时间.存放当前的目的端的时间,以后就不乱估时间了, 多智能化.

    请求连接有了,释放链接也不难理解: 

    有时候,它想懒点,等你发过来几个之后,我再一次性回复你, 发送方呢,也想等到一定量之后,一次性发给你, 这就引申出来一个: 滑动窗口控制

     

    应用层

     我们平时用到了各种的应用程序, 有网页,还有邮箱等等.

    所以来的数据,就是五花八门的,必须得事先规定好格式,否则根本无法解读 . 简单理解应用层的作用,就是规定应用程序的数据格式

    最高层,直接面对用户

    应用层就包括了我们需要的应用程序.同时还有应用层协议, 有了这些协议,我们就可以通过不同的协议来使用网络. 比如上面说的发邮件,就用专门的协议:SMTP 和POP3.

    这里简单讲几个常用的应用层协议

    我们每次访问什么网站首页的时候,都是在浏览器中直接输入域名,比如baidu.com. 而不是输入网站的ip. 这个有了一个熟悉的DNS解析.

    域名系统DNS

    顶级域名有3类: 国家顶级域名(cn us hk tw),国际顶级域名(int),通用顶级域名(com).

    可能你想知道,ip是怎么和域名连起来的.听我下面慢慢给你讲: 咱们天赋吉运,就是一个域名, 它有一个ip.域名到ip地址的映射

    说完常常访问的网址之后, 我们也是离不开各种邮件,现在来大概讲讲邮件

    邮件服务器协议有我们常见的smtp,最简单的邮件传输协议啦, 另外就是邮局协议pop 还有一个不熟悉的因特网邮件存取协议IMAP

    pop得有一个邮件服务器.咱们现在也有这么一个邮件服务器了

    先来简单的讲: smtp 25端口  邮件服务器之间的传输协议

    pop3 用户计算机与邮件服务器之间的传输协议.端口110

    imap有3种工作方式, 离线: 用户的计算机得和邮件服务器保持连接,然后把邮件都从服务器下载到本地

    在线的: 邮件是一直存在邮件服务器中的,然后用户各种操作.删除啊回复啊等等. 但是得一直跟服务器连接着,不能断喽

    断连接方式: 收邮件的时候,其实是先在本地来个缓存,当用户编辑的差不多了,要发送时,再去连接邮件服务器,同时把两方的邮件状态保持一致.我觉得是介于上面两个中间的.

    后面还有我们平时输入域名, 最前面默认给加上的http 和 www .http是应用层的协议之一.资源标示是它的核心.url 这个咱们太常见了, 跳转页面啥的. 

    还有之前我.net项目常用的ftp,可以临时性充当文件服务器.它可以直接匿名登录, anonymous 所以从某种程度上讲,不太安全.

     

    小结

    两个电脑如何通信呢, 就是A 给B 发一个数据包, B收到了,给A回一个数据包,就建立起来了.

    A 想找B ,首先A 给通上点,插上网线, 然后能知道B的ip和mac A和B 可能不在一个子网络里,比如A在中国, B在美国.这样A 就不知道B的mac地址了, 就有这么一个网关,网关能知道B的mac地址的.  那B 的ip呢. 一般我们直接连网之后, 大家直接看ip属性,能看出来,给自动分配了. 所以B要连网,得有这么几个参数: 本机ip 子网掩码,网关ip dns的ip地址

    现在B能连网了,想打开百度时,先输入的www.baidu.com 然后dns协议,把这个网址给转成了ip地址. dns服务告诉B 要访问的ip地址是多少. 所以B就知道了百度的ip了.  下面想判断,这个ip是不是在同一个子网络, 就得用到子网掩码了.

    浏览器页面用的http协议.

    http部分内容,是嵌入tcp数据包中的. tcp数据包再嵌入ip数据包, ip数据包需要设置双方的ip,上面双方的ip我们已经知道了. ip数据包是嵌入以太网数据包中的.以太网数据包需要知道双方的mac地址,上面咱们也知道啦.所以通信达成啦

    展开全文
  • 网络原理基本知识

    2018-11-07 23:19:20
    ipv4的分配 PS:全0为本机,全1为广播   端口的作用 子网掩码与tcp/udp协议 根据ip地址与子网掩码去查找所在主机局域网,根据mac地址查找局域网里所在位置确定主机,根据端口确定主机所需具体服务  ...

    ipv4的分配

    PS:全0为本机,全1为广播

     

    端口的作用  子网掩码与tcp/udp协议

    根据ip地址与子网掩码去查找所在主机局域网,根据mac地址查找局域网里所在位置确定主机,根据端口确定主机所需具体服务 

    子网掩码:一段连续的1与0注意前面确定局域网的那段1一定要连续,然后将子网掩码与某ip按位与运算就可得出该ip是否在某局域网中

    PS:ip   10111110.10000000.11101111.10000000对应的掩码为

    子网掩码11111111.111111111.111111111.00000000按位与,

     则该ip在这个子网中  10111110.10000000.11101111.00000000

    根据自定义的子网的不同子网掩码也不同但是前面的1一定要连续

    tcp/udp协议不同在于,tcp是面向连接的,效率低但是安全可靠,udp是面向非对象的,效率高但是不可靠且无状态(两种连接的不同见http://www.cnblogs.com/zhangstarstar/p/8973255.html)

    网关

     连接外网与局域网

    ps:交换机没有ip可以看作是一台局域网内的主机,作用为在物理层面上延伸局域网的范围

     

    路由

    连接外网与局域网,本身具有ip近似看为只具有物理  链路 传输 网络层的简单主机,内置mac映射表具有自学习与缓存的功能

    arp协议:例如A局域网内的1主机与B局域网内的2主机通信,首先1在自己的缓存表内进行查找,如果没有A内进行广播(PS:因为报文中携带A自己的mac地址,在广播时如果A局域网内的其他主机包括路由器如果没有1的mac地址,则对该地址进行存表,这就是所谓的学习功能),如果没有找到则将其发送到网关处此处为路由器,经过网关将其继续传播到外网

    域名与DNS

     

    域名解析可以交给本地的host文件(host有限dns)与dns服务器,如果host文件没有该域名对应的ip的映射就请求dns服务器,dns的原理图如下

     

    对迭代查询与递归查询与dns的查询类型的解释如下

    注意在访问完dns服务器后自动把ip的映射写入本地的缓存文件便于下一次的访问

     

    展开全文
  • 网络原理总结

    万次阅读 多人点赞 2016-06-14 15:46:39
    计算机网络网络)把许多计算机连接在一起,而互联网则把许多网络连接在一起,是网络网络。因特网是世界上最大的互联网。 以小写字母i开始的internet(互联网或互连网)是通用名词,它泛指由多个计算机网络互连而成...
  • 网络原理——初识

    2020-06-11 11:24:16
    计算机网络背景: 独立模式:计算机之间相互独立。 网络互联:多台计算机连在一起,完成数据共享。 局域网LAN:计算机的数量变多,通过交换机和路由器连接在一起。 广域网WAN:将远隔千里的计算机都连在一起。 认识...
  • 关于网络的一些基本原理

    千次阅读 2018-11-20 16:10:25
    URL,即统一资源定位符,这是我们很熟悉的一个概念,简单点理解我们可以把我们平时在搜索地址栏输入的网址看作URL,但是在实际上,URL只是URI(统一资源标志符)的一个子集,也就是说每个URL都是URI,但不是每个URI...
  • 网络原理

    千次阅读 2018-05-11 13:42:35
    面向连接服务在网络层中又称为虚电路服务。 无连接服务(connectionless) 1. 两个实体之间的通信不需要先建立好连接。 2.是一种不可靠的服务。这种服务常被描述为“尽最大努力交付” 或“尽力而为”。 TCP1.TCP 是...
  • Internet网络原理

    千次阅读 2018-09-30 20:44:41
    起源: &nbsp;&nbsp;因特网相比局域网和广域网,它的一个更大的问题是他怎样满足,更多,更大范围内的用户使用. &nbsp;&...Internet实际上要解决地最大的问题是和广域网类似的,它要解决数据的传输,或者是...
  • 《计算机网络原理》问答

    千次阅读 2019-04-16 10:39:32
    网络概述 问:协议三要素是什么 语法:实体间交换信息的格式 语义:实体间交换信息需要哪些控制信息 时序:交换信息的顺序,以及彼此要适配的发送接收速度 问:报文交换和分组交换及电路交换有什么区别?各...
  • CNN卷积神经网络原理详解(上)

    万次阅读 多人点赞 2019-10-18 23:59:17
    CNN卷积神经网络原理详解(上)前言卷积神经网络的生物背景我们要让计算机做什么?卷积网络第一层全连接层训练 前言 卷积网络(convolutional network),也叫作卷积神经网络(convolutional neural network,CNN),是...
  • 【机器学习】RBF神经网络原理与Python实现

    万次阅读 多人点赞 2018-11-24 19:51:20
    【机器学习】RBF神经网络原理与Python实现一、LSSVM数学原理1. 感知机2. SVM3. LSSVM4. LSSVM与SVM的区别二、LSSVM的python实现参考资料 一、LSSVM数学原理 1. 感知机 SVM是从感知机发展而来。假设有m个训练样本{...
  • CapsNet ——胶囊网络原理

    万次阅读 多人点赞 2018-01-31 14:14:38
    在讲胶囊网络之前,首先我们回顾一下我们熟悉的CNN。 CNN做了什么事情呢? 假设这里有一个卷积核(左图),除了曲线轨迹上的值很大,其他的值都是零,所以这个卷积核对旁边这种曲线(右图)就有很高的输出,也...
  • CNN卷积神经网络原理讲解+图片识别应用(附源码)

    万次阅读 多人点赞 2018-06-26 16:35:50
    一、机器如何识图 先给大家出个脑筋急转弯:在白纸上画出一个大熊猫,一共需要几种颜色的画笔?——大家应该都知道,只需要一种黑色的画笔,只需要将大熊猫黑色的地方涂上黑色,一个大熊猫的图像就可以展现出来。...
  • 卷积神经网络概念与原理

    万次阅读 多人点赞 2016-09-05 10:00:27
    一、卷积神经网络的基本概念 受Hubel和Wiesel对猫视觉皮层电生理研究启发,有人提出卷积神经网络(CNN),Yann Lecun 最早将CNN用于手写数字识别并一直保持了其在该问题的霸主地位。近年来卷积神经网络在多个方向...
  • 神经网络原理

    千次阅读 2018-09-17 10:57:39
    神经网络原理 神经网络的主要用途在于分类,那么整个神经网络分类的原理是怎么样的?我们还是围绕着损失、优化这两块去说。神经网络输出结果如何分类? 神经网络解决多分类问题最常用的方法是设置n个输出节点,...
  • 自考那些事儿(六):计算机网络原理(总述篇)

    万次阅读 热门讨论 2016-04-03 23:14:58
    【前言】 ... 现在进入正题,这次报考了《计算机网络原理》这门课;看到这个书名就有莫名的小激动,为何如此说那???小编的《网络天地》系列文章为大家解疑。 越来越发现读书要先宏观把控,于...
  • 在上篇博文—《自考那些事儿:计算机网络原理(总述篇)》对整本书进行宏观的讲解,本篇博文则详细讲解其中的最为精彩的部分——网络各层。 何为网络各层?有的人或许会犯嘀咕,在软件开发中有经典的三层架构来...
  • Kubernetes网络原理

    万次阅读 2017-09-10 14:33:59
    1. kubernetes网络模型1.1. 基础原则 每个Pod都拥有一个独立的IP地址,而且假定所有Pod都在一个可以直接连通的、扁平的网络空间中,不管是否运行在同一Node上都可以通过Pod的IP来访问。 k8s中Pod的IP是最小粒度IP。...
  • 深度残差网络原理理解

    万次阅读 多人点赞 2017-09-14 18:33:01
    (1)残差网络的辉煌历史:残差引人瞩目的成绩则是在2015年的图像识别大赛上,其在5项数据集上取得了远远领先于第二名的效果。包括了图像的分类(152层),识别,定位(高于27%),检测(11%和16%)和分割(高于12%...
1 2 3 4 5 ... 20
收藏数 743,371
精华内容 297,348
关键字:

网络原理