admin 管理员组文章数量: 887021
文章目录
- 计算机网络
- 计算机网络的层次结构
- 层次结构设计的基本原则
- OSI七层模型
- TCP/IP四层模型
- 现代互联网的网络拓扑
- 边缘部分
- 核心部分
- 树状结构
- 计算机网络的性能指标
- 速率Mbps = bit/s
- 时延
- 往返时间RTT(Route-Trip Time)
- 物理层
- 作用
- 信道
- 信道的分用-复用技术
- 数据链路层
- 封装成帧
- 透明传输
- 差错检测
- 奇偶校验码
- 循环冗余校验码CRC
- 最大传输单元MTU
- 以太网协议详解
- MAC地址
- 以太网协议
- MAC地址表
- 网络层
- IP协议详解
- IP数据报
- IP协议的转发流程
- 路由表
- IP协议的转发流程
- ARP协议与RARP协议
- ARP协议
- ARP缓存表
- ARP报文信息
- RARP协议
- RARP报文格式
- IP地址的子网划分
- IP地址的分类
- 划分子网
- 无分类编址CIDR
- 网络地址转换NAT技术
- ICMP协议详解
- ICMP报文格式
- ICMP协议的应用
- 网络层的路由概述
- 内部网关路由协议
- RIP协议
- OSPF协议
- 外部网关路由协议
- BGP协议
- 传输层
- UDP协议详解
- UDP数据报
- TCP协议详解
- TCP协议报
- TCP协议的可靠传输
- 可靠传输的基本原理
- 停止等待协议
- 连续ARQ协议
- TCP协议可靠传输
- TCP协议的流量控制
- TCP协议的拥塞控制
- 慢启动算法
- 拥塞避免算法
- TCP连接的建立与释放
- 三次握手
- 四次挥手
- 套接字与套接字编程
- 应用层
- DNS详解
- 域名
- DHCP协议详解
- HTTP协议
- 协议详解
- 工作结构
- HTTPS协议详解
- 加密模型
- 对称加密
- 非对称加密
- HTTPS协议过程
- SSL安全参数握手
计算机网络
计算机网络的层次结构
层次结构设计的基本原则
当计算机A和计算机B进行通信时
计算机网络需要解决的四个问题:
- 保证数据通路顺畅
- 识别目的计算机
- 查询目的计算机状态
- 数据是否错误
分层实现不同的功能
-
基本原则:
-
各层之间是相互独立的
-
每一层要有足够的灵活性(用来应对未来的变化
-
各层之间完全解耦(各层的变化不会相互影响
-
OSI七层模型
OSI并没有成为广为使用的标准模型
- OSI专家缺乏实际经验
- OSI标准制定周期过长
- OSI设计不合理
TCP/IP在全球范围成功运行
TCP/IP四层模型
计算机之间的传输:
四层模型使用的协议:
中间窄,两端大的沙漏形状
现代互联网的网络拓扑
边缘部分
用户可以接触到的部分
e.g. 家庭: 终端机器(手机、电脑 )-> 路由器 -> 网关 -> 地区ISP
e.g. 企业:
核心部分
地区的主干ISP通过国际路由器进行互通
树状结构
计算机网络的性能指标
速率Mbps = bit/s
为什么电信拉100M光纤,测试峰值速度只有12M每秒?
网络常用单位为Mbps
100M光纤指的是100M/s = 100Mbps = 100Mbits/s = (100/8)MB/s = 12.5MB/s
时延
- 发送时延
- 传播时延
-
排队时延
数据包在网络设备中等待被处理的时间
-
处理时延
数据包到达设备或目的机器被处理所需要的时间
总时延 = 发送时延 + 传播时延 + 排队时延 + 处理时延
往返时间RTT(Route-Trip Time)
数据报文在端到端通信中的来回一次的时间
通常使用ping
命令查看RTT
IP物理地址离得越远RTT越长
物理层
在OSI七层模型属于最底层,在TCP/IP四层模型中属于网络接口层
作用
-
连接不同的物理设备
- 介质
- 双绞线
- 同轴电缆
- 光纤
- 红外线、无线、激光
- 介质
-
传输比特流
比特流:高低电平交替传输信息
信道
-
往一个方向传送信息的媒体
-
一条通信电路包含一个接收信道和一个发送信道
-
发送和接收会不会冲突? 冲突了怎么办
-
单工通信信道
只能一个方向通信,没有反方向反馈的信道
e.g. 电视、无线电收音机等
-
半双工通信信道
双方都可以发送和接收信息
不能同时发送也不能同时接收
-
全双工通信信道
双方都可以同时发送和接收信息
-
信道的分用-复用技术
多个计算机连接复用器和分用器,共享同一条信道,提高信道的利用效率。
但可能导致信道的拥塞
- 分类
- 频分复用(按频率不同进行分用复用
- 时分复用
- 波分复用
- 码分复用
数据链路层
在OSI七层模型属于物理层的上一层,在TCP/IP四层模型中也属于网络接口层
封装成帧
-
“帧”是数据链路层数据的基本单位
(比特位是物理层的基本单位
-
发送端在网络层的一段数据前后添加特定标记形成“帧”
-
接收端根据前后特定标记识别出“帧”
过程:
网络层把IP数据报传输到数据链路层
数据链路层收到数据后把它看做数据帧
在数据帧的前后(帧首部SOH、帧尾部EOT添加特定的控制字符(特定比特流)
- 数据流恰好也有这些比特流怎么办
- 透明传输
透明传输
透明:“一种实际存在的实物又看起来不存在一样”
即“控制字符在帧数据中,但是要当做不存在的去处理”
-
那么数据流恰好有这些怎么办?
在EOT前添加一个转义字符(‘\’),当接收端接收到EOT并判断EOT前有一个转义字符时,那么接收端就不会把它判断成数据报的尾部。
-
如果数据中也出现了转义字符咋办?
在转义字符前再加一个转义字符,把转义字符转义一下(…?)
比如要输出一个反斜杠“\“时,就要在前面再加一个转义字符表示这不是转义字符,即”\\”。如果要输出两个反斜杠,就要在前面加两个。
-
差错检测
作用:因为物理层只管传输比特流,无法控制是否出错。所以数据链路层负责起“差错检测”的工作。
奇偶校验码
在比特流的尾部添加一位比特位来检测比特流是否有出错
比特流中所有位数相加,如果是奇数那么校验码是1;如果是偶数则为0
-
局限性:
如果是奇数位丢失(比如丢失了1个或3个“1”)是可以检测出的
但如果是偶数个1丢失,是检测不出来的。
循环冗余校验码CRC
根据传输或保存的数据而产生固定位数校验码的方法
检测数据传输或保存后可能出现的错误
也是生成的数字计算出来并且附加到数据后面
-
模二除法
二进制下的除法,不借位,实际是异或操作
-
步骤
-
选定一个用于校验的多项式G(x),并在数据尾部添加r个0,r为最高阶
-
将添加r个0后的数据,使用模二除法除以多项式的位串
-
得到的余数填充在原数据r个0的位置得到可校验的位串
例子:使用CRC计算101001的可校验位串。
- 选定多项式G(x)
-
2. 将添加r个0后的数据,使用模二除法除以多项式的位串
3. 将得到的余数填充在原数据r个0的位置得到可校验的位串
- 接收端接收的数据除以G(x)的位串,根据余数判断出错
CRC的错误检测能力与位串的阶数r有关
如果r=1,CRC退化成奇偶校验码
数据链路层只进行数据的检测,不进行纠正。
最大传输单元MTU
MTU(Maximum Transmission Unit)
数据链路层的数据帧也不是无限大的
数据帧过大或过小都会影响传输的效率
- 以太网MTU一般为1500字节
总时延 = 发送时延 + 排队时延 + 传播时延 + 处理时延
路径MTU
路径MTU由链路中MTU的最小值决定
以太网协议详解
路由器怎么知道A的数据要发给谁?
MAC地址
-
物理地址、硬件地址
-
每个设备都拥有唯一的MAC地址(身份证号码)
-
48位,使用十六进制表示
xx-xx-xx-xx-xx-xx
-
查看计算机的MAC地址:ipconfig /all
以太网协议
-
以太网(Ethernet)是一种广泛的局域网技术
-
应用于数据链路层的协议
-
完成相邻设备的数据帧
单位都是字节
MAC地址表
将MAC地址映射到具体的硬件接口上
回到一开始的问题:路由器怎么知道A的数据要发给谁?
- A通过网卡发出数据帧
- 数据帧到达路由器,路由器取出前6字节
- 路由器匹配MAC地址表,找到对应的网络接口
- 路由器往该网络接口发送数据帧
如果MAC地址表中C的接口是未知的怎么办?
- E检查MAC地址表,发现没有C的信息
- E广播A的数据包到除A以外的端口
- E将收到来自B、C的回应,并记录地址
- E就知道了C的地址
MAC地址表只能进行相邻物理节点的传输
- 那么A怎么发信息给C?
学完网络层的内容就知道如何跨设备传输。
网络层
- 功能:数据路由(决定数据在网络的路径)
IP协议详解
-
物理设备使用通过IP协议,屏蔽了物理网络之间的差异
-
当网络中的主机使用IP协议连接时,则无需关注网络细节
-
IP地址长度为32位,常分成4个八位,使用点分十进制来表示
IP数据报
-
4位版本号:指定IP协议的版本,对IPv4来说,其值为4。
-
4位头部长度:该IP头部有多少个32bit字(4字节),因为4位最大能表示15,所以IP头部最长是60字节。
-
8位服务类型:包括一个3位的优先权字段,4位的TOS字段和1位保留字段(置零)
-
4位TOS字段:最小延时、最大吞吐量、最高可靠性、最小费用。最多有一个能置1。
比如ssh和telnet需要最小延时,文件传输程序ftp需要最大吞吐量
-
-
16位总长度:整个IP数据报的长度(字节)(IP首部+IP数据),最大长度为(2^16 - 1)65535字节,但由于MTU限制,长度超过MTU的数据报都会被分片传输。接下来的3个字段描述如何实现分片。
-
16位标识:唯一标识主机发送的每一个数据报。
-
3位标志字段:
- 第一位保留
- 第二位“禁止分片“,设置则不对数据报进行分片,但如果IP数据报长度超过MTU的话就丢弃数据报并返回ICMP差错报文。
- 第三位”更多分片“,除了数据报最后一个分片外,其他分片都置一
-
13位分片偏移
-
8位生存时间:数据报到达目的地之前允许经过的路由器跳数。当TTL=0时,网络设备必须丢弃该报文,防止数据报陷入路由循环。
-
8位协议:区分上层协议。(如TCP、UDP)
-
16位头部校验和:发送端填充,接收端对其使用CRC算法来检验(仅)头部是否损坏
-
32位源端IP地址和目的端IP地址:标识数据报的发送和接收端
-
选项字段:
- 记录路由(传递路径)
- 时间戳(数据报在各个路由器被转发的时间)
- 松散源路由选择(发送过程必须经过其中所有的路由器)
- 严格源路由选择(只能经过被指定的路由器)
IP协议的转发流程
逐跳(hop byhop)
路由表
-
计算机或者路由器都拥有路由表
IP协议的转发流程
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的数据链路层封装数据帧并发送
需要注意的地方:
- 数据帧每一跳的MAC地址都在变化
- IP数据报每一跳的IP地址始终不变
ARP协议与RARP协议
-
ARP和RARP协议是TCP/IP协议栈里面基础的协议
协调网络层和数据链路层的配合工作
-
ARP和RARP的操作对程序员是透明的
-
理解RARP协议有助于理解网络分层的细节
ARP协议
Address resolution protocol 地址解析协议
ARP缓存表
比如:
-
两种情况:
-
ARP缓存表缓存有IP地址和MAC地址的映射关系
查找到直接发送
-
ARP缓存表没有缓存IP地址和MAC地址的映射关系
-
-
ARP缓存表是ARP协议和RARP协议运行的关键
-
ARP缓存表缓存了IP地址到硬件地址之间的映射关系
-
ARP缓存表中的记录并不是永久有效的,有一定的期限
-
使用
arp -a
来查看ARP缓存表
ARP报文信息
直接封装进数据链路层中
RARP协议
Reverse address resolution Protocol 逆地址解析协议
RARP报文格式
IP地址的子网划分
IP地址的分类
-
A类地址开头是0, B类地址开头是10, C类地址开头是110
这是最理想的状态,但是有很多特殊的主机号和特殊的网络号是需要被排除出去的。
-
特殊的主机号
- 主机号全0表示当前的网络段,不可分配为特定主机
- 主机号全1表示广播地址,向当前网络段所有主机发消息,也不能分配为特定主机
-
特殊的网络号
- A类地址网络段全0(00000000)表示特殊网络
- A类地址网络段后7位全1(01111111:127)表示回环地址
- B类地址网络段(10000000.00000000:128.0)是不可使用的
- C类地址网络段(192.0.0)是不可使用的
所以上表更精确一些应该是这样:
回环地址:
划分子网
Q: 某公司有100名员工,每人配备一个计算机,请问该公司该申请哪种网络段?
A: C类地址最大主机号是254个,所以申请C类地址是最节省IP地址的
假设申请的是
193.10.10.0
,那么就可以使用从193.10.10.0
到193.10.10.99
的地址作为每位员工的IP地址。Q: 某公司有256名员工,每人配备一个计算机,请问该公司该申请哪种网络段?
A: C类不够用了,只能申请B类地址
假设申请的是
190.17.0.0
可以有2^16 - 2个地址,但只需要256个地址,会造成很大的地址空间浪费。 所以划分子网
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ulikvfY9-1641860742176)(计算机网络.assets/image-20220107231313143.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y8Wyvi5U-1641860742178)(计算机网络.assets/image-20220107231353731.png)]
按主机号的第一位0或1分成两个不同的子网,可以减少地址空间浪费。
如果划分了很多的子网,怎样快速判断某个IP的网络号(在哪个网络号的哪个子网下)?
-
子网掩码
- 和IP地址一样,都是32位
- 但子网掩码是由连续的1和连续的0组成
- 某一个子网的子网掩码具备网络号位数(网络号 + 子网号)个连续的1
将IP地址和子网掩码进行与运算后得到的就是网络号
无分类编址CIDR
- CIDR没有A、B、C类网络号,和子网划分的概念
- CIDR将网络前缀相同的IP地址称为一个“CIDR地址块“
网络前缀是任意位数的
IP地址为193.10.10.129
,网络前缀有25位,所以主机号有7位。
相比原来的子网划分更加灵活
回到原来的问题
Q: 某公司有100名员工,每人配备一个计算机,请问该公司该申请哪种网络段?
如果使用CIDR来进行IP分配的话,只需要分配一个/25
(前缀有25位的)IP网络号就可以。
Q: 如果这个公司增加了100名员工,并拆分成两个部门?
如果是一个城市?
网络地址转换NAT技术
- IPv4最多只有40+亿个IP地址
- 早期IP地址的不合理规划导致IP号浪费
网络分为
-
内网地址
-
内部机构使用
-
避免与外网地址重复
-
三类内网地址
在不同公司内部或者家庭内部可以使用相同的内网IP地址,不会产生冲突
-
-
外网地址
- 全球范围使用
- 全球公网唯一
Q: 内网多个设备使用同一个外网IP请求外网的服务,外部怎么知道具体是哪个设备在请求的?
A: 使用网络地址转换技术(NAT,Network Address Translation)
-
用于多个主机通过一个公有IP访问互联网的私有网络中
-
在本地路由器中进行,将内网的IP地址和端口号转换成外网的IP地址和端口号与外界通信
-
然后接收到外界的数据后将外网地址和端口号映射到本地内网的IP地址和端口号
NAT减缓了IP地址的消耗,但是增加了网络通信的复杂度。
ICMP协议详解
Internet Control Message Protocol 网际控制报文协议
用于辅助IP协议进行数据传输的。
ICMP协议可以报告错误信息或者异常情况。
ICMP报文格式
-
ICMP报文首部
-
8位类型:区分报文类型
-
差错报文:回应网络错误
-
查询报文:查询网络信息(ping程序使用ICMP报文查看目标是否可到达(类型值为8))
-
-
8位代码:进一步细分不同的条件
比如重定向报文,使用代码值0代表对网络重定向,代码值1表示对主机重定向。
-
16位校验和字段:对整个报文进行循环冗余校验(CRC),以检验报文在传输过程是否损坏。
-
ICMP协议的应用
-
Ping应用
主要使用ICMP协议的询问报文,类型值是0或8
网络排查过程
- Ping回环地址127.0.0.1
- Ping网关地址(路由器地址)
- Ping远端地址
-
Traceroute应用
tracert [website]
探测IP数据报在网络中走过的路径,应用了TTL为零时发送ICMP报文的机制。
TTL:IP数据报文在网络中的寿命,每经过一个设备TTL减1,当TTL等于0时,网络设备必须丢弃该报文,会发送一个ICMP终点不可达差错报文。
比如使用Traceroute来探测IP数据报从A到B的路径,先发送一个TTL = 1的报文,到达第一个中型网络后TTL等于0返回一个ICMP终点不可达差错报文并返回中型网络的IP地址,A记录后再发送一个TTL = 2的报文,同理,直到报文成功到达B。
网络层的路由概述
-
路由表
- 下一跳地址是怎么来的?
- 下一跳地址唯一吗?
- 下一跳地址是最佳的吗?
- 路由器那么多,他们是怎么协同工作的?
所以需要一个合适的路由算法
可以将现实生活中的网络连接抽象成一个图。
- 每一个顶点表示一个网络、路由器或计算机
- 每一条边表示一条网络路径
所以路由算法实际上是图论的算法
但网络环境复杂,每个节点的状态会发生变化因为互联网规模非常大,环境非常复杂,所以我们要对互联网进行划分。
-
自治系统(Autonomous System)
一个自治系统(AS)是出于一个管理机构下的网络设备群
AS内部网络自行管理,AS对外提供一个或多个出入口
这样就可以将路由系统分成两个层次:
- 自治系统内部路由的协议称为:内部网关协议(RIP、OSPF)
- 自治系统外部路由的协议称为:外部网关协议(BGP)
内部网关路由协议
RIP协议
-
距离矢量(DV)算法
- 每一个节点使用两个向量Di和Si
- Di:当前节点到别的节点的距离
- Si:当前节点到别的节点的下一节点是什么
- 每一个节点与相邻节点交换向量Di和Si的信息
- 每一个节点根据交换的信息更新自己的节点信息
- 每一个节点使用两个向量Di和Si
-
RIP协议的过程
Routing Information Protocol 协议
是使用DV算法的一种路由协议
-
RIP协议把**网络跳数(hop)**作为DV算法的距离
-
RIP协议每隔30s就交换一次路由信息
-
默认跳数 > 15的路由为不可达路由
过程:
- 路由器初始化路由信息(两个向量Di和Si)
- 对相邻路由器X发来的信息,对信息的内容进行修改(下一跳地址设置为X,所有距离加1)
- 检索本地路由,将信息中新的路由插入到路由表里面
- 检索本地路由,对下一跳为X的,更新为修改后的信息
- 检索本地路由,对比相同目的的距离,如果新信息的距离更小,则更新本地路由表
- 如果3分钟没有收到相邻路由的信息,则把相邻路由设置为不可达(16跳)
- 故障信息传递慢
- 因为无理由相信相邻路由器信息
- 视野不够,只能看到相邻路由器的信息,不能看到更远的信息
- 故障信息传递慢
优点:
实现简单、开销很小
缺点:
限制了网络的规模
-
OSPF协议
-
链路状态(LS)协议
-
向所有的路由器发送消息。(RIP只和相邻的路由器交换信息)
-
消息描述该路由器与相邻路由器的链路状态 (RIP只交换了跳数信息)
- 链路状态:距离、时延、带宽 …
- 链路状态可以由网络管理人员决定
-
只有链路状态发生变化时,才发送更新消息。(RIP每隔30s交换路由信息)
-
-
OSPF协议过程
Open Shortest Path First 开放最短路径优先
协议的核心是Dijkstra算法
过程:
-
向所有路由器发送消息
-
每个路由器都可以得到网络中的所有信息 -> 网络的完整拓扑
也称为“链路状态数据库”,是全网一致的。
-
-
消息描述该路由器与相邻路由器的链路状态
- OSPF协议更加客观,更加先进
-
只有链路状态发生变化时,才发送更新消息。
- 减少了数据的交换,更快收敛
五种消息类型:
- 问候消息(Hello)
- 链路状态数据库描述信息
- 链路状态请求信息
- 链路状态更新信息
- 链路状态确认信息
-
外部网关路由协议
BGP协议
Border Gateway Protocol 边际网关协议
运行在AS(自治系统)之间的一种协议(比如两个学校之间、两个公司之间)
- 为什么用?
- 互联网的规模很大
- AS内部使用不同的内部网关路由协议
- AS之间需要考虑网络特性以外的一些因素(政治、安全…)
BGP协议能够找到一条到达目的比较好的路由。
(比较好而不是最好,因为会有其他的因素需要考虑)
-
BGP发言人(speaker)
- 可以是在AS边缘的路由器
为什么有?
- BGP并不关心内部网络拓扑
- AS之间通过BGP发言人交流信息
- BGP speaker可以人为配置策略(比如阻止某些敏感信息进入AS)
传输层
UDP协议详解
User datagram Protocol 用户数据报协议
UDP是一个非常简单的协议
数据报:应用层所传输来的完整的信息
拿到数据报后不合并、不拆分,封装后直接传输出去
UDP数据报
-
UDP是无连接协议
- 连接 or 无连接
- 连接:在传输信息前就建立连接(比如打电话,将电话拨通,打完电话挂断表示断开连接)
- 无连接:不建立连接直接传输信息
- 连接 or 无连接
-
UDP不能保证可靠的交付数据
无法保证数据在网络中是否丢失。
-
UDP是面向报文传输的
不会对收到的应用层数据进行任何处理,直接封装
-
UDP没有拥塞控制
- 不能感知网络是否拥塞,无论网络是否拥塞直接发送
-
UDP首部开销很小
TCP协议详解
Transmission Control Protocol 传输控制协议
-
TCP是面向连接的协议
-
TCP的一个连接有两端(点对点通信)
-
TCP提供可靠的传输服务
-
TCP提供全双工的通信
-
TCP是面向字节流的协议
不是按块处理的,而是按字节处理的
可能会对数据进行合并或分拆以更好的传输数据
TCP协议报
除了TCP选项和填充外,TCP协议头部固定有20字节
-
序号
-
范围:0 ~ 2^32 - 1
-
用来标记字节,一个字节一个序号
-
序号这一项代表了数据首字节序号
-
-
确认号
- 范围:0 ~ 2^32 - 1
- 也是用来标记字节,一个字节一个序号
- 代表期望收到下一段数据的首字节序号
如果确认号为N:则表示N - 1序号的数据都已经收到
-
数据偏移
- 占4位:0 - 15,单位为32位字
- 数据偏离首部的距离
-
TCP标记
- 占6位,每位各有不同意义
-
窗口
-
占16位:0 ~ 2^16 - 1
-
指明允许对方发送的数据量
和确认号配合使用,比如确认号是501,窗口为1000
那么就是需要收到序号为501 - 1000的数据
-
-
紧急指针
- 紧急数据(URG = 1)的情况下
- 指定紧急数据在报文的位置
-
TCP选项
-
最多有40字节
-
支持未来的拓展
-
TCP协议的可靠传输
可靠传输的基本原理
停止等待协议
- 理想无差错情况:
-
停止等待:
- 发送方在发送消息1后处于停止状态,等待接收方发送确认消息1过来,收到确认消息后再生成消息2发送
- 接收方在收到发送方的消息前处于停止状态,等到发送方发送消息来,收到消息后生成确认消息发送,再停止等待下一条信息
-
出差错的情况:
**超时重传:**发送方在发出消息1后一直没收到接收方的确认消息,于是过一段时间后重新发送消息1。
- 发送的消息在路上丢失了
- 确认的消息在路上丢失了
- 确认的消息很久才到
**超时定时器:**每发送一个消息,都需要设置一个定时器
-
总结:
- 停止等待协议是最简单的可靠传输协议
- 停止等待协议对信道的利用效率不高
连续ARQ协议
在停止等待协议基础上改造
Automatic Repeat Request 自动重传请求
-
批量发送消息,只要收到了前面的确认消息就把滑动窗口向前滑动
-
并不需要对每一个报文都确认,而是采用累积确认的方法。
如果第一个窗口发送了6条消息,收到了5个确认,那么就把窗口往前滑动5格
TCP协议可靠传输
- 基于连续ARQ协议(滑动窗口、累积确认)
- TCP的滑动窗口以字节为单位
效率并不是很高,因为如果从23重传,25和27还要重新传一遍。
-> 选择重传
-
指定需要重传的字节
-
因为每一个字节都有唯一32位序号,所以可以指定需要重传的字节号是什么
-
存储在TCP选项中的
-
TCP选项最多40个字节,所以最多存储10个序号
-
一般是指需要重传的字节段的边界
-
TCP协议的流量控制
-
流量控制:指让发送方发送速率不要太快
-
使用滑动窗口来实现的
- 窗口指明允许对方发送的数据量
当接收方处理完收到的600字节的数据,告诉发送方现在窗口大小为1000,但这个消息丢失了
发送方会一直等待,等待接收方处理完数据将窗口调大。
但接收方也会一直等待,因为已经发完了窗口调大的信息,发送方却一直没有发送消息来。
–>> 死锁局面
如何解开?
- 坚持定时器
- 当接收到窗口为0的消息,则启动坚持定时器
- 坚持定时器每隔一段时间发送一个窗口探测报文
TCP协议的拥塞控制
- 一条数据链路经过非常多的设备
- 数据链路中各个部分都有可能成为网路传输的瓶颈
拥塞控制和流量控制的区别?
- 流量控制考虑点对点的通信量控制
- 拥塞控制考虑整个网络,是全局性的考虑
如何判断拥塞?
- 报文超时则认为是拥塞。
- 但不只是拥塞会导致报文超时,网络故障也有可能导致报文超时。
慢启动算法
- 有小到大逐渐增加发送量
- 每收到一个报文确认,就增加一些(指数增长)。增长到慢启动阈值就不会增长,启动第二个算法。
拥塞避免算法
- 维护一个拥塞窗口的变量
- 只要网络不拥塞,就试探着将拥塞窗口调大
- 在网络不拥塞的情况下尽可能多的发送数据
TCP连接的建立与释放
-
回顾:TCP标记(6个字节)
重点看:ACK、SYN、FIN
三次握手
- 第一次握手:发送SYN=1的报文,说明这是一个连接请求报文。并同步自己的序列号seq = x
- 第二次握手:SYN = 1 :连接请求报文;ACK = 1, ack = x+1:确认号有效, 希望收到序列号为x+1;并携带自己的序列号seq = y
- 第三次握手:ACK = 1,ack = y + 1 :确认号有效,希望收到序列号为y + 1的数据;同步自己的序号为x + 1
为什么发送方要发出第三个确认报文呢?
-
避免已经失效的连接请求报文传到对方,引起错误
发送方第一次发送的报文过了很久才发送到第二次,因为发送方很久没有收到确认信息,所以超时重传了第二次报文,第二次报文很快就到达了接收方,接收方对第二次报文进行应答,那么第一次发送的报文就是失效的请求报文。
如果只握手两次会产生什么后果?
接收方会回应两次,建立两次连接,这样是错误的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VwHuIzo5-1641860742190)(计算机网络.assets/image-20220109181321361.png)]
在收到接收方的第一次回应后,发送方发送第三次握手,然后与接收方建立连接。接收到第二次接收方的回应后不会再次发送第三次握手,所以避免了再次建立连接。
四次挥手
- 第一次挥手: FIN = 1,释放连接;序列号seq = u
- 第二次挥手: ACK = 1, ack = u + 1,已经收到释放连接请求,希望收到序列号为u+1的信息;序列号seq = v
- 第三次挥手:接收方发送FIN = 1释放连接请求
- 第四次挥手:发送方收到接收方的释放连接请求并确认收到序列号为w的消息。
主动发送释放连接的一方在发送第四次挥手信息之后有等待计时状态!
-
等待计时器
等待2MSL的时间
MSL:Max Segment Lifetime 最长报文段寿命,一般建议设置为2分钟
为什么需要等待2MSL时间?
-
确保最后一个报文到达接收方
- 因为最后一个报文没有确认信息
- 确保发送方的ACK可以到达接收方
- 如果2MSL时间内没有收到最后一次挥手的报文,接收方会重发
-
确保当前连接的所有报文都已经过期
-
套接字与套接字编程
-
网络进程是用端口(Port)来标记的
-
端口(Port)使用16比特位表示(0 - 65535)
网络IP和端口的组合叫套接字(socket)
表示TCP连接的一段。
-
通过套接字可以进行数据的发送或接收
-
TCP是点对点的通信,所以一个TCP连接由两个套接字组成,由两个套接字可以唯一指定一个TCP连接。
-
TCP连接一个客户端和一个服务端
-
服务端(被动连接的一方):
-
客户端(主动连接的一方):
-
网络套接字和域套接字的区别
应用层
DNS详解
Domain Name System 域名系统
将IP+端口转换成人类可以理解的域名,部署在域名服务器上
域名
-
由点、字母和数字组成
-
点分割不同的域
-
域名可以分为顶级域、二级域、三级域
www.taobao
com为顶级域
taobao为二级域
www为三级域
-
-
顶级域
-
国家
cn中国、uk英国、us美、ca加拿大
-
通用
com、net、gov、org
-
-
二级域
aliyun、amazon、google等
DHCP协议详解
Dynamic Host Configuration Protocol 动态主机设置协议
-
是一个局域网协议,应用UDP协议的应用层协议
-
提供即插即用联网
不需要重新配置网络
临时的IP并不能永久使用,是有租期的
-
租期
在一段时间可以使用这个IP,如果需要持续使用的话可以续租
-
过程:
- DHCP服务器监听默认端口:67
- 当一个新的设备加入后,主机使用UDP协议广播DHCP发现报文
- DHCP服务器发出DHCP提供报文
- 主机向DHCP服务器发出DHCP请求报文
- DHCP服务器回应并提供IP地址
HTTP协议
协议详解
HyperText Transfer Protocol 超文本传输协议
-
超文本?
“超级文本” “带超链接文本”
-
路径:
http(s): //<主机>:<端口>/<路径>
-
主机:可以是IP或者域名
-
端口:
-
一般是80端口(HTTP协议端口)
-
或者443端口(安全的HTTP协议端口)
-
-
-
HTTP协议是可靠的数据传输协议
底层是TCP协议(可靠)
一般传输文本、图片、视频、音频等web内容
-
Web服务器:
-
硬件部分
-
软件部分
-
HTTP请求
- GET 获取指定的服务器资源
- POST 提交数据到服务端
- DELETE 删除指定的服务端资源
- UPDATE 更新指定的服务端资源
怎么指定资源呢?
-
在地址中指定
请求报文和应答报文 -
请求报文:
-
应答报文:
状态码:
-
-
工作结构
-
Web缓存
-
Web代理
-
正向代理
-
反向代理
-
-
CDN
Content Delivery Network 内容分发网络
-
爬虫
- 会增加网络拥塞
- 损耗服务器资源
HTTPS协议详解
-
为什么要用HTTPS?
-
因为HTTP是明文传输的,为了提高网络安全(保护账号密码、个人信息等)
-
HTTPS(secure)是安全的HTTP协议
-
加密模型
对称加密
秘钥一致!
非对称加密
-
A和B是拥有一定数学关系的一组秘钥
- 私钥:自己使用,不对外公开
- 公钥:给大家使用,对外公开
-
数字证书
是可信任组织颁发给特定对象的认证
-
可信任组织
客户端和服务端都认为是公平且安全的组织
-
特定对象
既可以是人也可以是服务器或组织
-
-
SSL(Secure Sockets Layer:安全套接层)
- 保证数据安全和数据完整
- 对传输层数据进行加密后传输
HTTPS协议过程
SSL安全参数握手
双方分别生成秘钥,没有经过传输就可以降低秘钥泄露的可能性。
版权声明:本文标题:【计算机基础】计算机网络 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1729003030h1305619.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论