文章目录
- 层次结构设计的基本原则
- OSI七层模型
- TCP/IP四层模型
- 计算机网络的性能指标
- 速率
- 时延
- RTT
- 物理层概述
- 物理层的作用
- 信道的基本概念
- 分用-复用技术
- 数据链路层概述
- 封装成帧
- 透明传输
- 差错检测
- 奇偶校验码
- 循环冗余校验码CRC
- 最大传输单元MTU
- MTU
- 路径MTU
- 以太网协议详解
- Mac地址
- 以太网协议
- 数据格式
- 传输过程
- 网络层概述
- IP协议讲解
- 虚拟互连网络
- IP协议
- IP协议的格式
- 路由表简介
- IP协议的转发流程
- ARP协议与RARP协议
- IP地址的子网划分
- 分类的IP地址
- 特殊的主机号
- 特殊的网络号
- 划分子网
- 子网掩码
- 无分类编址CIDR
- 斜线记法
- 网络地址转换NAT技术
- 总结
- ICIP协议
- 差错报告报文
- 询问报文
- ICMP协议的应用
- ping应用
- Traceroute应用
- 网络层路由概述
- 路由算法的本质
- 自治系统
- 内部网关路由协议之RIP协议
- 距离矢量(DV)算法
- 如何运作
- RIP协议的过程
- 过程
- 优点
- 缺点
- Dijkstra (迪杰斯特拉)算法
- 最短路径问题
- 内部网关路由协议之OSPF协议
- 链路状态(LS) 协议
- OSPF协议的过程
- OSPF五种消息类型
- 对比RIP协议
- 外部网关路由协议之BGP协议
- 使用BGP的原因
- BGP发言人
- 传输层概述
- UDP协议详解
- 特点
- TCP协议详解
- 特点
- 可靠传输的基本原理
- 停止等待协议
- 总结
- 连续ARQ协议
- TCP协议的可靠传输
- TCP协议的流量控制
- 坚持定时器
- TCP协议的拥塞控制
- 对比流量控制
- 慢启动算法
- 拥塞避免算法
- TCP连接到建立
- TCP三次握手
- TCP连接的释放
- TCP四次挥手
- 等待计时器
- 套接字与套接字编程
- 应用层概述
- DNS详解
- DHCP协议
- DHCP的过程
- HTTP协议详解
- 格式
- Web服务器
- 请求服务器过程
- HTTPS协议详解
- 加密模型
- 对称加密
- 非对称加密
- 数字证书
- SSL
- 过程
- SSL参数握手
层次结构设计的基本原则
- 各层之间是相互独立的
- 每一层要有足够的灵活性
- 各层之间完全解耦
OSI七层模型
自上而下分别是
- 应用层 ==> 为计算机用户提供接口和服务
- 表示层 ==> 数据处理(编码解码、加密解密等)
- 会话层 ==> 管理(建立、维护、重连)通信会话
- 传输层 ==> 管理端到端的通信连接
- 网络层 ==> 数据路由(决定数据在网络的路径)
- 数据链路层 ==> 管理相邻节点之间的数据通信
- 物理层 ==> 数据通信的光电物理特性
OSI欲成为全球计算机都遵循的标准
OSI在市场化过程中困难重重,TCP/IP在全球范围成功运行
OSI最终并没有成为广为使用的标准模型
OSI失败的原因:
- OSI的专家缺乏实际经验
- OSI标准制定周期过长,按OSI标准生产的设备无法及时进入市场
- OSI模型设计的并不合理,一 些功能在多层中重复出现
所以最后采用了TCP/IP四层模型
TCP/IP四层模型
TCP/IP四层模型分别对应OSI七成模型中的
- 应用层 ==> HTTP/FTP
- 应用层
- 表示层
- 会话层
- 传输层 ==> TCP/UDP
- 传输层
- 网络层 ==> IP/ICMP
- 网络层
- 网络接口层 ==> Ethernet/ARP/RARP
- 数据链路层
- 物理层
计算机网络的性能指标
速率
常用单位Mbps bps=b/s=bit/s=1/8Btyes/s = 1/8B/s
时延
- 发送时延
发送时延 = 数据长度(bit)/发送速率(bit/s)
发送速率受限于计算机网卡
- 传播时延
传播时延 = 传输路径距离/传播速率(bit/s)
传播速率受限于传输介质(铜线or光纤…)
- 排队时延
数据包在网络设备中等待被处理的时间
- 处理时延
数据包到达设备或者目的机器被处理所需要的时间
总时延=发送时延+排队时延+传播时延+处理时延
RTT
RTT(Route-Trip Time)是评估网络质量的一项重要指标
RTT表示的是数据报文在端到端通信中的来回一次的时间
通常使用ping命令查看RTT
物理层概述
物理层的作用
- 连接不同的物理设备
- 双绞线
- 无屏蔽双绞线
- 屏蔽双绞线
- 同轴电缆
- 光纤
- 双绞线
- 传输比特流
信道的基本概念
- 信道是往一个方向传送信息的媒体
- 一条通信电路包含一个接收信道和一个发送信道
发送和接收会不会冲突?冲突了怎么办?
物理层帮助我们解决了这一个问题,使用全双工通信信道
- 单工通信信道
- 只能一个方向通信,没有反方向反馈的信道(有线电视、无线电收音机等等)
- 半双工通信信道
- 双方都可以发送和接收信息
- 不能双方同时发送,也不能同时接收
- 全双工通信信道
- 双方都可以同时发送和接收信息
分用-复用技术
作用:提高信道的利用率
- 频分复用
- 时分复用
- 波分复用
- 码分复用
数据链路层概述
封装成帧
- 如果说比特位是物理层的基本单位,那么“帧”是数据链路层数据的基本单位
- 发送端在网络层(上一层)的一段数据前后添加特定标记形成”帧“
- 帧首部(SOH: 00000001)和尾部(EOT: 00000100)是特定的控制字符(特定比特流)
- 接收端根据前后特定标记识别出“帧“
数据里面恰好有这些比特流咋办?
使用透明传输
透明传输
即是控制字符在帧数据中,但是要当做不存在的去处理
再往物理层传输的时候,会先判断“帧”的数据,如果其中含有EOT字符(00000100),则会在EOT字符前面加上转义字符,到时候传输过去的时候,如果检查到有EOT字符,就会先判断前面是否有转义字符,从而判断是否是帧尾部
如果链路层对这种情况没有特殊处理,那么就可以理解链路层为非透明传输(因为无法传输EOT这个字符),但是数据链路层通过对这个字符添加转义符(如果网络层数据中还存在转义符,就再添加一个转义符)的办法来使数据部分可以传输EOT字符,就实现了透明传输
差错检测
- 物理层只管传输比特流,无法控制是否出错
- 数据链路层负责起“差错监测”的工作
奇偶校验码
00110010 ==> 0+0+1+1+0+0+1+0=3 ==> 奇数 在比特流后面添加1 ==> 001100101
00111010 ==> 0+0+1+1+1+0+1+0=4 ==> 偶数 在比特流后面添加0 ==> 001100100
假设我们现在需要传输00110010 1
如果在传输过程中出错,变成了00010010 1
我们就可以通过0+0+0+1+0+0+1+0=2,发现最后一位应该是0 但是传过来的结尾却是1,于是可知传输出错
但是会出现一个问题
如果出错两位,奇偶校验码校测不到错误
循环冗余校验码CRC
- 一种根据传输或保存的数据而产生固定位数校验码的方法
- 检测数据传输或者保存后可能出现的错误
- 生成的数字计算出来并且附加到数据后面
例题:使用CRC计算101001的可校验位串
1.G(x)=x3+x2+1 ==> 二进制位串:1101,最高阶:3
2.根据最高阶为r 所以给101001末尾添加r个0,这里r为3 ===> 101001000
3.将添加r个0后的数据101001000使用模2除法除以多项式的位串 也就是101001000/1101 得到商为110101 余数001
4.得到的余数填充在原数据r个0的位置得到可校验的位串 101001000 ==> 101001001
接收端接收的数据除以G(x)的位串,根据余数判断出错(余数为0则没有出错)
注意
- CRC的错误检测能力与位串的阶数r有关
- 数据链路层只进行数据的检测,不进行纠正
- CRC中的G(x)并不是随便取的,而是有一定的规定的
最大传输单元MTU
MTU
- 最大传输单元MTU(Maximum Transmission Unit)
- 数据链路层的数据帧也不是无限大的
- 数据帧过大或过小都会影响传输的效率
- 以太网MTU一般为1500字节
路径MTU
路径MTU由链路中MTU的最小值决定
以太网协议详解
Mac地址
- MAC地址(物理地址、硬件地址)
- 每一个设备都拥有唯一的MAC地址
- MAC地址共48位,使用十六进制表示(比如:30-B4-9E-ED-85-CA)
以太网协议
- 以太网(Ethernet)是一种使用广泛的局域网技术
- 以太网是一种应用于数据链路层的协议
- 使用以太网可以完成相邻设备的数据帧传输,如果非相邻设备,需要网络层的协助
数据格式
整个称作数据帧
目的地址 | 源地址 | 类型 | 帧数据 | CRC |
---|---|---|---|---|
6字节 | 6字节 | 2字节 | 46~1500字节 | 4字节 |
传输过程
如果E在MAC地址表没有找到对应的接口,则会广播A的数据包到除A以外的端口,最终E将收到来自B、C的回应,并将地址记录
网络层概述
IP协议讲解
虚拟互连网络
- 实际的计算机网络是错综复杂的
- 物理设备通过使用IP协议,屏蔽了物理网络之间的差异
IP协议
- IP协议使得复杂的实际网络变为一个虚拟互连的网络
- IP协议使得网络层可以屏蔽底层细节而专注网络层的数据转发
- IP协议解决了在虚拟网络中数据报传输路径的问题
IP协议的格式
-
版本
- 占4位,指的是IP协议的版本,通信双方的版本必须一致,当前主流版本是4,即IPv4,也有IPv6
-
首部位长度
- 占4位,最大数值为15,表示的是IP首部长度,单位是“32位字” (4个字节)也即是IP首部最大长度为60字节
-
总长度
- 占16位,最大数值为65535,表示的是IP数据报总长度(IP首部+IP数据)
-
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地址 |
---|---|
IP1 | IP4 |
IP2 | IP5 |
IP3 | IP6 |
… | … |
IP协议的转发流程
如果只看网络层,那么流程如下
如果结合网络层和数据链路层,那么流程如下
第一步
- A发出目的地为C的IP数据报,查询路由表发现下一跳为E
- A将IP数据报交给数据链路层,并告知目的MAC地址是E
- 数据链路层填充源MAC地址A和目的MAC地址E
- 数据链路层通过物理层将数据发送给E
第二步
- E的数据链路层接收到数据帧,把帧数据交给网络层
- E查询路由表,发现下一跳为F
- E把数据报交给数据链路层,并告知目的MAC地址为F
- E的数据链路层封装数据帧并发送
第三步
- F的数据链路层接收到数据帧,把帧数据交给网络层
- F查询路由表,发现下一-跳为C
- F把数据报交给数据链路层,并告知目的MAC地址为C
- F的数据链路层封装数据帧并发送
MAC地址和IP地址在传输过程中的差别
- 数据帧每一跳的MAC地址都在变化
- IP数据报每一跳的IP地址始终不变
ARP协议与RARP协议
-
ARP(Address Resolution Protocol)地址解析协议
将网络层32位IP地址转化为数据链路层MAC48位地址
- ARP缓存表(存着IP地址与MAC地址的映射关系)
- ARP缓存表缓存有IP地址和MAC地址的映射关系
- ARP缓存表没有缓存IP地址和MAC地址的映射关系
- ARP协议会通过广播 获取目的主机的MAC地址与IP地址
- ARP缓存表(存着IP地址与MAC地址的映射关系)
ARP缓存表可以通过终端
arp -a
查看
-
RARP(Reverse Address Resolution Protocol)逆地址解析协议
将数据链路层MAC48位地址转化为网络层32位IP地址
总结
®ARP协议是TCP/IP协议栈里面基础的协议
ARP和RARP的操作对程序员是透明的
理解®ARP协议有助于理解网络分层的细节
IP地址的子网划分
分类的IP地址
特殊的主机号
- 主机号全0表示当前网络段,不可分配为特定主机
- 主机号为全1表示广播地址,向当前网络段所有主机发消息(意思是如果往主机号全为1的发送消息,则会向当前网络段所有主机发消息)
特殊的网络号
- A类地址网络段全0(00000000)表示特殊网络
- A类地址网络段后7位全1(01111111:127)表示回环地址
- B类地址网络段(10000000.00000000:128.0)是不可使用的
- C类地址网络段(192.0.0)是不可使用的
所以正确的子网和主机数量应该基于上表,每一类各减一些(如下表)
127.0.0.1,通常被称为本地回环地址(Loopback Address),不属于任何-一个有类别地址类。它代表设备的本地虚拟接口,所以默认被看作是永远不会宕掉的接口。在Windows操作系统中也有相似的定义,所以通常在安装网卡前就可以ping通这个本地回环地址。一般都会用来检查本地网络协议、基本数据接口等是否正常的。
划分子网
某公司拥有256名员工,每人配备一个计算机,请问该公司应该申请哪种网络段?
解:因为申请A类地址只能有254台主机连接达不到要求,但是如果申请B类地址,虽然能满足,但是造成了大量地址的浪费,所以有了子网划分的概念
比如下图的193.10.10.0 我们通过子网划分,分成了两段,我们取其中一段使用即可,比如当前有100名员工,在没有子网划分的时候,我们需要使用到C类地址,可连接254台主机,这样会造成资源的极度浪费,但是通过子网划分,我们现在能连接126台主机,但是仍然足够100名员工使用,于是我们从浪费154个地址降到了26个,减少了资源的浪费
如何每一类IP地址都进行子网划分的话,将会出现非常多的子网号,所以有了子网掩码帮助我们快速判断某个IP的网络号
子网掩码
- 子网掩码和IP地址一样,都是32位
- 子网掩码由连续的1和连续的0组成
- 某一个子网的子网掩码具备网络号位数个连续的1
A类地址的子网掩码255.0.0.0
B类地址的子网掩码255.255.0.0
C类地址的子网掩码255.255.255.0
假设有这么一个ip地址193.10.10.6,子网掩码为255.255.255.128,求子网号
193.10.10.6 ==> 11000001.00001010.00001010.00000110
255.255.255.128 ==> 11111111.11111111.11111111.10000000
相与得到子网号 ==> 11000001.00001010.00001010.00000000 ==> 193.10.10.0
无分类编址CIDR
- 现代ip地址的归类方法
- CIDR中没有A、B、C类网络号、和子网划分的概念
- CIDR将网络前缀相同的IP地址称为一个"CIDR地址块”
- 网络前缀是任意位数的
斜线记法
193.10.10.129/25 表示前25位为网络前缀
相比原来子网划分更加灵活
网络地址转换NAT技术
NAT技术用于多个主机通过一个公有IP访问互联网的私有网络中
NAT (Network Address Translation)技术是如何出现的?首先是IP地址不够用
- IPv4最多只有40+亿个P地址
- 早期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(支持万数量级设备)
-
内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?
这里就需要使用到我们的NAT技术
NAT技术能在本地路由器中将内网的地址以及端口号转化为新的地址以及端口号(也就是外网的IP:新的端口号),当数据传回来的时候,也是通过NAT表取查找映射关系,从而传回具体的主机
NAT表
-
-
-
外网地址
- 全球范围使用
- 全球公网唯一
总结
- NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度
ICIP协议
网际控制报文协议(Internet Control Message Protocol)
用于
- ICMP协议可以帮助IP协议进行传输,可以报告错误信息或者异常情况
ICMP协议是封装在IP协议里面进行传输的,ICMP报文只是IP数据报的一组数据
在IP协议中 其中有八位用来表示协议,如果IP协议传输的是ICMP数据的话,协议的值就为1
差错报告报文
询问报文
ICMP协议的应用
ping应用
- Ping回环地址127.0.0.1
- Ping网关地址
- Ping远端地址
Traceroute应用
Traceroute可以探测IP数据报在网络中走过的路径
在终端通过tracert ip地址/网址
,可以查看到请求发送到目的主机走过的路径
其原理是通过TTL与ICMP协议的配合来完成的
初始TTL为1,如果下一跳不是目的主机,则返回终点不可达的报文到源主机,然后TTL+1,继续发送,重复操作,一直到TTL足够到达目的主机,从而实现记录IP数据报在网络中走过的路径
网络层路由概述
路由算法的本质
本质上是一张“图”,我们在图上运行这个算法,而路由表只是这个算法里面的一个数据结构
- 每一顶点表示一个网络、 路由器或计算机
- 每一条边表示一条网络路径
- 网络环境复杂
- 路由算法要比图论的算法要复杂
自治系统
- 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
- 自治系统外部路由的协议称为:外部网关协议(BGP)
内部网关路由协议之RIP协议
距离矢量(DV)算法
- 每一个节点使用两个向量Di和Si
- Di描述的是当前节点到别的节点的距离
- 比如Di1表示从节点i到节点1的距离
- Si描述的是当前节点到别的节点的下一节点
- 比如Si1表示从节点到节点1的下一个节点
dij = min(dix+dxj) //x为i到j需要经过的中间的某个节点
如何运作
- 每一个节点与相邻的节点交换向量Di和Si的信息
- 每一个节点根据交换的信息更新自己的节点信息
RIP协议的过程
RIP(Routing Information Protocol)协议
RIP协议是使用DV算法的一种路由协议
- RIP协议把网络的跳数(hop)作为DV算法的距离
- RIP协议每隔30s交换一次路由信息
- RIP协议认为跳数>15的路由则为不可达路由
过程
1.路由器初始化路由信息(两个向量Di和Si)
2.对相邻路由器X发过来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
i.检索本地路由,将信息中新的路由插入到路由表里面
ii.检索本地路由,对于下一跳为X的,更新为修改后的信息(以最新的为准)
iii.检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
3.如果3分钟没有收到相邻的路由信息,则把相邻路由设置为不可达(16跳)
优点
实现简单,开销很小
缺点
故障信息传递慢
假设ABC为一组线性网络,某一个时刻A断开,B想传递A,发现传递不了,然后发现C可以传递给A,于是把路径长度+1,并且下一跳设置为C,C准备传递给A时,也发现传递不了,然后发现B可以传递给A,于是把路径长度+1,并且设置下一跳为B,如此反复,经过16次后,才设置为不可达,所以故障信息传递得慢
限制了网络的规模
跳数>15的路由不管可不可达,在RIP协议中始终认为不可达,所以限制了网络的规模
Dijkstra (迪杰斯特拉)算法
- Dijkstra算法是著名的图算法
- Dijkstra算法解决有权图从一个节点到其他节点的最短路径问题
- "以起始点为中心,向外层层扩展’
最短路径问题
1.初始化两个集合(S, U) (S为只有初始顶点点A的集合,U为其他顶点集合)
2.如果U不为空,对U集合顶点进行距离的排序,并取出距离A最近的一个顶点D
i.将顶点D的纳入S集合
ii.更新通过顶点D到达U集合所有点的距离(如果距离更小则更新,否则不更新)
iii.重复2步骤
3.直到U集合为空,算法完成
内部网关路由协议之OSPF协议
链路状态(LS) 协议
- 向所有的路由器发送消息
一传十十传百,而RIP协议只跟相邻的路由器交换信息
- 消息描述该路由器与相邻路由器的链路状态
时延,带宽,距离等等,而RIP协议只描述跳数
- 只有链路状态发生变化时,才发送更新信息
而RIP协议每隔30s交换路由信息,不管状态有没有发生变化
OSPF协议的过程
OSPF(Open Shortest Path First:开放最短路径优先)
OSPF协议的核心是Dijkstra算法
OSPF协议是链路状态(LS)协议的一种实现,相当于LS定义了这种规则,而OSPF则实现了这种规则
- 向所有的路由器发送消息
获得网络中的所有信息 ==> "网络的完整拓扑”(所以每个路由器都能单独的运行Dijkstra算法)
- 也称为“链路状态数据库”
- "链路状态数据库”是全网一致的
- 消息描述该路由器与相邻路由器的链路状态
所以OSPF协议比RIP协议更加客观、更加先进
- 只有链路状态发生变化时,才发送更新信息
减少了数据的交换,更快收敛
OSPF五种消息类型
- 问候消息(Hello)
- 验证自己与隔壁路由器是否真正可达
- 链路状态数据库描述信息
- 链路状态请求信息
- 向隔壁请求链路状态数据库
- 链路状态更新信息
- 链路状态确认信息
OSPF协议过程图
对比RIP协议
RIP协议 | OSPF协议 |
---|---|
从邻居看网络 | 整个网络的拓扑 |
在路由器之间累加距离 | Dijkstra算法计算最短路径 |
频繁、周期更新,收敛很慢 | 状态变化更新,收敛很快 |
路由间拷贝路由信息 | 路由间传递链路状态,自行计算路径 |
外部网关路由协议之BGP协议
BGP(Border Gateway Protocol:边际网关协议)
BGP协议是运行在AS(自治系统)之间的一种协议
BGP协议能够找到一条到达目的比较好的路由
使用BGP的原因
- 互联网的规模很大
- AS内部使用不同的路由协议
- AS之间需要考虑除网络特性以外的一些因素(政治、安全…)
BGP发言人
BGP发言人就是一个路由器,位于AS边界的
- BGP并不关心内部网络拓扑
- AS之间通过BGP发言人交流信息
- BGP Speaker可以人为配置策略
- 比如中国不想让一些敏感信息进入国内,就可以在BGP Speaker上人为配置策略
传输层概述
在传输层,我们可以忽略两个设备之间是如何连接的,因为网络层已经帮我们解决了这个问题,我们可以把两个设备之间的网络连接,当成是一个虚拟互联的网络,其实说白了,两个设备的通讯也可以当成是两个进程的通讯
计算机是如何识别是哪个进程在通讯的?
端口
- 使用端口(Port)来标记不同的网络进程
- 端口(Port)使用16比特位表示(0~65535)
FTP HTTP HTTPS DNS TELNET 21 80 443 53 23
UDP协议详解
UDP(User Datagram Protocol:用户数据报协议)
UDP是一个非常简单的协议
对于应用层传下来的数据,不会进行合并,也不会进行拆分,所以UDP协议的长度基本是由应用层的数据长度决定的
特点
- UDP是无连接协议
- UDP不能保证可靠的交付数据
- “想发就发”,"无法保证数据在网络中是否丢失”
- UDP是面向报文传输的
- UDP没有拥塞控制
- UDP的首部开销很小
TCP协议详解
TCP( Transmission Control Protocol:传输控制协议)
TCP协议是计算机网络中非常复杂的一个协议
特点
TCP是面向连接的协议
TCP的一个连接有两端(点对点通信)
TCP提供可靠的传输服务
TCP协议提供全双工的通信
TCP是面向字节流的协议
-
序号
- 范围0~2^32-1
- TCP是面向字节流的,每个字节都有唯一的一个序号
- 而这里的序号只是数据首字节的序号
-
确认号
- 0~2^32-1
- 一个字节一个序号
- 期望收到数据的首字节序号
-
数据偏移
- 占4位:能表示0~15,单位为:32位字(4字节),也就是每一个偏移,就能表示4个字节的偏移
- 数据偏离首部的距离(因为不知道TCP选项的长度)
-
TCP标记
-
占6位,每位各有不同意义
-
标记 含义 URG Urgent:紧急位,u=1,表示紧急数据 ACK Acknowledgement:确认位,ACK=1,确认号才生效 PSH Push:推送位,PSH=1,尽快地把数据交付给应用层 RST Reset:重置位,Rst=1,重新建立连接 SYN Synchronization:同步位,SYN=1表示连接请求报文 FIN Finish:终止位,Fn=1表示释放连接
-
-
-
窗口
- 占16位:0~2^16-1
- 窗口指明允许对方发送的数据量
-
紧急指针
- 紧急数据(URG=1)
- 指定紧急数据在报文的位置
-
TCP选项
- 最多40字节
- 支持未来的拓展
可靠传输的基本原理
停止等待协议
- 发送的消息在路上丢失了
- 确认的消息在路上丢失了
- 确认的消息很久才到
通过超时重传保证可靠传输
- 每发送一个消息,都需要设置一个定时器
超时定时器
总结
- 停止等待协议是最简单的可靠传输协议
- 停止等待协议对信道的利用效率不高
连续ARQ协议
ARQ( Automatic Repeat reQuest:自动重传请求)
既然单个发送和确认效率低,可不可以批量发送和确认?
于是有了连续ARQ协议
累计确认不需要像上面一样等待一个一个消息的确认,假设我现在收到第五条信息的确认,那么就认为,前面5条都已经收到,累计确认可以减少确认报文的数量,以此提升网络的效率
TCP协议的可靠传输
- TCP的可靠传输基于连续ARQ协议
- TCP的滑动窗口以字节为单位
TCP协议的流量控制
- 流量控制指让发送方发送速率不要太快
- 流量控制是使用滑动窗口来实现的
TCP协议中有窗口这么一个数据段
- 占16位: 0~2^16-1
- 窗口指明允许对方发送的数据量
如果现在接收方准备告诉发送方窗口大小为1000,但是这个消息在发送的过程中不小心丢失了,发送方一直收到这个消息,就会造成死锁的局面(窗口大小信息没有超时重传机制),所以这里我们需要另一种定时器——坚持定时器
坚持定时器
- 当接收到窗口为0的消息,则启动坚持定时器
- 坚持定时器每隔一段时间发送一 个窗口探测报文
TCP协议的拥塞控制
- 一条数据链路经过非常多的设备
- 数据链路中各个部分都有可能成为网路传输的瓶颈
对比流量控制
- 流量控制考虑点对点的通信量的控制
- 拥塞控制考虑整个网络,是全局性的考虑
慢启动算法
- 由小到大逐渐增加发送数据量
- 每收到一个报文确认,就加一,一直到慢启动阈值(指数增长1, 2, 4, 8, 16)
- 达到慢启动阈值后,启动另一种算法——拥塞避免算法
拥塞避免算法
- 维护一个拥塞窗口的变量
- 只要网络不拥塞,就试探着拥塞窗口调大(…16, 17, 18, 19)
全过程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eHOvlsL2-1599101827388)(/Users/huangwenxun/Library/Application Support/typora-user-images/image-20200901230629460.png)]
TCP连接到建立
TCP三次握手
为什么发送方要发出第三个确认报文呢?
- 避免已经失效的连接请求报文传送到对方,引起错误
如果有一个先发后到的确认报文,接收方会有第二次回应,这样就会建立两次连接,如果有三次握手,先到的确认报文已经进行了第三次握手,因为发送方对于第二次的消息会忽略掉,不会进行任何的操作
TCP连接的释放
TCP四次挥手
等待计时器
等待计时器会等待2MSL的时间【MSL(Max Segment Lifetime):最长报文段寿命】
MSL建议设置为2分钟
为什么需要等待2MSL?
- 最后一个报文没有确认
- 确保发送方的ACK可以到达接收方
- 2MSL时间内没有收到,则接收方会重发(也就是重复第三次挥手的动作)
- 确保当前连接的所有报文都已经过期
套接字与套接字编程
IP:Port ==> 套接字
- IP与端口的组合就叫套接字
- 套接字(Socket)是抽象概念,表示TCP连接的一端
- 通过套接字可以进行数据发送或接收
- 一个IP可以有多个套接字
所以TCP的连接,我们就可以理解为是两个套接字的连接
TCP = { Socket1: Socket2 } = {{ IP:Port }:{ IP:Port }}
应用层概述
- 传输层以及以下的层提供完整的通信服务
- 应用层是面向用户的一层
FTP | HTTP | HTTPS | DNS | TELNET |
---|---|---|---|---|
21 | 80 | 443 | 53 | 23 |
作用
定义应用间通信的规则
- 应用进程的报文类型(请求报文、应答报文)
- 报文的语法、格式
- 应用进程发送数据的时机、规则
DNS详解
DNS (Domain Name System:域名系统)
- 使用域名帮助记忆
- 域名由点、字母和数字组成
- 点分割不同的域
- 域名可以分为顶级域、二级域、三级域…n级域
- 比如www.taobao.com
- com为顶级域
- taobao为二级域
- www为三级域
- 比如www.taobao.com
解析域名过程
DHCP协议
DHCP(Dynamic Host Configuration Protocol: 动态主机设置协议)
- DHCP是一个局域网协议
- DHCP是应用UDP协议的应用层协议
- 即插即用联网
DHCP会自动分配内网的IP地址给你,而不需要手动配置
在DHCP有两个点需要注意
- 分配的IP是临时的
- 租期的概念
DHCP的过程
- DHCP服务器监听默认端口: 67
- 主机使用UDP协议广播(先将自己的IP地址全填写为1)DHCP发现报文
- DHCP服务器发出DHCP提供报文(告诉主机我可以提供DHCP服务)
- 主机向DHCP服务器发出DHCP请求报文
- DHCP服务器回应并提供IP地址
HTTP协议详解
HTTP(HyperText Transfer Protocol:超文本传输协议)
- HTTP协议是可靠的数据传输协议(基于TCP)
- 工作在CS的架构之上
格式
http(s)/<主机>:<端口>/<路径>
Web服务器
- 硬件部分
- 软件部分
请求服务器过程
- 请求
- GET
- 获取指定的服务端资源
- POST
- 提交数据到服务端
- DELETE
- 删除指定的服务端资源
- UPDATE
- 更新指定的服务端资源
- PUT
- OPTIONS
- PATCH
- HEAD
- TRACE
- GET
- 请求/应答报文格式
怎么指定资源呢?
在url地址中指定
在请求数据中指定
POST https://coding.imooc.com HTTP/1.1 Accept-Encoding: gzip Accept-Language: zh-CN { "sort":0, "unlearn":0, "page":2 }
- 请求状态码
状态码 | 含义 |
---|---|
200~299 | 成功状态码 |
300~399 | 重定向状态码 |
400~499 | 客户端错误状态码 |
500~599 | 服务端错误状态码 |
HTTPS协议详解
- HTTP是明文传输的,对于敏感信息,HTTP是不安全的
- HTTPS( Secure)是安全的HTTP协议
- http(s): //<主机><端口><路径> 端口变为443
加密模型
对称加密
非对称加密
- A、B是拥有一定数学关系的一组秘钥
- 私钥 私钥自己使用,不对外公开
- 公钥 公钥给大家使用,对外公开
- 发送数据使用公钥进行加密,拿到密文后使用私钥进行解密
数字证书
- 数字证书是可信任组织颁发给特定对象的认证
SSL
SSL (Secure Sockets Layer:安全套接层)
- 数据安全和数据完整
- 对传输层数据进行加密后传输
过程
SSL参数握手
综合使用对称加密、非对称加密(生成随机数阶段)