计算机网络
前言
这个是跟哔哩哔哩湖科大教书匠的视频做的笔记,以及自己的思考与总结
什么是计算机网络
计算机网络是由通信介质将地理位置不同的且相互独立的计算机连接起来,实现数据通信与资源共享。
个人觉得,计算机网络就是实现如何将数据可靠,快速的从一个设备传输到另一个设备
专用术语
实体
实体是指任何可发送或接受信息的硬件或者软件
对等实体是指位于同一个层次的实体
协议
协议是控制两个对等实体进行逻辑通信的规则的集合
三个要素:
- 语法:定义交换信息的格式(头部)
- 语义:通信双方需要完成的操作(报文)
- 同步:定义收发双方的时序关系(tcp建立连接的过程)
服务
在协议的控制下,两个对等实体间的逻辑通信使得本层能够向上一层提供服务
协议是水平的,服务是垂直的
每层之间的数据类型:传输层的报文,网络层的分组,数据链路层的帧,物理层的比特流
计算机网络体系结构
体系结构的作用:
- 分层
- 每一层必须要完成的功能
- 每一层使用的协议(TCP/IP体系结构)
分层的必要性
计算机网络是个非常复杂的系统,分层可以将庞大而复杂的问题,转化为若干个较小的局部问题,而这些较小的局部问题比较容易研究和处理
两个设备之间需要考虑的问题(物理层的问题):
- 采用什么传输介质
- 使用什么样的物理接口
- 使用怎么样的信号表示比特0和1
这个就交给物理层去解决(传输介质严格来说不属于物理层)
在一个网络上,需要考虑的问题(数据链路层的问题):
- 如何标识网络中的各个主机(如何得知数据发给谁,主机如何判断是不是发给我的),可以采用mac地址
- 解决上面的问题后,如何从信号所表示的比特流中区分地址和数据
- 如何解决线路的冲突的问题(线路争用)(总线型链路,现在已经淘汰了,采用交换机来替代)
在多个网络上,需要考虑的问题(网络层的问题):
- 如何标识网络以及网络中的各个主机
- 路由器如何转发分组,如何进行路由选择
在不同的主机上,需要考虑的问题(传输层的问题):
- 如何解决进程之间的网络通信问题
- 出现传输错误时,如何处理
因特网
名词解释
网络是由若干个结点以及连接这个结点的链路构成(这个一般指的是本地通过交换机连接起来的结点)
互联网是由多个网络通过路由器连接起来的,构成一个覆盖范围更大的网络 (网络的网络)
因特网是世界上最大的互联网
internet 是一个通用名词,泛指多个计算机网络互连而成,网络之间的通信协议可以任意
Internet 是一个专有名词,特指因特网,采用TCP/IP 协议簇作为通信规则,前身是ARPANET
因特网发展阶段
1969 第一个分组交换网ARPANET
70年代中期,研究多种网络之间的互连
1983年,TCP/IP协议成为ARPANET的标准协议,这个也是因特网的诞生时间
1983年,NSF 围绕六个大型计算机中心建设NSFNET(主干网,地区网,校园网),三级结构
1990年 ARPANET 任务完成,正式关闭
1991年 美国政府将因特网主干网交给私人公司经营
1993年 NSFNET 逐渐被若干个商用主干网替代,政府机构不在负责运营,让各种因特网服务提供商ISP 来运营
1994年 万维网www技术促使因特网迅猛发展
1995年 NSFNET 停止运作,因特网彻底商业化
因特网的标准化工作
因特网的标准化工作对因特网的发展起到了非常重要的作用
因特网在制定其标准上的一个很大的特点是面向公众
- 因特网的所有RFC 技术文档都可以从因特网上免费下载
- 任何人都可以随时发电子邮件发表对某个文档的建议和意见
因特网的组成
边缘部分: 由所有连接在因特网上的主机组成
核心部分: 由大量网络和连接这些网络的路由器组成 ,为边缘部分提供连通性和交换服务
交换方式
电路交换
电路交换机接通电话线的方式称为电路交换
电路的三个步骤:
- 建立物理连接(分配通信资源)
- 通话(一直占用通信资源)
- 释放物理连接(归还资源)
分组交换
发送方构造报文成分组,发送分组
路由器 缓存分组,转发分组 (存储转发)
接收方 接收分组,还原分组成报文
分组交换有两种方式:数据报和虚电路
虚电路是一种逻辑电路,就是每一次分组都和上一次分组的路径一样,这样到达接收端的顺序是一样的,不会失序,也不会重复分组
报文交换
不限制数据报大小,也是存储转发,跟分组交换差不多,分组交换就是多次的固定长度的报文交换,因为分组就是报文分割而成,现在报文交换基本被分组交换取代
三个交换方式对比:
交换方式 | 优点 | 缺点 |
---|---|---|
电路交换 | 1.通信时延小(数据直达),2.有序传输,3.没有冲突(不争用物理线道),4.适用范围广(适用模拟信号和电路信号),5.实时性强,6.控制简单 | 1.建立连接时间长,2.线路独占,使用效率低,3.灵活性差(只要线路坏了,就要重新建立连接),4.难以规格化 |
报文交换 | 1.无需建立连接,2.动态分配线路(选择合适的线路),3.提高线路可靠性(出现故障,重新选择路线),4提高线路利用率(不固定占用线路,只有发送的时候占用),5.提供多目标服务(一个结点可以发往多个目的地址) | 1.引起了转发时延(需要存储转发),2.需要较大的存储缓存空间(不限制报文大小),3.需要额外的信息量(报文头部) |
分组交换 | 1.无需建立连接,2.线路利用率高,3.简化了存储管理(相对报文而言,分组的大小固定),4.加速传输(后一个分组的存储与前一个分组转发可以同时进行),5.减少出错概率和重发数据量(分组比报文小,出错概率会低一些,即使出错了,重发的数据量就会变少,只需要重传分组) | 1.引起转发时延(存储转发),2.需要额外的信息量(分组头部),3.对于数据报服务,存在失序,丢失,重复分组的问题,还原原始报文比较麻烦,对于虚电路服务,存在呼叫建立,数据传输,虚电路释放的三个过程 |
计算机网络性能指标
速率
单位时间内能传输的比特数量
速率中的单位k代表10^3,M代表10^6,G代表10^9
这道题应该这么算:
1 | 100*2^20*8/100*10^6 = 2^23/10^6 = 8.388608s |
带宽
在模拟信号系统中,它表示信号所包含的各种不同频率成分所占据的频率范围 ,单位:Hz
在计算机网络中,用来表示网络的通信线路所能传输数据的能力,带宽是一个线路的最高速率
吞吐量
表示单位时间内,通过某个网络,信道,接口的数据量
时延
表示一个分组到达目的主机需要的时间,从主机到发送地址,一般需要经历以下几个时延
发送时延(由网卡的发送速率,信道带宽,接口速率决定,取其中的最小值),分组长度(b)/发送速率(b/s)
传播时延 信道长度(m)/电磁波传播速率(m/s)
常用传输媒体的电磁波传播速率
- 自由空间: 3*10^8 m/s
- 铜线: 2.3*10^8 m/s
- 光纤: 2.0*10^8 m/s
处理时延(多个路由器要处理) 这个很难通过计算公式计算,(包括排队时延和处理时延)
我们单纯的认为发送时延占主导还是传播时延占主导,得具体情况具体分析
增加数据量只增加发送时延,不影响传播时延,传播时延永远是最后一个比特的信号发送完到所有比特信号到目的地址的间隔
时延就是最后一个比特到终点的时间,甭管你多少个分组,在多段链路上(按顺序来发送),计算公式就是: n代表分组数量,m代表链路数量
单个分组发送时延*N(相当于发送最后一个报文的时延)+发送时延*m-1(最后一个分组的后续结点总发送时延)+每段链路的传播时延*m(最后一个分组的传播时延)
时延带宽积
时延带宽积 = 传播时延 * 带宽, 意思就是,当发送的第一个比特到达目的地后,发送端就发送了时延带宽积个比特的数据了
往返时间(RTT)
我们有时候需要知道双向交互一次需要的时间,因此RTT也是一个重要的性能指标
利用率
信道利用率: 表示某个信道有百分之几的时间是被利用的
网络利用率: 表示全网络的信道利用率的加权平均
信道利用率不是越高越好,根据排队论,当某个信道的利用率增大时,排队的分组也会越多,引起的时延也会迅速增加
丢包率
即分组丢失率,指在一定时间范围内,传输过程中丢失分组数量与总分组数量的比率
丢包率分为接口丢包率,结点丢包率,链路丢包率,路径丢包率,网络丢包率
分组丢失主要两种情况:
- 分组在传输过程中出现误码
- 分组到达队里已满的分组交换机(路由器)时就会被丢弃
丢包率能够反映网络的拥塞情况
物理层
物理层考虑的是怎样才能在连接各种计算机的传输媒体上传输比特流
物理层为数据链路层屏蔽了各种传输媒体的差异,是的数据链路层只需要考虑如何完成本层协议和服务,而不必考虑网络的具体传输媒体是什么
传输媒体
导引型(有硬件传输): 双绞线,同轴电缆,光纤,电力线
非导引型(自由空间): 微波通信(2~40GHz)
传输方式
串行传输,并行传输
同步传输:字节紧凑传输,需要双方时钟同步(外同步:增加一条时钟信号线,内容部,将同步信号编码到发送数据中一起传输)
异步传输: 字节之间可以不用紧凑传输,字节内需要同步
单向通信(单工): 广播
双向交替通信(半双工):对讲机
双向同时通信(全双工): 电话
编码与调制
数据是运送消息的实体
码元:构成信号的一段波形
不归零编码(不采用): 一个码元正电平代表1,负电平代表0,额外还需要一个同步信号同步接收码元,不然怎么区分多个相同的码元
归零编码: 这个其实就是将同步信号写在了数据里面,正电平代表1,负电平代表0,0电平代表码元结束,缺点是编码效率低,相当于传输一个比特就得多搞一个比特
曼彻斯特编码: 跳变就表示数据,负跳变代表1,正跳变代表0,跳变是在中间位置,所以对方主机能够知道一个一个码元的时间是多少
差分曼彻斯特编码:如果在最初信号的时候,即第一个信号时:如果中间位电平从低到高,则表示0;如果中间位电平从高到低,则表示1;否则就看当前码元开始的位置与上一次码元的结束部分电压是否相同,相同则表示0,不同则表示1
就是通过中间跳变来告诉对方主机,我的一个码元时间周期是多长
模拟信号:
通过模拟信号,可以产生很多种码元,这样的话,一个码元就可以表示多个比特
信道的极限容量
影响失真的因素有: 码元传输速率,信号传输距离,噪声干扰,传输媒体质量
这几个公式不要搞混了:
理想低通信道的最高码元传输速率 = 2*带宽(这里是带宽,而不是数据传输速率)
传输速率 = 码元传输速率或者叫波特率 * 码元能携带的比特数量
数据链路层
链路: 就是从一个结点到相邻结点的一段物理线路,而中间没有任何其他交换结点
数据链路: 指把实现通信协议的软件和硬件加到链路上,就构成了数据链路
封装成帧
将上层交付的协议数据单元添加帧头和帧尾使之成为帧
- 帧头和帧尾中包含有重要的控制信息
- 帧头和帧尾的作用之一就是帧定界
透明传输是指数据链路层对上层的交付的传输数据没有任何限制,就好像数据链路层不存在一样.
当上层传输的数据与帧头和帧尾定界符冲突的时候,有下面方法可以解决:
- 如果是面向字节的物理链路,可以使用字节填充,增加转移字符的方式实现
- 如果是面向比特的物理链路,使用比特填充的方法, 可以每五个1就添加一个0的方法实现(这个要看具体协议对应的帧头和帧尾长什么样,我这里只是举个例子)
考虑到差错控制等因素,每一种数据链路层协议都规定了帧的数据部分的长度上限,即最大传送单元MTU
差错检测
实际的通信链路是不理想的,比特在传输的过程中,可能会产生差错,1可能变成0,0也可能变成1,这被称为比特差错
奇偶校验
在待发送的数据后面添加一位奇偶校验位,使得整个数据(包含校验位)中1的个数为奇数(奇校验)或者偶数(偶校验)
这个校验方法是有缺陷的,如果同一个种差错出现偶数次,这样就检测不出来差错
循环冗余校验
- 收发双方约定好一个生成多项式
- 发送方基于发送的数据和生成多项式计算出差错检测码(冗余码),将其添加到戴传输数据后面一起传输
- 接收方通过生成多项式计算收到的数据是否产生了误码
计算过程如上图所示
做个练习吧
再来个题吧
字有点丑哦,不要介意
检错码只能检测帧在传输过程中出现了差错,并不能定位错误,因此无法纠正错误,要想纠正传输中的差错,可以使用冗余信息更多的纠错码进行向前检错,但是纠错码的开销大,在计算机网络中较少使用(也不是不使用)
循环冗余校验CRC有很好的的检错能力(漏检率非常低),虽然计算比较复杂,但是硬件易于实现,因此被广泛用于数据链路层
如果检测到数据出现了错误,是告诉对方重传还是丢弃该帧,取决于数据链路层向上层提供的是可靠传输还是不可靠传输
可靠传输
一般情况下,有线链路的误码率比较低,为了减小开销,并不要求数据链路层向上提供可靠传输服务,即使出现了误码,可靠传输的问题可以交给上层处理,比如以太网
无线链路易受干扰,误码率比较高,因此要求数据链路层必须项上层提供可靠传输,比如802.11无线局域网
比特差错只是传输差错中的一种,还有网络层的分组呢,比如分组丢失,分组失序,分组重复
可靠传输不只在数据链路层,而是贯穿整个体系
实现机制
停止-等待协议(SW)
等接收方确认接收分组后才发送 下一个分组
停止等待的信道利用率比较低
这题我有点蒙,这个传输时延居然指的是确认帧的发送时延,做题的时候,还是按公式来吧
回退N帧(GBN GO-Back-N)
也可以叫做滑动窗口协议吧,嘿嘿,这个算是对sw协议的一种改进,sw必须等待上一个分组被确认了,才能继续发送下一个分组,而gbn可以一次发送多个分组,如果某个分组超时了,那么再重传这个分组后面的所有分组,所以这里是不是又有改进啊,嘿嘿,这是后面的选择重传
维持一个发送窗口,可以连续发送这个窗口里面的分组,接收方只能依次接收分组,如果出现当前待接收分组序号与收到的序号不同,则会丢到分组,并向发送端发送前一个分组的确认分组.如果一个分组发生了超时重传,那么这个分组后面已经发送的分组也要重新发送,这就是回退N帧协议
只要接收方确认了某个序号,那么说明这个序号之前的分组,它都收到了
选择重传协议(SR selective Request)
发送方维持一个发送窗口,可以依次将窗口内的数据全部发送出去,接收方可以不按顺序接收,每接收一个分组,就回传一个确认分组,发送方只有当最前面的分组收到确认分组后,才能向后挪动窗口
注意回退N帧的最大窗口值是2^n -1 而 选择重传的最大窗口值是2^(n-1)
点对点协议ppp(Point-to-Point Protocol)
ppp 协议为在点对点链路传输各种协议数据报提供了一个标准方法
- 对各种协议数据报的封装方法(封装成帧)
- 链路控制协议LCP,用于建立,配置以及测试数据链路的连接
- 一套网络控制协议NCPs 其中的每一个协议支持不同的网络层协议
向上层提供的是不可靠的服务
媒体接入控制
共享信道要着重考虑的一个问题就是如何协调多个发送和接收站点对一个共享传输媒体的占用,即媒体接入控制MAC
CSMA/CD 协议
CSMA/CA协议
数据包在传输的过程中,不经过nat,源ip不会发生变化,不经过dnat 目的ip不会发生变化,而物理层每转化一次就变化一次
ARP协议
这个协议通过对方ip地址找到对方的mac地址,这个协议有什么用呢?,在网络与网络之间,这个协议没什么用(没什么主要作用,还是要通过这个协议通过ip找到mac地址),这个协议主要用在网络内部,网络与网络之间传递的时候,我们并不需要关心mac地址,如果目的地址的ip与相邻的某个路由器的ip在同一个网段,那我只要把数据给他就行了,然后数据到了某个网络后,需要通过ip找到对方的mac地址(这个就是ARP协议),然后在链路上传播
使用集线器的以太网在逻辑上仍然是一个总线网,各站共享总线资源,使用的还是CSMA/CD协议
集线器只工作在物理层,它的每个接口仅简单的转发比特,不进行碰撞检测,还是由主机网卡自行检测
集线器就类似主线结构,主机发送单播帧的时候,会传递到这个以太网下的所有设备
交换机只会将单播帧转发给对应设备(需要建立在已经通过ARP学习好了的情况)
交换机自学习和转发帧
- 交换机工作在数据链路层
- 交换机收到帧后,在帧交换表中查找帧的目的Mac地址所对应的接口号,然后通过该接口转发帧
- 交换机是一种即插即用设备,刚上电启动时内部的帧交换表是空的,随着网络中的主机间的通信,交换机通过自学习算法自动主键建立起帧交换表
帧转发的流程:
- 登记,先记录自己的Mac地址与接口的对应关系
- 转发, 如果有目的Mac地址,就明确的准发给对应的接口,如果没有目的Mac地址就全部转发,
交换机丢弃帧的情况:
- 如果入口接口与出口接口相同,交换机会丢弃这个帧
做道题吧
以太网交换机的生成树协议STP
思考一个问题,我们如何提高以太网的可靠性?
答案就是增加冗余链路,如果只有单一的连通链路,那么其中任意一条链路坏了,那么就会有主机无法通信,如果怎加了冗余链路,可以保证如果坏了一段链路也能保证网络的连通.
冗余链路会带来负面效应,比如网络环路,网络环路会造成以下问题:
- 广播风暴,多个广播帧(这些帧是相同的)在链路里面循环传播,不会停止,会大量消耗网络资源,是的网络无法正常发送其他数据帧,而且会导致交换机的帧交换表震荡,就是这个帧的源Mac地址对应的接口号一直在变
使用交换机的生成树协议可以避免这种网络环路带来的各种问题
这种协议可以构建一个逻辑上没有环路的网络,就是物理连接上有环路,但是可以让某些链路不使用,等到这个生成树上的某些链路坏掉后,在把这些不用的链路拿出来重新计算,生成逻辑上没有环路的网络
虚拟局域网VLAN
是一种将局域网内的设备划分成与物理位置无光的逻辑组技术,这些逻辑组具有某些共同的需求
属于同一个VLAN的设备才能广播通信,不同的VLAN的设备不能广播通信
这样肯定就需要交换机具有更多的功能了
- 支持IEE 802.1Q帧
- 交换机的需要支持更多的端口类型
acces端口:用于主机与交换机的连接
Trunk端口: 用于交换机之间或者交换机与路由器互联,可以属于多个VLAN
Hybrid端口: 可以任意设备互联
网络层
网络层的主要任务是实现网络互连,进而实现数据包在网络之间的传输
需要解决两个问题:
- 网络向运输层提供什么样的服务
- 网络层寻址问题
- 路由选择问题
面向连接的虚电路服务
先建立网络层的连接,也就是虚电路,双反沿着已建立的虚电路发送分组,每个分组发送经历的路径都一样.如果再配上可靠传输的网络协议,那么分组就能正确的到达接收方(分组按序到达,没有差错)
无连接的数据报服务
- 可靠通信应当由用户主机来保证
- 不需要建立网络层的连接
- 每个分组可走不同的路径
- 每个分组的首部必须携带目的主机的完整地址
- 这种通信传送的分组可能误码,丢失,重复,失序
IPv4地址概述
分类编制
注意啊,主机号是全0和全1的才不能分配给主机和路由器
他这个分类是按照网络号位数来分配的
- A类: 网络号8位 0开头 网络号 00000001 - 01111110 1-126 01111111不能取,这个是回环地址, 可分配的ip地址 (2^8 -2)*(2^24-2)
- B类: 网络号16位 10开头 网络号 128.0 - 191.255 可分配的ip 2^(16-2)*(2^16-2)
- C类: 网络号 24 为 110开头 网络号 192.0.0 - 223.255.255 可分配ip地址 2^(24-3)*(2^8-2)
- D类: 多播地址 1110开头
- E类: 保留地址 1111开头
划分子网的ip地址
借用一些主机号部分用来划分子网
- 32比特的子网掩码可以表明分类ip地址主机号部分被借用了几个比特作为子网号
划分的子网为2^2 = 4
默认子网掩码就是网络号全取1,主机号全取0
无分类编制的IPv4地址
路由聚合
将自己知道的路由信息,将这些ip分别对应的共同前缀告诉其他路由器
- 网络前缀越长,地址块越小,路由越具体
- 路由器查表分组转发分组的时候发现有多条路由可选,则选择网络前缀最长的那条,这称为最长前缀匹配
IPv4地址的应用规划
定长子网掩码
划分子网的时候,用定长的子网掩码,每个子网划分的ip数量一样多,这样容易浪费ip
变长的子网掩码
划分子网的时候,可以使用变长的子网掩码,按需分配,这样不容易浪费ip或者浪费的ip数量比较少
- 划分块的时候,尽量先给大的块分配ip地址
题目
IP数据报的发送与转发过程
主机ip数据报发送流程: 首先通过路由表查找到目的地址应该走的路由,如果找不到,则会丢弃ip数据报,并且提示不可到达,如果找到了对应的路由信息,如果目的地址跟自己在同一个网络,则通过ARP协议直接找到目的地址的Mac地址,然后将帧发送给交换机,交换机根据Mac地址与接口的对应关系表,将帧转发给对应的接口,如果目的地址跟自己不在同一个网络,则需要通过ARP协议找到下一跳的Mac地址(而不是目的地址的Mac地址),然后通过交换机将这个数据报发送给它
路由器转发流程: 首先检查数据报首部是否出错,如果出错则丢弃数据报,然后通告源主机,如果没有出错,就根据目的地址在路由表中查找匹配的条目,如果找到匹配条目(将目的地址与路由表中的子网掩码做与,看是否符合路由表中的目的网络地址,如果有多个匹配的,则选择网络前缀最长的路由),则通过ARP协议找到Mac地址然后通过交换机发送帧给他,如果找不到就丢弃ip数据报并且告知源主机
为了防止ip数据报在路由环路中永久兜圈,在ip数据报首部设有生存时间TTL字段.ip数据报进入路由器后,TTL字段的值减一,若TTL的值大于0则被路由器转发,否则就丢弃
路由选择
因特网采用的路由选择协议的主要特点:
- 自适应: 动态路由选择,能够较好地适应网络状态的变化
- 分布式: 路由器之间交换路由信息
- 分层次: 将整个因特网分为许多较小的自治系统
路由器结构
路由信息协议RIP
基于距离向量
- 路由器刚开始工作的时候,只知道自己到直连网络的距离为1
- 每个路由器仅和相邻路由器周期性地交换并更新路由信息
- 若干次交换和更新后,每个路由器都知道到达本AS内各网络的最短距离和下一跳地址,称为收敛
距离超过16代表不可达
更新规则
开放最短路径优先OSPF
基于链路状态
链路状态是指本路由器都和哪些路由器相邻,以及相应链路的代价
思科路由器中OSPF计算代价方法:100Mbps/链路带宽
传输层
应用层
协议
ppp
1 | 解决帧的区分的问题,物理层可看不懂哪里是一帧一帧,它只知道这是个比特流,所以我们用协议规定,哪里是一帧 |
ARP
1 | 通过ip找到mac地址 |
交换机,会记录每个物理地址对应的接口,每一个主动发起数据的接口对应的物理地址才会被记录在表中,如果找不到目的物理地址,则会全端口转发
为了增加网络的可靠性,一般会使用冗余链路,但是冗余链路具有环状,会导致广播风暴,交换机的帧交换表震荡,这个时候可以使用生成树协议,交换机自动关闭某些端口,形成树状结构,这样就没有环路,当某一条链路不能够用的时候,又将重新计算,生成一个新的树状结构
因特网网络层用的就是数据报的方式
A类网络 拥有网段 126 个 每个网段可分配主机数量2^24 - 2 = 16777214
B类网络 拥有网段 16384 个 每个网段可分配主机数量2^16 -2 = 65534
C类网络 拥有网段 2097152 个 每个网段可分配主机数量 2^8 -2 = 254
D类网络 是广播地址 不区分网络号与主机号 以 1110 开头的都是
局域网ip
网络类别 | IP 地址范围 | 网络数 | 可分配ip个数 |
---|---|---|---|
A 类网 | 10.0.0.0~10.255.255.255 | 1 | 2^24 |
B 类网 | 172.16.0.0~172.31.255.255 | 16 | 16*2^16 |
C 类网 | 192.168.0.0~192.168.255.255 | 255 | 255*2^8 |
判断一个ip地址与自己是不是在同一网络下,只需要将ip与子网掩码做与运算,看得到的ip是否相同就行
路由器也成为默认网关
传输层的端口,是逻辑端口,只是为了区分服务而存在的…
几个概念:
发送窗口:
拥塞窗口:
慢开始门限值:
tcp:
-
滑动窗口: 发送端一开始发送几个连续的tcp报文,接收端每接收一个报文时,会向客户端发送确认报文,以及窗口大小,然后发送端根据窗口大小,跳整自己的发送窗口大小,如果接收端接收窗口为0,则停止发送,过一段时间后,会发送询问窗口大小的报文,如果还是0则重复这个操作,否则就发送tcp报文
-
拥塞控制算法:
慢开始算法: 每次拥塞窗口的值,都变成原来的两倍
拥塞避免算法: 每次拥塞窗口的值,只加一
快重传: 1.接收方接收到tcp报文时,立即发送确认报文 2. 接收方接收到失序的报文时,就要说明自己接收到了报文,要说明重复确认,以前的报文没收到. 3 接收方接收到了三次确认报文后,就要重发以前的报文,而不是等到重传时间到了再重传
流量控制,拥塞控制,超时重传,(通过滑动窗口实现可靠传输)
三次握手的过程: 客户端主动发起请求 设置一个同步位 syn = 1(表示要建立连接),然后给定一个随机值seq=x 发送给服务器端,服务器接收到后 响应 同步为 syn = 1,ACK = 1 表明接收到了数据 然后也给定一个随机值 seq=y,并且还设置ack=x+1(接收序号数+1),然后客户端再次发送数据过来,ACK=1,seq=x+1(发送序号数+1),ack = y+1 (序号数加+1) (第三次握手并不是多余的,如果因为网络原因,第一次发送的请求数据报在网络中滞留,然后客户端又发起超时重传,然后服务器端开始与客户端正式开始三次握手,建立连接后,并且传输完数据,然后断开连接,这个时候 那个网络中滞留的数据包可能又到了,这个时候服务器端以为客户端又来了,如果我们使用两次握手,那么会直接进入连接,而客户端并没有连接,这个时候会浪费服务器资源)
四次挥手: 客户端主动发起断开连接 数据包内容为 FIN = 1(表明结束),ACK=1(表明收到上一个报文),seq=u(已发送的序号数+1),ack=v(已接收序号数+1),服务器端收到后回传数据报内容 seq=v(已经发送的字节数+1 ,与客户端发来的ack一致),ack=u+1(因为已经多接受了客户端的上一个报文,所以是u+1),这个时候,客户端向服务器端的发送的通道连接断开了,因为客户端已经没有数据要发了,但是服务器端可能还有数据要发给客户端,客户端还是要接收,并且回复确认, 服务器发送断开连接 FIN=1,ACK=1(表明这是断开连接报文),seq = w(这个中间,服务器可能又发了很多数据),ack=u+1(接收到客户端发送报文序号数),客户端收到后,还需要发送确认报文(如果你不确认,那么服务器以为你没收到,会一直发送重传报文,等超过重传次数后,便会断开连接) ACK=1 (确认收到),seq=u+1(已发送的序号数),ack=w+1(已经接受序号数+1),至此服务器端断开连接,进入关闭状态,但是客户端还需要有个等待时间段(如果客户端的最后一个报文服务器端没有收到,那么服务器端会以为客户端没有收到,会发送超时重传,如果客户端直接关闭了,那么服务器就会一直重传到次数结束)
c/s : 客户端与服务器端 客户发起请求服务,服务器为其提供服务
p2p: 没有客户端与服务器端一说,每个计算机既是请求者,也是服务者
DHCP:
客户端广播发起申请ip的请求,源ip为0.0.0.0,目的地址为255.255.255.255:68,dhcp监听68才能处理这个请求,然后分配ip,通过广播的方式