筑基系列-计算机网络基础知识小抄版


筑基系列-计算机网络基础知识小抄版

计算机基础知识筑基三部曲:

目录

1.计算机网络概述

1.1 什么是计算机网络

  • 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统
  • 计算机网络的不是软件概念,还包含硬件设备
  • 计算机网络不仅仅是信息通信,还可以支持广泛的应用

1.2 计算机网络的分类

分类 英文 范围 区域
广域网 WAN(Wide Area Network) 几十到几千公里 跨省、跨国
城域网 MAN(Metro. Area Network) 5KM-50KM 城市间
局域网 LAN(Local Area Network) 1KM以内 地区内

计算机网络的发展历史

  • 世界互联网发展历史

    • 单个网络 ARPANET
      • 计算机–>交换机<–计算机
    • 三级结构互联网
      • 主干网–>地区网–>校园网
    • 多层次ISP互联网
      • ISP(Internet Service Provider): 网络服务提供商
      • 中国电信、中国移动、中国联通等
      • 主干ISP(海底电缆)–>地区ISP(山东移动)–>校园、家庭、公司
      • 查看全球网络地图:https://www.infrapedia.com/app

  • 中国互联网的发展历史

    • 1980 年开始互联网实验
    • 1989 年第一个公共网络建立运行
    • 1994 接入国际互联网
    • 中国的互联网企业
      • 中国电信互联网CHINANET
      • 中国联通互联网UNINET
      • 中国移动互联网CMNET
      • 中国教育与科研计算机网CERNET
      • 中国科学技术网CSTNET
      • 1996年,张朝阳创建搜狐
      • 1997年,丁磊创建网易
      • 1998年,王志东创建新浪
      • 1998年,马化腾、张志东创建腾讯
      • 1999年,马云创建阿里巴巴
      • 2000年,李彦宏创建百度

1.4 计算机网络的层次结构

  • 层次结构设计的基本原则
    • 分层实现不同的功能
      • 保证数据通路顺畅
      • 识别目的计算机
      • 目的计算机状态
      • 数据是否错误
      • 层次划分:网络应用数据(视频、文件、游戏)–>数据可靠通信(数据错误、重复)–>物理网络接入(光电等物理特性)
    • 各层之间是相互独立的
    • 每一层要有足够的灵活性
    • 各层之间完全解耦
  • OSI七层模型
    • 应用层:为计算机用户提供接口和服务
    • 表示层:数据处理(编码解码、加密解密等)
    • 会话层:管理(建立、维护、重连)通信会话
    • 传输层:管理端到端的通信连接
    • 网络层:数据路由(决定数据在网络的路径)
    • 数据链路层:管理相邻节点之间的数据通信
    • 物理层:数据通信的光电物理特性
    • OSI在市场化过程中困难重重, TCP/IP在全球范围成功运行
    • OSI欲成为全球计算机都遵循的标准
    • OSI最终并没有成为广为使用的标准模型
    • 为什么没有被接受
      • OSI标准制定周期过长,按OSI标准生产的设备无法及时进入市场
      • OSI的专家缺乏实际经验
      • OSI模型设计的并不合理,一些功能在多层中重复出现
  • TCP/IP四层模型
    • 应用层:HTTP/FTP/… ,对应OSI的应用层、表示层、会话层
    • 传输层:TCP/UDP,对应OSI的传输层
    • 网络层:IP/ICMP,对应OSI的网络层
    • 网络接口层:Ethernet/ARP/RARP,对应OSI的数据链路层、物理层

1.5 现代互联网的网络拓扑

  • 边缘部分
    • 家庭:终端机器(手机)–>路由器–>网关–>地区ISP
    • 企业:终端机器(电脑)–>路由器–>内部网关–>统一网关–>地区ISP
  • 核心部分
    • 地区ISP–>主干ISP–>国际路由器
  • 网络连接错综复杂
  • 接入设备数以亿计
  • 网络覆盖边际全球

  • 客户-服务器(C/S)模式
    • C请求服务–>S获得服务
  • 对等连接(P2P)模式

1.6 计算机网络的性能指标

  • 速率
    • 速率单位: bps=bit/s
    • 为什么电信拉的100M光纤,测试峰值速度只有12M每秒?
      • bps到字节的转换
      • 网络常用单位为(Mbps)
      • 100M/s = 100Mbps = 100Mbit/s
      • 100Mbit/s=(100/8)MB/s=12.5MB/s
  • 时延
    • 总时延 = 发送时延 + 排队时延 + 传播时延 + 处理时延
    • 发送时延
      • 发送时延 = 数据长度(𝑏𝑖𝑡)/发送速率(𝑏𝑖𝑡/𝑠)
      • 发送速率受限于计算机网卡
    • 传输时延
      • 传播时延 = 传输路径距离/传播速率(𝑏𝑖𝑡/𝑠)
      • 传播速率受限于传输介质,铜线、光线
    • 排队时延
      • 数据包在网络设备中等待被处理的时间
    • 处理时延
      • 数据包到达设备或者目的机器被处理所需要的时间
  • 往返时间RTT
    • RTT表示的是数据报文在端到端通信中的来回一次的时间
    • RTT(Route-Trip Time)是评估网络质量的一项重要指标
    • 通常使用ping命令查看RTT

2.物理层

2.1 物理层的作用

  • 相关设备
    • 双绞线
    • 同轴电缆
    • 光纤
    • 红外线
    • 无线
    • 激光
  • 传输比特流
  • 连接不同的物理设备
  • 物理特性
    • 机械特性
    • 电气特性
    • 功能特性
    • 过程特性

2.2 信道的基本概念

  • 一条通信电路包含一个接收信道和一个发送信道

  • 信道是往一个方向传送信息的媒体

  • 单工信道

    • 有线电视、无线电收音机等等
    • 只能一个方向通信,没有反方向反馈的信道
  • 半双工信道

    • 不能双方同时发送,也不能同时接收
    • 双方都可以发送和接收信息
  • 全双工信道

    • 双方都可以同时发送和接收信息
  • 分用-复用技术

    • 信道利用率并不高?
    • 分用器
    • 复用器
    • 频分复用
    • 时分复用
    • 波分复用
    • 码分复用

3.数据链路层

3.1 数据链路层主要功能

  • 封装成帧

    • 发送端在网络层的一段数据前后添加特定标记形成“帧”
    • “帧”是数据链路层数据的基本单位
    • 接收端根据前后特定标记识别出“帧”
    • 物理层才不管你“帧”不“帧”,物理层之作用bit流的传输
    • IP数据报–>“帧”的数据[帧首部, “帧”的数据 ,帧尾部]
    • 帧首部和尾部是特定的控制字符(特定比特流)SOH: 00000001,EOT: 00000100
  • 透明传输

    • “一种实际存在的事物却又看起来不存在一样”
    • “透明”在计算机领域是非常重要的一个术语
    • “即是控制字符在帧数据中,但是要当做不存在的去处理”
    • 数据中也出现了控制字符,对数据中的控制字符进行特殊处理,转义
    • “\n”、“\t”等控制字符,编程语言中“\”一般为转义字符,“\” 、“\\”
  • 差错监测

    • 数据链路层负责起“差错监测”的工作
    • 物理层只管传输比特流,无法控制是否出错
    • 循环冗余校验码CRC
      • 检测数据传输或者保存后可能出现的错误
      • 一种根据传输或保存的数据而产生固定位数校验码的方法
      • 生成的数字计算出来并且附加到数据后面
      • 模“2”除法
        • 与算术除法类似,但除法不借位,实际是“异或”操作
        • 模“2”除法是二进制下的除法
        • 0 xor 0 = 0,0 xor 1 = 1,1 xor 0 = 1,1 xor 1 = 0
      • 检测流程
        • 选定一个用于校验的多项式G(x),并在数据尾部添加r个0
        • 将添加r个0后的数据,使用模“2”除法除以多项式的位串
        • 得到的余数填充在原数据r个0的位置得到可校验的位串
        • 例子1:使用CRC计算101001的可校验位串
          • 计算过程有点难!!!
      • 数据链路层只进行数据的检测,不进行纠正,一旦出错会丢弃
      • CRC的错误检测能力与位串的阶数r有关
    • 奇偶校验码
      • 检测机制:在比特流最后一位加上一位(1或者0),(所有比特流中的1相加)偶数加0,奇数加1
      • 缺陷:出错两位,奇偶校验码校测不到错误

3.2 最大传输单元MTU

  • MTU
    • 数据链路层的数据帧也不是无限大的
    • 最大传输单元MTU(Maximum Transmission Unit)
    • 数据帧过大或过小都会影响传输的效率
    • 总时延 = 发送时延 + 排队时延 + 传播时延 + 处理时延
    • 以太网MTU一般为1500字节
  • 路径MTU
    • 路径MTU由链路中MTU的最小值决定
    • 木桶效应

3.3 以太网协议详解

  • MAC地址

    • MAC地址(Media Access Control Address)直译为媒体存取控制位址,也称为局域网地址(LAN Address)
    • 每一个设备都拥有唯一的MAC地址
    • MAC地址(物理地址、硬件地址)
    • MAC地址共48位,使用十六进制表示
    • ipconfig/all 查看本机所有MAC地址 ,30-B4-9E-ED-85-CA
  • 以太网协议

    • 以太网是一种应用于数据链路层的协议
    • 以太网(Ethernet)是一种使用广泛的局域网技术
    • 使用以太网可以完成相邻设备的数据帧传输
    • 以太网数据格式
      • 类型:0800: IP数据报,0806: ARP请求/应答,8035: RARP请求/应答
    目的地址(MAC地址) 单位字节 源地址 类型 帧数据 CRC校验码
    6 6 2 46-1500 4
    • MAC地址表,路由器持有
    MAC地址 硬件接口
    31-B4-9E-ED-85-CA 接口1
    32-B4-9E-ED-85-CB 接口2
    33-B4-9E-ED-85-CC 接口4
    • A终端通过路由器发送数据到C终端的过程
      • A通过网卡发出数据帧
      • 数据帧到达路由器,路由器取出前6字节(目的MAC地址)
      • 路由器匹配MAC地址表,找到对应的网络接口
      • 路由器往该网络接口发送数据帧
      • 如果MAC地址表没有匹配成功
      • 路由器将广播A的数据包到除A以外的端口
      • 路由器检查MAC地址表,发现没有C的信息
      • 路由器将收到来自B、 C的回应,并将地址记录
    • 以太网协议只提供相邻物理节点传输,跨设备是无法传输的,需要借助网络层

4.网络层

4.1 网络层的主要功能

  • 网络层:数据路由(决定数据在网络的路径)
  • 数据链路层只能解决相邻物理节点传输

4.2 IP协议详解

  • 虚拟互联网络

    • 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
    • 实际的计算机网络是错综复杂的
    • 当网络中的主机使用IP协议连接时,则无需关注网络细节
    • IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
    • IP协议使得复杂的实际网络变为一个虚拟互连的网络
    • IP协议解决了在虚拟网络中数据报传输路径的问题
  • IP协议

    • IP地址
      • MAC地址: 30-B4-9E-ED-85-CA:00110000-11000020-11101101-01000101-11001010
        • 48位,16进制表示
        • 唯一,不可变
      • P地址: 192.168.11.11:11000000.10101000.00001011.00001011
        • 32位,常分成4个8位,一般采用点分十进制表示,共可以表示 2^32 = 4294961296
        • IP地址常使用点分十进制来表示(0255.0255.0255.0255),例如:255.255.255.255
        • 受网络环境影响会发生改变
    • IP报文格式
    协议层 数据格式
    物理层 001010101001110110101010101010…10101010101010101010101010101
    数据链路层 【帧首部 】【“帧”的数据】 【帧尾部】
    网络层 【IP首部】【 IP数据报的数据】
    • IP报文头部各个参数的作用
    4位版本 4位首部长度 8位服务类型(TOS) 16位总长度(字节)
    16位标识 3位标志 13位片偏移
    8位生存时间(TTL) 8位协议 16位首部校验和
    32位源IP地址
    32位目的IP地址
    选项options(若有)
    IP数据
    • 每一行32位,第六行可选,所以IP报文头部至少占4×5=20个字节
    • 第一行
      • 版本:占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6
      • 首部位长度:占4位,最大数值为15,表示的是IP首部长度,单位是“32位字”(4个字节),也即是IP首部最大长度为60字节
      • 8位服务类型(TOS):TOS包括共8位,包括3 bit的优先权字段(取值可以从000-111所有值),4 bit的TOS子字段和1 bit未用位但必须置0。
      • 总长度:占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据),数据链路层MTU,如果IP数据报的数据多余“帧”的数据,需要分片处理
    • 第二行
      • 16位标识:IP协议内部使用
      • 3位标志:标记是否可以分片
      • 13位片偏移:第几个分片
    • 第三行
      • TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备, TTL减1,当TTL=0时,网络设备必须丢弃该报文,避免数据在网络无限传输
      • 协议:占8位,表明IP数据所携带的具体数据是什么协议的(如: TCP、 UDP等)
        • 协议名 ICMP、 IGMP、 IP 、TCP、 UDP、 OSPF …,字段值 1 、2 、4 、6、 17、 89 …
      • 首部校验和:占16位,校验IP首部是否有出错
    • 源IP地址:发送方
    • 目的IP地址:接收方

4.3 IP协议的转发流程

  • 逐跳(hop-by-hop)

  • 路由表

    • 计算机或者路由器都拥有路由表
    • MAC地址表和路由表
    MAC地址 硬件接口 目的IP地址 下一跳IP地址
    A E1 IP1 IP4
    B E2 IP2 IP5
    C E3 IP3 IP6
  • 转发流程:网络层

    • A将数据报发送给E
    • A发出目的地为C的IP数据报, 查询路由表发现下一跳为E
    • E查询路由表发现下一跳为F,将数据报发送给F
    • F查询路由表发现目的地C直接连接,将数据报发送给C
  • IP数据报每一跳的IP地址始终不变

  • 数据帧每一跳的MAC地址都在变化

4.4 ARP协议与RARP协议

  • ARP协议
    • ARP(Address Resolution Protocol)地址解析协议,通过IP地址查找MAC地址
    • ARP缓存表:[IP地址, MAC地址] 如:192.168.83.254 —00-50-56-e0-33-40
    • ARP缓存表缓存了IP地址到硬件地址之间的映射关系
    • ARP缓存表是ARP协议和RARP协议运行的关键
    • ARP缓存表中的记录并不是永久有效的,有一定的期限
    • arp -a :查看ARP缓存表
    • 数据报格式,共28个字节,封装在数据链路层里,用于网络层,【类型0806 ,ARP请求/应答 ,PAD】
      • 硬件类型,2位
      • 协议类型 ,2位
      • 标记 ,24
      • 发送端 以太网地址 ,6位
      • 发送端 IP地址 ,4位
      • 目的端 以太网地址 ,6位
      • 目的端 IP地址,4位
  • RARP协议
    • RARP(Reverse Address Resolution Protocol)逆地址解析协议
    • 数据链路层MAC48位地址–》网络层IP32位地址
  • ARP和RARP的操作对程序员是透明的
  • (R)ARP协议是TCP/IP协议栈里面基础的协议
  • 理解(R)ARP协议有助于理解网络分层的细节
  • 转发流程:网络层+数据链路层+物理层
    • 第一步:A->E
      • A发出目的地为C的IP数据报, 查询路由表发现下一跳为E
      • A将IP数据报交给数据链路层,并告知目的MAC地址是E
      • 数据链路层填充源MAC地址A和目的MAC地址E
      • 数据链路层通过物理层将数据发送给E
    • 第二步:E–>F
      • E的数据链路层接收到数据帧, 把帧数据交给网络层
      • E查询路由表, 发现下一跳为F
      • E把数据报交给数据链路层, 并告知目的MAC地址为F
      • E的数据链路层封装数据帧并发送
    • 第三步:F–>C
      • F的数据链路层接收到数据帧, 把帧数据交给网络层
      • F查询路由表, 发现下一跳为C
      • F把数据报交给数据链路层,并告知目的MAC地址为C
      • F的数据链路层封装数据帧并发送

4.5 IP地址的分类

  • IP地址长度为32位,常分成4个8位,常使用点分十进制来表示(0255.0255.0255.0255),2^32 = 4294961296

  • 直接对42亿多个IP地址规划和分配IP地址非常麻烦

  • IP地址=【网络号段+主机号段】=【网络号段+ (子网号段+子网主机号段)】=

  • 分类的IP地址

    • 网络号
      • 网络号的位数直接决定了可以分配的网络数(计算方法=2^网络号位数-特殊网络号数)
    • 主机号
      • 主机号的位数则决定了网络中最大的主机数(计算方法=2^主机号位数-特殊主机号数)
    IP类型 组成 最小网络号 最大网络号 子网数量(理想) 最小主机号 最大主机号 主机数量
    A 8位网络号(0开头)+24位主机号 0(00000000) 127(01111111) 2^7=128 0.0.0 255.255.255 2^24=16,777,216
    B 16位网络号(10开头)+16位主机号 128(100000000).0 191(10111111).255 2^14(6+8)=16,384 0.0 255.255 2^16=65536
    C 24位网络号(110开头)+8位主机号 192(110000000).0.0 223(11011111).255.255 2^21(5+8+8)=2,097,252 0 255 2^8=256
    D 组播地址(1110开头) 224(111000000).0.0.0 239(11101111).255.255.255 2^4=16
    E 保留以后再用(1111开头) 240(111110000).0.0.0 225(11111111).255.255.255 2^4=16
    • 特殊的网络号
      • A类地址网络段后7位全1(01111111:127)表示回环地址
      • A类地址网络段全0(00000000)表示特殊网络
      • B类地址网络段(10000000.00000000:128.0)是不可使用的
      • C类地址网络段(192.0.0)是不可使用的
      • 上表中的A类IP的子网可用数量为:2^7-2,B类:2^14-1,C类:2^21-1
    • 特殊的主机号
      • 主机号为全1表示广播地址,向当前网络段所有主机发消息,例如:1.0.0.0
      • 主机号全0表示当前网络段,不可分配为特定主机,例如:1.255.255.255
      • 上表中A\B\C的可用主机号数量为:2^24-2、2^16-2、2^8-2
    • 127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何一个有类别地址类。localhost是个域名
    • 如何判断一个IP属于哪一类IP地址
      • 取出首八位:
      • A类:(0,127) / 0xxxxxxx,
      • B类:[128,19]) / 10xxxxxx,
      • C类:[192,223] / 110xxxxx

4.6 IP地址的划分子网

  • 某公司拥有100名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
    • C类可分配的主机数量为2^8-2=254个
  • 某公司拥有256名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
    • B类可分配的主机数量为2^16-2=65534个
    • 造成了很大的地址空间浪费
  • 子网号
    • IP地址=【网络号段+主机号段】=【网络号段+ (子网号段+子网主机号段)】=
    • 例如一个C类IP 193.10.10.0 = 24位网络号(110开头)+8位主机号
    • 主机号段为.0=.00000000
    • 将主机号段最高位分成 .00000000 和 .10000000 两个子网
    • .00000000 子网可以表示的主机范围为:(0) .00000000 – (127) .01111111
    • .10000000 子网可以表示的主机范围为:(128) .10000000 – (255) .11111111
    • 某公司拥有100名员工,每人配备一个计算机,就可以申请C类IP的子网从而可以充分利用IP的数量
  • 子网掩码
    • 子网号这么多,有没有办法快速判断某个IP的网络子网掩码号?
    • 子网掩码由连续的1和连续的0组成
    • 子网掩码和IP地址一样,都是32位
    • 某一个子网的子网掩码具备网络号位数个连续的1
    • A类IP的子网掩码:255.0.0.0
    • B类IP的子网掩码:255.255.0.0
    • C类IP的子网掩码:255.255.255.0
    • 划分子网的子网掩码:子网掩码-子网号-主机号
      • 例如:193.10.10.0 = 24位网络号(110开头)+1位子网号+7位主机号
        • 子网掩码为:255.255.255.128(24+1个1和7个0组成)
        • 求 193.10.10.6 这个IP对应的子网号
        • 第一步IP对应的二进制: 193.10.10.6 – 11000001.00001010.00001010.00000110
        • 第二步子网掩码对应的二进制:255.255.255.128 – 11111111.11111111.11111111.10000000
        • 第三步:一二步与运算得到子网号 11000001.00001010.00001010.00000000 – 193.10.10.0

4.7 无分类地址CIDR

  • IP地址=【网络号段+主机号段】=【网络号段+ (子网号段+子网主机号段)】

  • 子网划分相对复杂所以出现了CIDR

  • 无类域内路由选择(Classless Inter-Domain Routing)

  • CIDR中没有A、 B、 C类网络号、和子网划分的概念

  • CIDR将网络前缀相同的IP地址称为一个“CIDR地址块”

  • IP地址=【网络前缀+主机号】

  • 网络前缀是任意位数的

  • CIDR采用斜线记法来表示一个IP地址

    • 193.10.10.129/25==11000001.00001010.00001010.10000001
    • 25表示网络前缀有25位,主机位有7位
    • 相比原来子网划分更加灵活
    • 超网-》子网
    CIDR前缀长度 掩码点分十进制 地址数
    /13 255.248.0.0 2^19=512K
    /14 255.252.0.0 2^18=256K
    /15 255.254.0.0 2^17=128K
    /16 255.255.0.0 2^16=64K
    /17 255.255.128.0 2^15=32K
    /18 255.255.192.0 2^14=16K
    /19 255.255.224.0 2^13=8K

4.8 网络地址转换NAT技术

  • IPv4最多只有40+亿个IP地址

  • 早期IP地址的不合理规划导致IP号浪费

  • 网络拓扑:边缘部分:家庭,多个设备如何复用同一个IP地址的

  • 内网地址

    • 内部机构使用
    • 避免与外网地址重复
    • 三类内网地址
      • 10.0.0.0~10.255.255.255(支持千万数量级设备)
      • 172.16.0.0~172.31.255.255(支持百万数量级设备)
      • 192.168.0.0~192.168.255.255(支持万数量级设备)
  • 外网地址

    • 全球范围使用
    • 全球公网唯一
  • 网络地址转换NAT技术

    • 内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?
    • 网络地址转换NAT(Network Address Translation)
    • NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
    • NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度
    • 端口(Port)号
    • 端口映射表:NA(P)T表
    数据传输方向 旧的地址和端口号 新的地址与端口号
    92.168.2.11:6666 173.21.59.10:16666
    192.168.2.10:7777 173.21.59.10:17777
    173.21.59.10:16666 192.168.2.11:6666
    173.21.59.10:17777 192.168.2.10:7777

4.9 ICMP协议详解

  • 网际控制报文协议(Internet Control Message Protocol)

  • ICMP协议可以报告错误信息或者异常情况,辅助IP协议

  • 网络层 【IP首部】-【 IP数据报的数据】

  • 【IP首部】协议:占8位,表明IP数据所携带的具体数据是什么协议的(如: TCP、 UDP、ICMP等)

  • ICMP数据封装在【 IP数据报的数据】里面

  • 【ICMP报文首部】-【 ICMP报文数据】

  • 8位类型+ 8位代码 +16位校验和+ICMP报文数据

  • 分类

    • 差错报告报文
    • 询问报文
    ICMP报文种类 类型的值 报文类型 具体代码
    差错报告报文 3 (终点不可达) 网络不可达 / 主机不可达 0/1
    5 (重定向) 对网络重定向 / 对主机重定向 0/1
    11 传输超时 -
    12 坏的IP头 / 缺少其他必要参数 0/1
    询问报文 0或8 回送(Echo)请求或应答 -
    13或14 时间戳(Timestamp)请求或应答 -
  • ICMP报文的应用

    • Ping应用
      • 询问报文-0或8 - 回送(Echo)请求或应答
      • Ping回环地址127.0.0.1,如果失败计算机的协议栈可能出问题,需要重装操作系统
      • Ping网关地址,如果失败,网关路由器可能出问题
      • Ping远端地址,如果失败,家到ISP服务商之间可能出问题了,需要找服务商解决
    • Traceroute应用
      • Traceroute可以探测IP数据报在网络中走过的路径
      • 【IP首部】TTL:占8位,表明IP数据报文在网络中的寿命,每经过一个设备, TTL减1,当TTL=0时,网络设备必须丢弃该报文–ICMP终点不可达差错报文
      • 命令:Windows:tracert github.com ,Mac:traceroute to github.com
        • 221.179.159.20来自北京市北京 移动
        • 111.24.3.17来自 移动
        • 223.119.2.21来自香港 移动
        • 52.93.11.39来自新加坡 亚马逊云

4.10 网络层的路由概述

  • 路由表问题

    • 路由表是怎么来的
    • 下一跳地址是唯一的吗?
    • 下一跳地址是怎么来的?
    • 下一跳地址是最佳的吗?
    • 路由器怎么多,他们是怎么协同工作的?
    • 需要一个好的算法去解决这些事情
  • 路由算法

    • 每一条边表示一条网络路径
    • 每一顶点表示一个网络、路由器或计算机
    • 路由算法实际上是图论的算法
    • 网络环境复杂,路由算法要比图论的算法要复杂
    • 路由算法具备哪些特性
      • 算法是正确的、 完整的
      • 算法在计算上应该尽可能的简单
      • 算法可以适应网络中的变化
      • 算法是稳定的和公平的

4.11 自治系统(AS)

  • 对互联网进行划分
    • 互联网的规模是非常大的
    • 互联网环境是非常复杂的
    • 自治系统(Autonomous System)
    • 自治系统内部路由的协议称为:内部网关协议(RIP、 OSPF)
    • 自治系统外部路由的协议称为:外部网关协议(BGP)
    • 两个内部网关协议需要通过外部网关协议进行通讯
  • 一个自治系统(AS)是处于一个管理机构下的网络设备群
  • AS内部网络自行管理, AS对外提供一个或者多个出(入)口

4.12 内部网关路由协议之RIP协议

  • 距离矢量(DV)算法

    • DV=Distance vector
    • 每一个节点使用两个向量𝐷𝑖和S𝑖
    • 𝐷𝑖描述的是当前节点到别的节点的距离
    • S𝑖描述的是当前节点到别的节点的下一节点
    • 每一个节点与相邻的节点交换向量𝐷𝑖和S𝑖的信息
    • 每一个节点根据交换的信息更新自己的节点信息
    • 算法实现过程
      • todo
  • RIP协议的过程

    • RIP(Routing Information Protocol)协议
    • RIP协议是使用DV算法的一种路由协议
    • RIP协议把网络的跳数(hop)作为DV算法的距离
    • RIP协议每隔30s交换一次路由信息
    • RIP协议认为跳数>15的路由则为不可达路由
    • 具体流程
      • 路由器初始化路由信息(两个向量𝐷𝑖和S𝑖)
      • 对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
        • 检索本地路由,将信息中新的路由插入到路由表里面
        • 检索本地路由,对于下一跳为X的,更新为修改后的信息
        • 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
      • 如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
  • RIP协议的优缺点

    • 故障信息传递慢
    • RIP协议:实现简单,开销很小
    • RIP协议:限制了网络的规模
    • RIP协议:“坏消息传的慢”,更新收敛时间过长
  • Dijkstra(迪杰斯特拉)算法

    • Dijkstra算法是著名的图算法
    • Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
    • “以起始点为中心,向外层层扩展”
    • 最短路径问题
      • 初始化两个集合(S, U)(S为只有初始顶点点A的集合, U为其他顶点集合)
      • 如果U不为空, 对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D
        • 将顶点D的纳入S集合
        • 更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新)
        • 重复2步骤
      • 知道U集合为空,算法完成
  • 内部网关路由协议之OSPF协议

    • 链路状态(LS)协议
      • 向所有的路由器发送消息
      • 消息描述该路由器与相邻路由器的链路状态
        • 距离、时延、带宽
      • 只有链路状态发生变化时,才发送更新信息
    • OSPF协议的过程
      • OSPF(Open Shortest Path First:开放最短路径优先)
      • OSPF协议的核心是Dijkstra算法
      • 向所有的路由器发送消息
        • 获得网络中的所有信息–> “网络的完整拓扑”
        • 也称为“链路状态数据库”
        • “链路状态数据库”是全网一致的
        • Dijkstra(迪杰斯特拉)算法
      • 消息描述该路由器与相邻路由器的链路状态
        • OSPF协议更加客观、更加先进
      • 只有链路状态发生变化时,才发送更新信息
        • 减少了数据的交换,更快收敛
      • 路由器接入网络
      • 路由器向邻居发出问候信息
      • 与邻居交流链路状态数据库
      • 广播和更新未知路由
    • 五种消息类型
      • 问候消息(Hello)
      • 链路状态数据库描述信息
      • 链路状态请求信息
      • 链路状态更新信息
      • 链路状态确认信息
    RIP协议 OSPF协议
    从邻居看网络 整个网络的拓扑
    在路由器之间累加距离 Dijkstra算法计算最短路径
    频繁、周期更新,收敛很慢 状态变化更新,收敛很快
    路由间拷贝路由信息 路由间传递链路状态,自行计算路径

4.13 外部网关路由协议之BGP协议

  • BGP(Border Gateway Protocol: 边际网关协议)
  • BGP协议是运行在自制系统(AS)之间的一种协议
  • 互联网的规模很大
  • AS内部使用不同的路由协议
  • AS之间需要考虑除网络特性以外的一些因素(政治、安全…)
  • BGP协议能够找到一条到达目的比较好的路由
  • BGP发言人(speaker)
    • BGP并不关心内部网络拓扑
    • AS之间通过BGP发言人交流信息
    • BGP Speaker可以人为配置策略

5.传输层

5.1 传输层的主要功能

  • 本质:跨设备的进程与进程的通信

    • 单机进程间通信方式:共享内存、Unix域套接字
  • 端口的概念

    • 使用端口(Port)来标记不同的网络进程
    • 端口(Port)使用16比特位表示(0~65535)
    FTP HTTP HTTPS DNS TELNET
    21 80 443 53 23

5.2 UDP协议详解

  • UDP是一个非常简单的协议
  • UDP(User Datagram Protocol: 用户数据报协议)
  • 数据报(Datagram)
    • 不合并 不拆分
  • 层次位置
协议层 数据格式
物理层 001010101001110110101010101010…10101010101010101010101010101
数据链路层 【帧首部 】【“帧”的数据】 【帧尾部】
网络层 【IP首部】【 IP数据报的数据】
传输层 【UDP首部】【 UDP数据报的数据(应用层数据)】
  • 报文结构
    • 16位源端口号 + 16位目的端口号
    • 16位UDP长度 + 16位UDP校验和
    • 头部报文共8个字节
    • UDP数据
    • 各个报文字段的意义
      • 16位源端口号
        • 源机器使用的网络进程
      • 16位目的端口号
        • 目的机器使用的进程
      • 16位UDP长度
        • udp数据报的长度,最小是8个字节仅包括手部
      • 6位UDP校验和
        • 检测数据报在传输过程中是否出错
  • UDP的特点
    • UDP是无连接协议
    • UDP不能保证可靠的交付数据,“想发就发”,“无法保证数据在网络中是否丢失”
    • UDP是面向报文传输的
    • UDP没有拥塞控制
    • UDP的首部开销很小

5.3 TCP报文详解

  • TCP(Transmission Control Protocol: 传输控制协议)
  • TCP协议是计算机网络中非常复杂的一个协议
  • 层次位置
协议层 数据格式
物理层 001010101001110110101010101010…10101010101010101010101010101
数据链路层 【帧首部 】【“帧”的数据】 【帧尾部】
网络层 【IP首部】【 IP数据报的数据】
传输层 【TCP首部】【 TCP数据报的数据 】
  • 特点

    • TCP是面向连接的协议
    • TCP的一个连接有两端(点对点通信)
    • TCP提供可靠的传输服务
    • TCP协议提供全双工的通信
    • TCP是面向字节流的协议,合并、分拆
  • 报文结构

    • 16位源端口 16位目的端口

    • 32位序号

    • 32位确认号

    • 数据偏移 +保留字段 +TCP标记 +窗口

    • 16位校验和 + 16位紧急指针

    • 以上行固定20个字节

    • TCP选项(可选)+ 填充

    • 各个报文字段的意义

      • 16位源端口号

        • 源机器使用的网络进程
      • 16位目的端口号

        • 目的机器使用的进程
      • 32位序号

        • 0~2^32-1
        • 面向字节流,一个字节一个序号
        • 数据首字节序号
      • 32位确认号

        • 0~2^32-1
        • 一个字节一个序号
        • 期望收到数据的首字节序号
        • 确认号为N:则表示N-1序号的数据都已经收到
      • 数据偏移

        • 占4位: 0~15,单位为: 32位字
        • 数据偏离首部的距离
      • 保留字段

      • TCP标记

        • 占6位,每位各有不同意义
        • TCP三次握手和四次挥手会用到这里的标记为
        标记 含义
        URG Urgent: 紧急位, URG=1,表示紧急数据
        ACK Acknowledgement: 确认位, ACK=1,确认号才生效
        PSH Push: 推送位, PSH=1,尽快地把数据交付给应用层
        RST Reset: 重置位, RST=1,重新建立连接
        SYN Synchronization: 同步位, SYN=1 表示连接请求报文
        FIN Finish: 终止位, FIN=1 表示释放连接
      • 窗口

        • 占16位: 0~2^16-1
        • 窗口指明允许对方发送的数据量
        • 确认号是500,窗口大小1000,则501-1500是可以接收的
      • 16位校验和

      • 16位紧急指针

        • 紧急数据(URG=1)
        • 指定紧急数据在报文的位置
      • TCP选项(可选)

        • 最多40字节
        • 支持未来的拓展
      • 填充

5.4 TCP可靠传输的基本原理

  • 停止等待协议

    • 无差错的情况
    • 出差错的情况
      • 发送的消息在路上丢失了
      • 确认的消息在路上丢失了
      • 确认的消息很久才到
      • 超时重传
      • 超时重传计时器
        • 每发送一个消息,都需要设置一个定时器
    • 优缺点
      • 停止等待协议是最简单的可靠传输协议
      • 停止等待协议对信道的利用效率不高
  • 连续ARQ协议

    • ARQ(Automatic Repeat reQuest:自动重传请求)
    • 既然单个发送和确认效率低,可不可以批量发送和确认?
    • 滑动窗口
      • 固定窗口内的字节批量发出,确认几个窗口就向后滑动几个
    • 累计确认
      • 只要收到某个消息的确认,那么这个消息之前的消息都确认了

5.5 TCP协议的可靠传输

  • TCP的可靠传输基于连续ARQ协议
  • TCP的滑动窗口以字节为单位
  • 滑动窗口
    • 【已经确认的字节序号】-【窗口】-【不允许发送的字节序号】
    • 窗口中的字节数据:已发送未确认+可用窗口
    • 如果没有按顺序收到窗口开始的确认,只收到中间的确认消息,窗口不滑动,执行超时重传
    • 选择重传
      • 选择重传需要指定需要重传的字节
      • 每一个字节都有唯一的32位序号
      • 存储在TCP选项(可选)
      • 最多40个字节,序号展4个字节,最多10个序号,每个序号表示的某段的起止位置,分段传输

5.6 TCP协议的流量控制

  • 流量控制指让发送方发送速率不要太快
  • 流量控制是使用滑动窗口来实现的
  • 流量控制流程
    • 窗口(rwnd)指明允许对方发送的数据量,Receiver window
    • 序号(seq)用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。如果将字节流看作在两个应用程序间的单向流动,则TCP用序号对每个字节进行计数。序号是32bit的无符号数,序号到达232-1后又从0开始。sequence
    • 确认序号(ack) 是上次已成功收到数据字节序号加1。只有ACK标志位为1时确认序号字段才有效。acknowledgement
    • 确认位(ACK) Acknowledgement: 确认位, ACK=1,确认号才生效
    • 发送方:发送100字节的数据(seq=1, DATA)
    • 发送方:发送100字节的数据(seq=101, DATA)
    • ->接收方:确认200字节的数据,并告诉对方窗口为300(ACK=1, ack=201, rwnd=300)
    • 发送方:发送100字节的数据(seq=301, DATA)
    • 发送方:发送200字节的数据(seq=401, DATA)
    • ->接收方:确认300字节的数据,并告诉对方窗口为0(ACK=1, ack=601, rwnd=0)
    • ->接收方想再次接受数据需要发送窗口大小给发送方
    • 如果这个窗口调整请求出错了会产生死锁吗
    • 坚持定时器来避免死锁的情况
  • 坚持定时器
    • 当接收到窗口为0的消息,则启动坚持定时器
    • 坚持定时器每隔一段时间发送一个窗口探测报文

5.7 TCP协议的拥塞控制

  • 一条数据链路经过非常多的设备
  • 数据链路中各个部分都有可能成为网路传输的瓶颈
  • 拥塞控制 VS 流量控制
    • 流量控制考虑点对点的通信量的控制
    • 拥塞控制考虑整个网络,是全局性的考虑
  • 拥塞判断:报文超时可以认为是拥塞
  • 拥塞控制算法
    • 慢启动算法
      • 由小到大逐渐增加发送数据量
      • 每收到一个报文确认,就加一,例如:1 2 4 8 16 (指数增长)
      • 慢启动阈值(ssthresh)
    • 拥塞避免算法
      • 维护一个拥塞窗口的变量,大于慢启动阈值
      • 只要网络不拥塞,就试探着拥塞窗口调大,17 18 19
      • 最大限度的利用管道

5.8 TCP连接的建立

  • TCP标记:占6位,每位各有不同意义
标记 含义
SYN Synchronization: 同步位, SYN=1 表示连接请求报文
ACK Acknowledgement: 确认位, ACK=1,确认号才生效
FIN Finish: 终止位, FIN=1 表示释放连接
seq sequence,序号(seq)用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。32位
ack acknowledgement,确认序号(ack)是上一次已成功收到的数据字节序号(seq)加1。标识期望发对方发来的序号是它的值,只有ACK标志位为1时确认序号字段才有效。32位
  • 三次握手建立TCP连接的过程
    • 接收方:监听
    • 发送方:SYN=1, seq=x
    • 发送方:同步已发送
    • 接收方:SYN=1, ACK=1, seq=y, ack=x+ 1
    • 接收方:同步已接受
    • 发送方:ACK=1, seq=x+ 1, ack=y+1
    • 发送方:建立连接
    • 接收方:建立连接

  • 为什么需要三次握手
    • 避免已经失效的连接请求报文传送到对方, 引起错误
    • 避免两次建立连接时多次连接的情况
    • 第三次握手时,发送方可以检查是否已经发起了第三次,如果已经发起了就忽略其它超时的连接

  • TCP三次握手
    • 使用TCP协议进行通信的双方必须先建立连接,然后才能开始传输数据。为了确保连接双方可靠性,在双方建立连接时, TCP协议采用了三次握手策略。
    • 第一次握手:客户端发送带有SYN标志的连接请求报文段,然后进入SYN SEND )状态,等待服务端的确认。
    • 第二次握手:服务端接收到客户端的SYN报文段后需要发送ACK信息对这个SYN报文段进行确认。同时,还要发送自己的SYN请求信息。服务端会将上述的信息放到一个报文段(SYN+ ACK报文段)中,一并发送给客户端此时服务端将会进入SYN RECV状态。
    • 第三次握手:客户端接收到服务端的SYN+ ACK报文段后,会想服务端发送ACK确认报文段,这个报文段发送完毕后,客户端和服务端都进入ESTABLISHED状态,完成TCP三次握手。
  • 为什么需要第三次
    • 确认双方的收发能力,一共八个能力:自己的收发和对方的收发
    • 第一次:服务端能知道客户端的发送和自己的接收能力正常
    • 第二次:客户端能知道服务端的接收(第一次)和发送能力和自己的发送(第一次)能力和接收能力都正常
    • 第三次:服务端能知道客户端的接收(第二次)和自己的发送(第二次)能力正常

5.9 TCP连接的释放

  • TCP标记:占6位,每位各有不同意义
标记 含义
SYN Synchronization: 同步位, SYN=1 表示连接请求报文
ACK Acknowledgement: 确认位, ACK=1,确认号才生效
FIN Finish: 终止位, FIN=1 表示释放连接
seq sequence,序号(seq)用来标识从TCP发端向TCP收端发送的数据字节流,它表示在这个报文段中的的第一个数据字节。32位
ack acknowledgement,确认序号(ack)是上一次已成功收到的数据字节序号(seq)加1。标识期望发对方发来的序号是它的值,只有ACK标志位为1时确认序号字段才有效。32位
  • 四次释放

    • 四次释放TCP连接的过程
      • 发送方:FIN=1,seq=u
      • 发送方:释放等待状态(FIN-WAIT-1)
      • 接收方:ACK=1,seq=v,ack=u+1
      • 发送方:释放等待状态(FIN-WAIT-2)
      • 接收方:关闭等待状态(CLOSE-WAIT)
      • 接收方:因为是被动关闭可能有未发出的数据需要继续完成发送
      • 接收方:FIN=1,ACK=1,seq=w,ack=u+1
      • 接收方:最后确认状态(LAST-ACK)
      • 发送方:ACK=1,seq=u+1,ack=w+1
      • 发送方:等待计时(TIME-WAIT)
      • 接收方:关闭状态
      • 发送方:关闭状态
    • 等待计时器
      • 等待时间:2MSL
        • MSL(Max Segment Lifetime): 最长报文段寿命
        • MSL建议设置为2分钟
      • 为什么需要等待2MSL?
        • 确保发送方的ACK可以到达接收方
        • 最后一个报文没有确认
        • 接收方在 2MSL时间内没有收到,则接收方会重发确认释放请求数据报
        • 确保当前连接的所有报文都已经过期

5.10 套接字与套接字编程

  • 使用端口(Port)来标记不同的网络进程,端口(Port)使用16比特位表示(0~65535)
  • 网络套接字
    • 𝐼𝑃: 𝑃𝑜𝑟𝑡—— 套接字
    • 套接字(Socket)是抽象概念,表示TCP连接的一端
    • 通过套接字可以进行数据发送或接收
    • TCP连接由两个套接字组成:TCP={ 𝑆𝑜𝑐𝑘𝑒𝑡1: 𝑆𝑜𝑐𝑘𝑒𝑡2}= { {𝐼𝑃: 𝑃𝑜𝑟𝑡} { 𝐼𝑃: 𝑃𝑜𝑟𝑡} }
    • 客户端 –TCP连接—服务端
    • 服务端
      • 创建套接字
      • 绑定(bind)套接字
      • 监听(listen)套接字
      • 接收&处理信息
    • 客户端
      • 创建套接字
      • 连接套接字
      • 发送信息
  • 客户端-服务端编程
    • Java、Pathy
  • 网络套接字 VS 域套接字
    • 域套接字:域套接字文件,不会经过tcp/ip协议簇,单机跨进程建议使用
    • 网络套接字:单机和跨机都会在tcp/ip协议栈走一圈,单机跨进程不建议使用

6.应用层

6.1 应用层概述

  • 传输层以及以下的层提供完整的通信服务
  • 应用层是面向用户的一层
  • 已有的应用层软件 ,面向传输层的编程
  • UDP
    • 多媒体信息分发
      • 视频 语音 实时信息
  • TCP
    • 可靠消息传输
      • 金融交易 可靠通讯 MQ

6.2 应用层主要功能

  • 应用进程的报文类型(请求报文、应答报文)
  • 报文的语法、格式
  • 应用进程发送数据的时机、规则
  • 定义应用间通讯的规则

6.3 DNS服务详解

  • DNS(Domain Name System: 域名系统)

    • 域:Domain,网络端,自治域
    • 名:Name,IP地址
  • 主机的进程:Web 服务、网络存储服务、远程调用服务、邮件服务

  • IP地址+端口:14.215.177.39:80 、14.18.245.164:25、161.23.37.215:8810

  • DNS的功能

    • 使用域名帮助记忆
      • 点分十进制转为人容易记忆的单词
      • 域名–>DNS服务–>IP
  • 域名详解

    • 域名由点、字母和数字组成

    • 点分割不同的域

    • 域名可以分为顶级域、二级域、三级域

      • 例如 :www(三级域).taobao(二级域).com(顶级域)
      • 顶级域
        • 国家
          • cn:中国
          • us:美国
          • uk:英国
          • ca:加拿大
        • 通用
          • com:公司
          • net:网络服务机构
          • gov:政府机构
          • org:其它组织机构
      • 二级域
        • qq、taobao、baidu、alibaba、aliyun、amazon、google、facebook

  • 域名服务器

    • 一般由国际或者机构搭建
    • 查询过程
      • 本地查询,有就返回
      • 没有去查根域名服务器
      • 根域名服务器告诉去查哪一个顶级域名服务器
      • 顶级域名服务器查到后告诉哪一个域名服务器
      • 如果域名服务器没找到会返回根域名服务器再次查找

  • DNS域名解析

    • 通常我们访问一一个网站,使用的是主机名或者域名来进行访问的。因为相对于IP地址(一组纯数字),域名更容易让人记住。但TCP/IP协议使用的是IP地址进行访问的,所以必须有个机制或服务把域名转换成IP地址。DNS服务就是用来解决这个问题的,它提供域名到IP地址之间的解析服务。
    • 用户输入-浏览器-域名查询-获取IP-发送请求-web服务器-回传网页内容-浏览器-渲染-用户
  • DNS解析流程

    • 就近原则
    • 本机host文件
    • 本机dns服务
    • 远程13台根域名服务
    • 转发模式

6.4 DHCP协议详解

  • DHCP是什么
    • DHCP(Dynamic Host Configuration Protocol: 动态主机设置协议)
    • DHCP是一个局域网协议
    • DHCP是应用UDP协议的应用层协议
  • DHCP的功能
    • 即插即用联网
      • 临时IP,内网地址,转换为外网
      • 租期,租期到了会回收
  • DHCP的工作机制
    • DHCP服务器监听默认端口: 67
    • 主机使用UDP协议广播DHCP发现报文
    • DHCP服务器发出DHCP提供报文
    • 主机向DHCP服务器发出DHCP请求报文
    • DHCP服务器回应并提供IP地址

6.5 HTTP协议详解

  • HTTP是什么

    • HTTP(HyperText Transfer Protocol: 超文本传输协议)
    • 超文本: “超级文本”, “带超链接文本”,“富文本”
    • http(s)://<主机>:<端口>/<路径>,例如:https://www.baidu.com/
    • HTTP协议是可靠的数据传输协议
      • Web内容:文本 图片 文件 动图 音频 视频
    • C/S: 客户端—>HTTP协议—-> 服务端
  • Web服务器

    • 硬件部分 :阿里云虚拟服务器、迷你计算机

    • 软件部分:Apache、Nginx

      • Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
      • Apache(音译为阿帕奇)是世界使用排名第一的Web服务器软件。它可以运行在几乎所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用,是最流行的Web服务器端软件之一。
    • 工作机制

      • 接受客户端连接
      • 接收请求报文
      • 处理请求
      • 访问Web资源
      • 构造应答
      • 发送应答
    • HTTP请求方法

      • GET:获取指定的服务端资源
      • POST:提交数据到服务端
      • DELETE:删除指定的服务端资源
      • UPDATE:更新指定的服务端资源
      • PUT
      • OPTIONS
      • PATCH
      • HEAD
      • TRACE
    • HTTP指定资源

      • 在地址中指定
      • 在请求数据中指定
    • HTTP请求报文

      • [请求方法] [请求地址] [HTTP版本]
      • [请求头]
      • [请求内容]
    • HTTP应答报文

      • [HTTP版本] [状态码] [状态解释]
      • [应答头]
      • [应答内容]
    • HTTP应答状态码

      • 状态码 含义
        200299 成功状态码
        300
        399 重定向状态码
        400499 客户端错误状态码
        500
        599 服务端错误状态码
      状态码 含义
      200~299 成功状态码
      300~399 重定向状态码
      400~499 客户端错误状态码
      500~599 服务端错误状态码

6.6 HTTP工作的结构

  • Web代理
    • 正向代理
    • 反向代理
  • CDN
    • CDN(Content Delivery Network:内容分发网络)
    • 多媒体内容
  • 爬虫
    • 增加网络拥塞
    • 损耗服务器资源

6.7 HTTPS协议详解

  • 敏感信息:账号密码、个人信息、账户金额、交易信息、敏感信息…
  • HTTPS(Secure)是安全的HTTP协议
  • http(s)://<主机>:<端口>/<路径>,端口:443
  • 工作机制
    • 加密模型
      • 对称加密:使用秘钥加密 ,使用秘钥解密,两个秘钥“一致”
      • 非对称加密:两个秘钥“不一致”
        • A、 B是拥有一定数学关系的一组秘钥
        • 私钥:私钥自己使用,不对外公开
        • 公钥:公钥给大家使用,对外公开
    • 数字证书
      • 数字证书是可信任组织颁发给特定对象的认证
      • 证书格式、版本号
      • 证书序列号
      • 签名算法
      • 有效期
      • 对象名称
      • 对象公开秘钥
    • SSL
      • SSL(Secure Sockets Layer: 安全套接层)
      • SSL位于传输层与应用层之间
      • 数据安全和数据完整
      • 对传输层数据进行加密后传输
    • HTTPS工作流程
      • 443端口的TCP连接
      • SSL安全参数握手
      • 客户端发送数据
      • 服务端发送数据
    • SSL安全参数握手过程
      • 客户端:随机数1、协议版本、加密算法
      • 服务端:确定加密算法、数字证书、随机数2
      • 客户端:
        • 确认证书是否有效
        • 生成随机数3
        • 使用服务器的公钥加密随机数3
      • 根据随机数1、 2、 3和相同的算法生成对称秘钥
      • 双方使用对称秘钥进行加密通信
      • 综合使用对称加密、非对称加密
      • 双方分别生成秘钥,没有经过传输

6.8 输入域名按下回车键的过程有哪些

  • 域名解析
    • 客户端生成DNS的UDP报文
    • 查询本机配置的DNS IP地址
    • UDP报文经本机协议栈发送出去
    • 网络层 数据链路层 物理层
    • 请求顶级域名服务器
  • 建立连接
    • TCP三次握手
    • SSL握手 交换秘钥
  • HTTP通信
    • GET
  • 释放连接
    • 四次挥手 结束连接

7.HTTP协议详解

7.1 浏览器背后的故事

  • http://www.basedev.cn/
  • 用户输入-浏览器-域名查询-获取IP-发送请求-web服务器-回传网页内容-浏览器-渲染-用户
  • HTTP
    • 超文本传输协议(HTTP)是一-种通信协议, 它允许将超文本标记语言(HTML)文档从Web服务器传送到客户端的浏览器
    • HTTP是- -个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展
  • Web与HTTP
    • WEB是一种基于超文本和HTTP的、 全球性的、动态交互的、跨平台的分布式图形信息系统
    • 建立在Internet上的一种网络服务,为浏览者在Internet.上查找和浏览信息提供了图形化的、易于访问的直观界面,其中的文档及超,级链接将Internet上的信息节点组织成一个互为关联的网状结构

7.2 HTTP协议的前世今生

  • 1990年10月万维网之父TimBerners-Lee最早提出了HTTP协议
  • 1991年HTTP0.9诞生
  • 1996年5月HTTP1.0发布
  • 1997年1月HTTP1.1发布
  • 2015年5月HTTP2.0提出
  • HTTP3.0,QUIC协议

7.3 透过TCP/IP看HTTP

  • TCP/IP协议族
    • TCP/IP协议其实是一-系列与互联网相关联的协议集 合起来的总称
    • 分层管理是TCP/IP协议的重要特征
  • 应用层
    • 应用层一般是我们编写的应用程序,决定了向用户提供的应用服务。应用层可以通过系统调用与传输层进行通信。如: FTP、DNS、HTTP等。
  • 传输层
    • 传输层通过系统调用向应用层提供处于网络连接中的两台计算机之间的数据传输功能。
    • 在传输层有两个性质不同的协议:TCP和UDP。
  • 网络层
    • 网络层用来处理在网络上流动的数据包,数据包是网络传输的最小数据单位。该层规定了通过怎样的路径(传输路线)到达对方计算机,并把数据包传输给对方。
  • 链路层.
    • 链路层用来处理连接网络的硬件部分,包括控制操作系统、硬件设备驱动、NIC (Network Interface Card,网络适配器)以及光纤等物理可见部分。硬件. 上的范畴均在链路层的作用范围之内。
  • 数据包的封装过程

  • http数据传输过程
    • 发送端发送数据时,数据会从上层传输到下层,且每经过一层都会被打上该层的头部信息。
    • 接收端接收数据时,数据会从下层传输到上层,传输前会把下层的头部信息删除.

8.计算机网络实践

8.1 网络嗅探工具

  • 实现流程

    • 搭建服务基本框架
    • Python操作字节序列
      • 字节序
        • 255 = 00000000,11111111
        • 大端字节序:高位在前,00000000,11111111
          • 网络,易读
        • 小端字节序:高位在后,11111111, 00000000
          • 主机,CPU对小端字节序处理效率高效
        • 计算机电路先处理低位字节效率比较高
        • 人类习惯读写大端字节序
      • 格式字符
        • %s 字符串,%d 整数,%x 十六进制,%f 浮点数
        • 格式字符 C++/Python类型 标准大小(字节)
        • B-unsigned char/整数 1
        • H unsigned short/整数 2
        • L unsigned long/整数 4
        • s char[]/字节串
    • 实现IP报文解析器

    • 实现UDP报文解析器
    • 实现TCP报文解析器
  • 网卡模式

    • 混杂模式
      • 接受所有经过网卡设备的数据
    • 非混杂模式
      • 只接受目的地址指向自己的数据
  • IP报文解析

  • TCP报文解析

  • UDP报文解析

  • 从零到一实现HTTP服务器开发

9.关于我

一个专注基础知识的十二线小码农,本着 基础,体系,实践,分享 的学习理念,在自我提升的同时分享自己的心得体会,不断完善,周而复始。

个人网站 basedev.cn

Github

BaseDev系列只整理点到为止的知识纲领,不求甚解;欲知其所以然者还得回归书本且付诸实践

10.参考

重学操作系统 | 拉钩教育

编程必备基础 | 慕课网


文章作者: Jay
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Jay !
评论
  目录