计算机网络

内容来及王道计算机考研,纯手敲。因为不考研2333,因此忽略计算部分,保留个人认为重要的计网知识点。

前言

基本概念

  • 集线器:多个节点连起来,组成计算机网络。但是最多只能有一个发送数据,不然会导致数据冲突
  • 交换机:也可以连起来多个节点,组成计算机网络。不同的是不会发生数据冲突
  • 路由器:把多个计算机网络连接起来。形成更大的网络
    • 注意和家用的路由器不同,家用的相当于“路由器+交换机+AP(接入点)”。
    • 比如你手机,电脑连接相当于交换机。而连接到外部网络相当于路由器。
  • ISP(Internet Service Provider):互联网服务提供商,让你们家路由器与整个相连,可以上网。
  • 互联网:各大ISP和国际机构组建起来,覆盖全球的互联的网络。
    • 必须使用TCP/IP通信。自己构建小范围内无所谓

计算机网络组成和功能

从组成看

  • 硬件
    • 主机(端系统):手机,电脑,互联网设备
      • 内部需要有网络适配器(网卡),用户
    • 通信设备:交换器,交换机,路由器
    • 通信链路:网线光纤
  • 软件:方便用户使用,实现资源共享。
  • 协议:规定通信规则。由软硬件共同组成(比如插了网卡才能用网,这个硬件和固件共同完成)

从工作方式

  • 核心部分
    • 为边缘部分提供服务(连通性,交换服务)
    • 由大量网络和路由器组成
  • 边缘部分
    • 直接为用户服务
    • 你的手机,电脑这些直接联网的部分和其软件

从逻辑功能看

  • 资源子网
    • 主机+软件(主机上应用程序)
  • 通信子网
    • 负责信息传输的部分总称。
    • 由 通信链路+通信设备+协议 构成(包括主机内部网络适配器/底层协议)

计算机网络功能

数据通信,资源共享,分布式处理,提高可靠性,负载均衡

电路交换,报文交换,分组交换

原理分析

电路交换:即直接物理连接进行通信,通信前需要建立链接,通信期间需要一直占据链路,速率很快。
缺点:建立连接上花费大(适合低频次大量传输,不适合互联网),线路利用率低,灵活性差(改一次很麻烦),不支持“差错控制”(无法发现传输过程中错误)

电报网络:存储转发思想。先把传输数据存储在中间结点,再根据地址转发给下一节点。和送信很像。
优点:通信前无需建立连接,线路灵活多变,不存在独占线路(利用率高),支持校验(存储时候奇偶校验之类,检查有没有问题)
缺点:长度不固定(不方便存储),长度较长时存储开销大,错误率高

分组交换:不定长数据->定长数据(解决电报网络两个缺点)
优点:电报网络全部+便于存储+开销小+错误时重传代价小
缺点:相对于报文,增加控制信息开销;相对于电路交换增加了延迟。同时传输时部分失序丢失需要去处理。

虚电路交换:先建立虚拟的连接,再按照规定好的路线发送,最后断开连接。

最终现代互联网仍然采用电路交换技术,因为虚电路交换会增加核心部分处理压力

性能分析

电路交换性能

需要先建立连接,完成后一直传输,最后释放

报文交换性能

把一个报文完全发送给传输点后断开。一层一层往后传(寄快递)

分组交换性能

把大数据变成小数据,有一个发一个

总结

电路交换报文交换分组交换
传输总时间
存储转发延迟
是否需要提前建立链接
缓存开销
差错控制
是否有序
是否需要额外控制信息
灵活性
线路利用率
答案
电路交换报文交换分组交换
传输总时间
存储转发延迟
是否需要提前建立链接
缓存开销
差错控制支持支持
是否有序
是否需要额外控制信息是(少)是(多)
灵活性
线路利用率高(多个分组不同线路发)

计算机网络分类

按照范围

  • 广域网(WAN)/城域网(MAN)/局域网(LAN)/个域网(PAN)
    • 城域网用得少,因为和局域网都用以太网技术通信。
    • 家庭路由器背后[下图],一个连广域网WAN(路由器),四个局域网LAN(以太网交换机)
    • 个域网:个域网是指围绕某个人而搭建的计算机网络,如手机热点,智能网关(智能网关连接家庭的设备,最后又连接到了局域网上)
    • 加W表示Wireless(WLAN,WPAN)

按照技术类型

  • 广播式网络/点对点网络
    • 广播:群里@某人,所有人都会接收到,最后检查分组目标地址看自己接不接收
    • 点对点:私发。只有对方接收到

按拓扑结构(逻辑结构)

  • 总线形结构/ 环形结构/星形结构/网状结构
  • 总线形结构:广播式传输,存在总线争用(只能由一个设备发数据,其它不可以发)。
    • 代表:集线器
  • 环形结构:广播式传输,用数字令牌(有令牌才可以发,按顺序用)解决总线征争用
    • 代表:令牌环网
  • 星形结构:点对点传播,中央设备根据需求转发,因此不存在总线争用。
    • 代表:以太网交换机组成的局域网
  • 网状结构:点对点传播,区别是现在中间变成了一堆节点。
    • 代表:众多路由器的广域网

使用者:专用/公用

传输介质:有线无线

性能指标

速率节点在信道上传输数据的速率。也称为数据率,比特率,数据传输速率
单位:bit/s,b/s,bps(三种等价)B/s(1B/s = 8b/ s)
带宽某信道最高的速率(数据传输速率)
吞吐量某个网络实际的数据量
时延(Delay)数据从一端传输到另一端时间
总时延 = 发送时延 + 传播时延 + 处理时延 + 排队
发送(传输)时延:节点传输到信道时间
传播时延:在信道传播时间
处理时延:路由器处理信息(转发/分析)时间
排队时延:多信息时候排队时间
往返时延(RTT)从发送数据到接收确认总时长。游戏延迟就是这个
信道利用率数据/(带宽*t)。过高堵塞过低浪费
网络利用率各个信道之和

分层结构

基本内容

OSI(Open System Interconnection)七层模型

TCP/IP模型

但实际上,教学一般用五层模型,结合二者模型出了一个五层。这样便于理解。

实体:分层结构中,实现第n层的活动元素(软件+硬件)组合,为第n层实体。
服务:下层为上层提供的功能调用,这是垂直的。通过调用接口实现。

协议三要素:语法(数据与控制信息格式),语义(干什么),同步(执行条件?时序关系)是水平的

OSI模型

应用层(第七层)实现特定的网络应用(Http)
表示层(第六层)解决信息表示不一致问题(GBK和UTF-8),实现数据转换
会话层(第五层)管理进程间通信,当通信失效可以恢复(类似断点续传)
传输层(第四层)实现端到端通信(即进程之间的通信,端:端口) 复用和分用
网络层(第三层)保证转发到目的地(1.路由与转发 2.拥塞控制(最佳路径)3.异构网络互连)
数据链路层(第二层)保证传输结果正确(1.封装成帧(定界) 2.差错控制(发现数据错)3.可靠传输(保证相对位置正确)4.流量控制 5.介质访问控制(节点什么时候可以发消息))
物理层(第一层)实现相邻节点bit传输(比如电路参数,传输含义等)

TCP/IP模型

和OSI区别

  • 有时候不一定需要格式转换和会话管理,因此TCP/IP去掉这个
  • 物理层和数据链路层不应该限制太多,因此TCP/IP去掉这个
  • 网络层不再负责保证数据可靠,顺序,流量管理,可靠运输等,而是把这部分内容交给传输层去控制。这样好处是极大的减小了路由器的负担,压力给到边缘的主机。
应用层(第四层)实现特定网络应用
传输层(第三层)实现端到端(进程间通信)通信 ,需要差速控制,流量管理等。
可提供:有连接可靠(TCP),无连接不可靠(UDP)服务
网络层(第二层)保证转发到目的地,但此时分组可能出错或者丢失。
物理层(第一层)实现节点之间数据传输

具体内容可以见下图。最底下数据链路层&物理层协议可以加一个PPP,这三个都是局域网的协议

物理层

不重要。通信可以有线无线,通道可以分频分时复用,信号弱了中继器。

会在数据链路层的数据前增加前导码,尾部加入校验码

前导码表示开始(开始前同步码发送1010循环表示节奏,后面11正式开始)

数据链路层

总览

当你学完之后对这里应该有很清晰底层原理

  • 封装成帧
    • 帧定界:确定每一帧界限
    • 透明传输:让网络层感受不到被封装了
  • 差错控制:发现并解决位错
    • 方案一:丢弃,等发送方重传帧
    • 方案二:海明编码之类纠错
  • 可靠传输:发现并解决
    • 帧丢失,帧重复,帧时序
  • 流量控制:控制发送帧频率,让接收方来得及接收
  • 介质访问控制:
    • 局域网。广播信道需要,因为多个节点抢介质,用CSMA/CD或者信道复用技术。MAC层
      • LLC(Logic Link Control)子层:与访问介质无关的部分,事实上被802.3和802.11垄断(便于向网络层提供接口)
      • MAC(Medium Access Control)子层:与访问介质有关的部分(组帧,差错检测,透明传输,介质访问控制)
    • 广域网。点对点信道不需要,因为有专属的介质。用PPP协议控制。PPP层

组帧

问题

  • 如何帧定界?让接收方确定每一帧界限
  • 如何透明传输?去除帧定界附加的信息

解决

  • 字符计数法
    • 每个帧开头,用一个定长计数表示长度
    • 问题:错一位全错了,不好用
  • 字节填充法
    • 用特殊字符表示开头和结尾
    • 问题:数据部分可能包含这个特殊字符
      • 解决:增加转译字符,在特殊字符前面加上转译字符
    • 问题:可能数据包含转译字符
      • 解决:对于转译字符也添加转译字符
  • 零比特填充法(最常用)
    • 开头部分连续六个1。对于内部每遇到连续5个1就加一个0
  • 违规编码法
    • 每一次必须跳变。而首尾不跳变,区分首尾。

差错控制

发现并解决位错

  • 检错编码
    • 奇偶校验:让这一串的“1”的个数为奇/偶
    • 循环冗余校验码(CRC):双方约定一个除数(由多项式确定),K位信息位+R哥校验位作为被除数,添加校验位后保证除法的余数为0;
      • 可检测奇数个错误,所有双比特错误。检测所有小于检验位长度的连续错误,一定概率纠错
  • 纠错编码
    • 海明编码(2k≥n+k+1)
      • 本质是分组偶校验,多个校验位可以反应出错位置
      • 纠1检2偶尔检3

可靠传输,流量控制

由多种机制协调统一共同配合

核心逻辑
滑动窗口机制

WT:允许发送的帧 ,不在范围内不许发
WR:允许接收的帧,不在范围内直接丢弃
接收方通过确认机制,控制发送发窗口向前面滑动

确认机制

确认帧:收到i帧,没检测出错误,就返回ACK_i
否定帧:收到i帧,检测出问题,就返回NAK_i

重传机制

超时重传:超过一定时间,请求方没收到ACK_i,就要重传
请求重传:收到NAK_i,才重传

帧编号

对n bit帧编号,要求WT+WR≤2n ,以此保证唯一性。

不同协议对比

停止等待协议:就是发一个收一个,有错误就停止等待,等超时了没收到确认帧重发
后退N帧协议:就是一次发一堆,但只返回最后一个按顺序收到的确认帧,表示之前的没问题。要重发就重发这收到ACK_i和它之后的,没收到确认帧就把这个窗口都再传。
选择重传协议:就是一次发一堆,需要返回每一个帧的确认帧或否定帧,然后客户端根据超时或者否定帧重发特定的。

滑动窗口机制确认机制重传机制帧编号
停止等待协议(S-W)WT=1 WR=1(其实没有用滑动窗口,但便于理解)确认帧超时重传1bit WT+WR≤2n
后退N帧协议(GBN)WT>1 WR=1确认帧(累计确认,仅返回最后一个按顺序收到的ACK_i)超时重传(重传之前i帧和它之后的帧)WT+WR≤2n
选择重传协议(SR)WT>1 WR>1 且 WR≤WT确认帧,否定帧超时重传,请求重传WT+WR≤2n

S-W停止等待协议时延

GBN和SR协议时延

介质访问控制

信道划分,随机访问(ALOHA , CMSA , CMCS/CD ,CMCS/CA),轮询访问

  • ALOHA:不听就说,无监听无碰撞检测。每次发一个帧,目的地收到就继续发
    • 纯ALOHA:有就发,冲突等等发
    • 时隙ALOHA(S-ALOHA):只能在时间槽开始时候发,避免中间冲突。
  • CSMA:先听再说,无碰撞检测。先听下没有其他通信量再传输数据
    • CS: Carrier Sense载波监听 MA:Multiple Access, 多点接入
    • 非坚持。听到外面忙,就等等
    • 1-坚持。一直监听,直到不忙
    • p-坚持。若空闲以P概率发数据,(1-P)概率等个单位时间再发数据。单位时间是最大传输时延2倍。可以认为是非坚持和1-坚持折中,可以动态调整应对不同情况。
  • CSMA/CD:先听再说,碰撞检测。用于总线型局域网中,传输介质是线。
    • CD:Collision detection,碰撞检测
    • 当多个主机同时发数据,会导致碰撞。
    • 因此这个在发出信号后进行冲突检测,发现碰撞(波形看出来)后退避一段时间,并发出干扰波形,让其他站点知道碰撞了等一等。
    • 很显然无线网用不了,因为没办法碰撞检测。同时,你没有办法感受到其它所有站点存在(因为信号范围有限),即“隐藏站”,那先听都用不了。
  • CSMA/CA:先听再说,尽量避免冲突。无线局域网(WiFi) 用于802.11无线局域网
    • CA:Collision Avoidance,碰撞避免
    • 在信道空闲时候,如果要发数据,就预约信道,通过AP告诉其他站点要传输数据和传输时间,让他们在这期间别发消息。

局域网

覆盖小,错误延迟低,各个节点之间数据传输是帧

支持单播(一对一发帧),广播(一对全部),多播(一对一部分)

令牌环网(已解散)

环形,同轴电缆,令牌协议(只有有token的节点才可以发送帧,发送完给下一个节点)

以太网(802.3)

集线器:CSMA/CD(存在信道争用)
交换机:对于交换机内部链接的网,要么半双工(CSMA/CD),全双工(双向工作,不需要争信道)

无线局域网WIFI(802.11)

CSMA/CA协议

理论所有wifi覆盖范围内的设备都可以收到信息,只是一般网卡看到最前面的MAC地址发现不是自己就忽视掉。所以咖啡馆饭店wifi别随便连。

硬件架构

RAM:缓冲进来出去的帧
MAC:物理地址,对于每台以太网适配器是唯一的。存在ROM芯片里面
以太网网适配器:负责接收/发送帧(看类型),实现链路层物理层功能,帧缓冲

MAC

注意和MAC地址不一样。这里IP层直接到MAC层到物理层,是因为数据链路层中的LLM层基本写死了,所以直接用MAC代替(之前提到过数据链路层可以分为LLM和MAC)

这个层会把网络层的数据加头加尾,前面加MAC地址,后面加CRC(循环冗余校验)码
最后在物理层,前面加入前导码表示开始(开始前同步码发送1010循环表示节奏,后面11正式开始),后面采用违规编码法(没有跳变就表示结束)结束。

单播帧,广播帧

交换机:数据传过来,有脑转发
集线器:数据过来,无脑转发

VLAN

如果交换机多了,连接设备多。那么广播一次传播的太多了,因此划分一些,让这个广播帧不能传出去,或者只传到指定的分组。
一个VLAN就是一个广播域,有一个VID。
分组可以按照接口,MAC号或者IP。校园网隔离就是(AP隔离),同一WIFI设备之间无法互相连接

PPP

点对点的协议,两点直连的专线网络。必须要全双工协议(不然别人一直发你回不了消息)

特点:此时相当于两台路由器互联,你就不需要寻址(MAC)和解决信道冲突问题,直接建立了联系。但是也不能谁都可以连,因此加入了身份认证。既然两个都互联了,我这边(cn)你那边(us),我把我的访问给你,你访问完给我,这样就可以当VPN用

过程是,先建立连接,确定一些基本的数据(直到是啥,怎么验证),然后验证身份(有些有,比如VPN验证),然后网络层协议(分配IP地址什么的),接着就可以传输数据,最后可以终止。

数据格式,可以按照MAC对比着记。

网络层

网络内每个设备都有ip地址,这一层实现主机到主机转发。主要作用是把网络层前面加上自己和目的地ip地址,便于转发。

功能

  • 异构网络互连
    • 比如说前面PPP协议的,和MAC里的比如CSMA/CD协议的设备连接。这样就忽视了底层。
    • 在这里,路由器可以被称为网关(gateway)
  • 路由与转发
    • 路由:多台路由器,通过路由协议,生成路由表。
    • 转发:根据路由表,指定转发表,选择最好的路径转发出去。
  • 拥塞控制
    • 作用:防止负荷过高过低
    • 方法:开环控制(提前设计好防堵塞策略),闭环控制(动态检测变化,改变策略)

整体的传输过程

只有网络号
166.1.0.1(H1)->200.1.1.2(H7) 跨路由器166.1.0.1(H1)->166.1.4.4(H6) 同路由器
1. 发现网络号不是内部的,交给网关处理。注意:局域网内部MAC协议传输,所以你需要知道默认网关MAC号
2.通过ARP协议,通过ip查出网关MAC地址,加上路由器MAC形成MAC帧,传输给路由器166.1.0.5
3.通过转发表,检查目的网络ip地址。查表查到有,从B0转发出去,MAC目的地址修改为C0的(这里估计是不同路由器之间仍然用的以太网协议,所以需要MAC地址,PPP不需要)
4.200.1.1.1检查,发现网络号一致。那么查表,封装MAC帧(MAC地址通过ARP获得),下行
5.最后到了最下面,是个交换机。那么通过查出来MAC地址后,只会给H7发。
注意:全程原地址和目的地址的IP不变,因为封装好了。
1. 开始发送时候,检查出同属于一个网络号(前面的部分一样),因此不需要给网关转发
2. 通过ARP,查询出H6的MAC地址,直接封装H6的MAC地址,给交换机
3.交换机最后转发,到了集线器。理论都会收到,但是每个主机都对MAC检查,只有H6匹配,那么H5忽视这个帧,H6接收成功
注意:内部传输数据,不需要经过网关。
新增子网掩码

此时转发表需要多一列子网掩码

H1->H3H1->H7
1. H3地址用子网掩码后,比较自己网络号。发现不是同一个子网。向上转发到交换机,在往上到学校服务器
2. 学校服务器用子网掩码比较后,确认是自己的网路号,于是ARP根据规则,找出要转发到的交换机的MAC地址,转发数据。
3.接着交换机子网掩码比较,是自己手下的,于是ARP找到MAC号,传给H3。
注意,H7是没有子网划分网络,但过程依旧可以走,因为新协议会兼容旧协议。因此,在有子网掩码路由器就用子网掩码,没有就不用

如果不在范围内,有一个默认路由,就会转发到互联网中去了。

NAT转换
手机1->手机2
1. 传输层封装端口,自己端口9855和目标对外暴露端口4096。这里是要看外网展示出来的端口
2. 网络层封装ip地址,自己的为192.168.3.48/24,远程的为66.211.88.55(远程不可能内网ip不然找不到了)
3.接着下面就是传输层,根据默认网关IP对应出来MAC地址,找到默认网关,再一层层传输过去
4.NAT路由器收到后,完成内外网端口号之间的转换。接着修改ip变成外网ip,端口也改(因为修改ip,所以NAT路由器深入到了传输层
5.经过互联网中间转发,最后到达左侧NAT路由器,通过NAT表,解析出ip,端口,写回去
6.再通过ip与MAC转换,找到目标的设备。

IPV4

基本格式

版本:IPV4/IPV6
首部长度:字面意思
总长度:数据和头全部长度
标识,标志,片偏移:用来完成分片。标识表示是哪个块,标志告诉后面还有没有快,片偏移告诉在当前块头往后多少位置。
TTL:告诉最多可以经过几个路由器,经过一个就-1
协议:TCP/UDP
首部校验和:校验头部

分类方案

被分为ABCD类,网络号是分配的,后面的主机号可以在自己的网络内分配。

比如说分配了166.1.x.x 路由器是166.0.1,那其他连路由器设备可能是166.1.0.2
为了保证发送到路由器,要设置默认网关,直到发到哪里是路由器

特殊IP
网络号主机号举例作为源地址?作为目的地地址?代表含义
Y(随意)全0166.1.0.0××表示整个网络本身,只能用于路由表,转发表
Y全1166.1.255.255×广播给这个整个Y网络数据包
全0Y0.0.0.1×表示来自同一个网络的,因此只用告诉主机号
全0全00.0.0.0×自己,全0访问地址和全1请求地址组合使用,告诉同网自己没ip,求分配
1全1255.255.255.255×给同一个网络全部的节点广播
127非全0全1127.0.0.1表示主机自己

学会了?检测一下

子网划分/子网掩码
  • 原因:实际上一个子网没这么多设备,比如166.1.x.x,后面6w多设备用不完,因此把主机号前k位作为子网号,剩下的n-k作为主机号。这样划分了2k个子网。
  • 结构:子网划分后,ip三级结构为<网络号,子网号,主机号>
  • 表示方式:那此时怎么快速得到网络号呢?子网掩码 & 运算下就行。比如166.1.x.x的2位为子网号,那子网掩码就是166.1.196.0。也可以用/表示,比如/18就是前18个1,后面全0.
    • 此时,属于同一个网络只有网络前缀(网络号+子网号)相同。
  • 默认路由:0.0.0.0。查表的保底,总能找到的。
  • 默认子网掩码:ABC类的默认子网掩码就出来了。
  • 入口与转发处相同:不转发,扔了

学会了?检测一下

CIDR(无分类编码)
  • 原因:不同ip需求不同,根据需求精确划分长度。
  • 特点:
    • 网络前缀可变长,用例如128.14.32.0/21表示,此时后11尾主机就可以自己用了
  • 子网划分方式:
    • 定长子网划分:每个子网IP地址块大小相等。(子网掩码一样)
    • 变长子网划分:IP块大小可以不同(子网掩码不同)
  • 路由聚合
    • 很多个网都要从一个接口出,就可以聚合成一个,比如:
    • 128.14.32.128/28,128.14.32.128/29,128.14.32.128/30发过来的数据都要从G1出,那可以聚合成128.14.32.128/27,这样检查快多了。
    • 最长匹配:都能匹配那肯定去匹配的多的,因为更细分。
    • 可能问题:引入无效地址,不过影响不大

此时CIDR块就很像哈夫曼树,因为前缀一样

NAT(网络地址转换)
  • 原因:ip又不够了
  • 端口号:
    • 本来用在传输层,一般是一个进程暴露出来的。
    • 现在在局域网内,与外界沟通都是路由器的ip。此时用路由器的ip+一个端口表示你局域网内一个设备的端口(NAT转换)
  • 私有ip:
    • 只允许内部使用:10.0.0.0~10.255.255.255 172.16.0.0~172.31.25.255 192.168.0.0~192.168.255.255
    • 私有ip局域网内部自己看着分配
    • 私有ip在局域网内唯一
  • 全球Ip(外网ip)
    • ISP提供,全球唯一
    • 一个局域网内,与外部通信使用的统一IP地址

理解了?

ARP(地址解析协议)

Address Resolution Rrotocol

  • 作用:局域网内部,完成ip地址与mac地址的转换
  • ARP表:记录这种转换的表
    • 每个主机,路由器都有自己的ARP表
    • 需要定期更新
  • 过程:
    • ARP请求分组(在ip层完成):
      • 内容:我是谁(ip,mac),我要找谁(ip/mac)
      • 请求格式:广播帧(数据链路层最终完成)。(帧ip中,目的MAC地址全1,ip也全1表示问所有人,源地址Y,表示就是要找所有人,当然也可以问指定ip)
      • 结果:局域网内所有人收到后,记录下来他的信息(ip,mac),并准备回复
    • ARP回复请求(在ip层完成):
      • 内容:自己的ip和mac地址
      • 回复格式:单播帧(数据链路层最终完成)。(记录自己ip和地址ip,只回复给刚问的)
      • 结果:收到信息,记录下来他人的信息(ip,mac)
DHCP(动态主机配置协议)
  • 基本概念
    • 作用:给刚接入的主机动态分配ip地址,默认网关,子网掩码
    • 客户端/服务器(C/S)模型
      • 客户:谁需要配置
      • 服务器:谁提供配置信息。家用路由器可以提供;也可以有多台。
    • 分层:应用层,会用到传输层UDP
    • 作用范围:自己的子网
    • 过程:
      • DISCOVER
        • DHCP包装自己的MAC,UDP包端口(这个服务一般默认端口,本机68目的地67),网络层目的IP全1,源IP全0(表示询问,也确实不知道自己是啥),MAC帧全1表示问别人和自己MAC
        • 非DHCP服务器:到传输层UDP看到67端口就知道不是找自己的,扔了
        • DHCP服务器:收到了,准备回复
      • OFFER
        • DHCP返回给提供的ip租用期子网掩码默认网关。剩下看着回,注意只需要单播帧回去就行。
      • REQUEST
        • DHCP内包装自己的MAC接受的ip。注意数据在链路层还是广播帧形式,因为可能有多个DHCP服务器,在你DISCOVER时候,多个人给你发消息,你回复所有人,你最后只接受的哪一个ip。
      • ACKNOWLEDGE
        • DHCP服务器回复确认信息,就是再确认一遍ip租用期子网掩码默认网关。这里还是单播帧回去。

路由算法与路由协议

相互配合,让路由器之间生成路由器转发表

  • 路由算法
    • 静态路由,手动配置不变
    • 动态路由:距离-向量路由算法(用于RIP协议),链路状态路由算法(用于OSPF协议),层次路由
      • RIP:用跳数衡量距离,超过一定跳数认为不可达。没过一段时间或者有断开,立即更新。好处是配置简单,坏处是收敛慢(定期更新),扩展差(跳数),不智能(真的只看跳数可以?)
      • OSPF:收集其它的路由器链路状态信息,通过djs算法计算最小路径。
  • 路由协议
    • 协议:RIP,OSPF,BGP
    • RIP,OSPF用于自治系统内部网关,BGP用于边界网关。

IP 多播

就是前面提到的,单播(一对一),广播(一对全部),多播(一对多),可以节省网络带宽
之前提到的D类地址就是多播地址,范围224.0.0.0~239.255.255.255
一个主机可以同时有单播地址(固定ip)和多播地址(群号,可动态调整)

假设要看直播,多播路线

  1. 加入多播组(IGMP)
    • 电脑设备向上告诉路由器,需要加入这个多播组,路由器就会记录你的电脑加入了这个多播组,并向上通知
  2. 数据投递
    • 现在直播数据回来,就根据之前记录的,把这个数据给需要的路由器。到达局域网后,找到那个设备转回去(多播mac)

移动IP

问题:你在视频电话,先用的流量后用的热点,要求通信不可以断。

  • 初始状态:运营商给你一个ip
  • 切换WIFI时:
    • 切换后,获得一个新的ip,作为转交地址。
    • 向上汇报,我之前的ip地址是,我现在的新ip是
    • 然后又建立好了链接

网络层设备

冲突域:可能发生数据碰撞

冲突域广播域
集线器xx
交换机x
路由器

传输层

只有TCP和UDP协议

  • 端口的作用
    • 完成进程间通信,标识进程
      • 需要表明:协议(TCP/UDP),自身端口,目标ip:端口
        • TCP和UDP协议的端口号是相互独立的
      • 套接字(socket):封装一下
        • 客户端:socket() -> bind()//绑定接听端口和ip -> listen() -> accept() -> recv()/send() ->close()
        • 客户端:socket() -> conntct() -> send()/recv() ->close()
    • 端口分类
      • 服务器端口:
        • 0~1023:被用了,只能用于熟知的重要应用
  • 功能
    • 实现端到端通信(进程之间通信)
    • 复用和分用
      • 多个进程都用传输层的TCP/UDP协议
      • TCP/UDP根据端口,分给进程
    • 差错控制
      • TCP:检测出错误就丢弃,通知重传
        • 面向有连接传输服务,保证数据完整,但是开销大,实时性差
          • 有连接:传输前通知别人要连接了,结束也告诉
          • 可靠的:接收方返回确认消息,确认哪些数据被接受了
        • 用于:传文件
      • UCP:检测出错误就丢弃,不通知重传
        • 面向无连接传输服务,可能出错,但是速度快
          • 无连接:直接发,啥也不问
          • 不可靠的:不知道有没有接受
        • 用于:直播,视频通话
TCPUDP
核心逻辑检测出错误就丢弃,通知重传检测出错误就丢弃,不通知重传
连接性有连接无连接
可靠性可靠传输不可靠
有序性有的,中间有确认序号的方式没有,乱的
传输速度
连接对象一对一一对一,一对多
首部开销20-608
传输方式字节流,多个tcp请求可以拼接成一个大的面向报文,一大块(超过最大就报错)
使用场景文件,邮件等需要可靠传输的地方需要实时的应用(IP电话,会议,直播)
携带大小MSS(最大段长)1000B0-65535B(实际考虑到网络层限制只能到65515)

UDP

  • UDP头小,只有8字节
  • 每次都传输一个整的报文,不支持拆分(过大就不要了)
  • 无连接不可靠,不支持拥塞控制(因为看不出来2333)
  • 支持一对一传输(借助单播),一对多(借助广播255.255.255.255多播)

UDP检验:检测全部数据。方法:加入伪头部,计算校验和(假发结果全1),去除头部

TCP

数据格式

序号(seq):开始的“序号”是自己设置的,不一定从0开始。后续的就按照字节顺序加。
确认号(ack):返回确认,在该序号之前的全部字节已经正确收到。(有点像退后n步那种感觉。)
ACK:表示确认号(ack)是否有效,1有效,0无效。
首部长度:表示TCP首部长度,单位是4B,因此必须是4B整数倍
紧急位(URG):本地优先发送
推送为(PSH):服务器优先返回
复位位(RST):表示差错
同部位(SYN):表示正在请求连接或者接受请求连接(只在第一二次握手
终止位(FIN):表示自己要单方面结束链接了(只在发起挥手的时候
接收窗口:接收方表示自己还可以接收多少字符(用于流量控制)
校验和:和UDP几乎一样,伪头部不一样长
选项:指定最大段长(MSS),方便服务器方便设置缓冲区。

建立连接(三次握手)
  • 第一次
    • SYN=1(同步过程中),seq = x(表示随便取一个开始),ACK = 0 (表示自己的ack无效)
  • 第二次
    • 听到后,SYN=1(同步过程中),ACK = 1(现在开始ack有效), ack = x + 1(之前的seq收到,从后一个开始),seq = y是服务器进程给自己的其实序号(自己编一个)
  • 第三次
    • SYN= 0(同步完了),ACK = 1(有效) ,seq = x + 1(得到确认接收),ack = y+1服务器接受了

注意,第一二次握手,不可以携带数据,第三次可以携带数据。同时,第一二次固定消耗一个seq序号,而第三次,如果不携带数据,不消耗序号

所以客户端一次往返就可以发数据,而客户端要1.5次往返才可以发数据

注意这里,有哪些状态,很好记。

数据传输

全双工,互相传输

即告诉自己接收到哪了,又传输数据。一个tcp干了好多事

释放连接(四次挥手)

为什么有四次呢?比如说有一个人先传完了,说不传了,那另一边就表示确认。之后变成单向传输。单向传输完后,也要再来一次,所以一共是四次。

FIN=1表示要结束一段关系。挥手13也要消耗一个数据

一堆问题
  • 为什么前两次握手不带数据?
    • 确保连接可靠性,初期还不清楚是否可靠
    • 放置SYN攻击,为了维护这些数据浪费大量资源。
  • 第三次握手可以带数据原因?
    • 已经确认了基本收发能力没有问题,已经比较可靠了。减少开销,提高效率。虽然实际上也不会有很多数据,基本都是之后再带大量数据
  • 为什么要三次握手?
    • 前两次握手保证基本的收发能力都是正常的。
    • 防止第一次请求时候报文抵达过慢,第二次发的一次握手都到了之后才到。导致服务器认为开起了新对话,白白的浪费资源。
    • 如果有了第三次握手,再遇到上面情况。那么返回第二次握手信息给客户端后,客户端就知道这有问题,不回复。因此,过一段时间,服务器没收到第三次握手就认为请求无效了,避免了建立连接(建立连接要维护很多东西浪费空间)
  • 第一次握手断网了怎么办?
    • 完全没事,过一段时间客户端重发就好了
  • 第二次握手断网了怎么办?
    • 客户端就会重试,重新发第一次握手的syn包。指数退避,防止太频繁的。如果很多次没有收到,客户端就放弃连接。
    • 服务器重试,一直尝试重发第二次握手的包,同样指数退避。太多次就把这个丢了,反正没建立连接。服务器可以判断出是否是重试的包,如果是就很快重发第二次握手包。
  • 第三次握手断网了怎么办?
    • 此时,客户端认为自己发送成功,就正常发消息。
    • 服务器可能认为自己二次握手的消息没到,一直尝试重发,如果一段时间没收到就关闭SYN-RCID状态。
    • 客户端多次没收到,发一个探测包之类的,如果亖了那就知道断了。
  • 为什么四次挥手
    • 允许半关闭状态,允许单方面去发数据,如果一方没发完的话。这样保证双方数据都可完整发送
  • TCP怎么保证传输可靠性?
    • 确认应答机制(ACK),超时重发,流量控制(接收窗口大小),拥塞控制机制(逐渐启动,MSS逐渐变大),校验机制
  • QUIC是啥
    • 基于UDP的可靠传输协议。
    • 比如说TCP丢包会把后面都阻塞了,他就去找丢的那一个。
  • TCP粘包
    • 原因:数据流时候,几个消息放一块,边界没区分好成一坨了。
    • 解决方法:
      • 每个消息固定长,不足补充。(浪费)
      • 用特殊字符表示边界。(HTTP,Redis在用,好处适合文本,坏处不适合二进制文本)[最好用]
      • 每一段前告诉多长(适用于二进制,但要提前规定字符格式)
      • 消息不要用流了,封装成一帧一帧(复杂)

应用层

实现特定的网络应用,如FTP,SMTP,POP3,HTTP(S)

模型

C/S模型:C(client),S(server)
P2P模型:每个主机即提供服务,又请求服务。所有主机平等

DNS

首先会在本地域名服务器查询(本地服务器可以在主机,也可能是学校企业提供的,这就是为什么校园网可以Ban你半夜打游戏),如果查询不到会向上去问。查询到后缓存在服务器里面

递归查询:服务器会帮你去问,问到之后返回给你ip

递归迭代结合查询:问服务器,返回的是下一级dns服务器地址,再去问那个服务器

对于域名服务商来说,它的作用实在最后一步卡你。举个例子 haruhi.fans ,你会先到/根解析,然后告诉你fans在哪里,接着去fans解析。fans就会去找haruhi.fans对应的是哪个厂商的解析,返回解析的解析服务器。最后问厂商就会给你答案。
那为什么有时候慢呢?因为厂商解析会慢(不优先处理你的),或者fans服务器连不到厂商(最近的厂商解析服务器可能很远),这样就很慢。如果你多花钱,解锁更多厂商服务器,提高你域名处理优先级,那么路途近了,处理快了,解析自然就快了……

FTP(文件传输协议)

让不同主机之间传输文件。

用了两个端口,一个控制连接(21端口),一个数据连接(20端口)

  • 为啥要俩,为什么不一个?
    • 理论可行,但是要区分控制,数据之类麻烦。且如果要取消中断不及时,因为大文件会堵塞那条线路。

E-mail

过程:撰写提交—>DNS查询(@后面那一堆就是域名)-> 连接到服务器的25端口,传输内容(不可达重试) -> 服务器投递到找的人邮箱服务器里 -> 用户定期主动去拉取

万维网和http

万维网:一个信息系统,存储的是一个网站网页的集合。每一个基本单位是网页,存储各种文字图片之类的东西

工作原理:请求URL后,会向目标地址请求资源。收到资源后,返回资源。然后解析出html,css,js这些,最后把网页呈现给用户。

  • URL:统一资源访问路径
  • 超链接:相互关联的方式
  • http:超文本传输协议(定义请求资源方式)
    • 特点:无状态
    • 请求格式:
      • 请求行:GET(幂等),POST(不幂等),DELETE,PUT
      • 请求头:比如说User-Agent,
      • 请求体:post里面提交的数据
  • html:标记语言

重定向码

2xx成功了
200正常
201成功创建资源。比如你post上传一个博客后,返回给你一个201
204成功但返回值为空。比如你delete后,服务器返回。
3xx重定向了
301目标被永久的重定向了
302暂时重定向了
304资源没被修改,意思是你客户端有了。这样避免重复去问
4xx你的问题
401没登录
403被墙了
404找不到
5xx服务器问题
501服务器炸了
502服务器作为网关,反向代理时候,后面该相应的服务器都炸了不说话
503处理不了,稍后再试

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇