概述
声明:
·以功利的角度记笔记,有些太难/自己觉得考不到/太累的懒得记的点会记得比较简单!
·能力有限,并不能100%保证正确。如果有不同的看法和认识一定要自己思考!
·适用于本科期末考,应该是比考研窄不少的
·word文档粘贴的,估计会有一些奇奇怪怪的地方……
目录
第一章——概述.. 3
一、基础概念.. 3
1.计算机网络定义.. 3
2.P2P. 3
二、网络硬件.. 3
1.传输技术.. 3
2.按范围分类.. 3
3.包交换/分组交换.. 4
三、网络软件.. 4
1.协议层次结构.. 4
2.层次设计面临的问题.. 4
3.面向连接与面向无连接.. 4
4.服务质量.. 5
5.服务与协议的关系.. 5
6.参考模型.. 6
四、网络标准化.. 7
1.802协议.. 7
第二章——物理层.. 7
一、数据通信理论基础.. 7
1.带宽bandwidth. 7
2.信道的最大数据速率计算.. 7
二、有导向的/引导性传输介质.. 8
三、公共交换电话网络PSTN. 8
1.调制解调器Modem的调制方式.. 8
2.非对称数字用户线ADSL. 8
3.干线与复用.. 9
4.交换.. 9
第三章——数据链路层.. 11
一、成帧(Framing).. 11
1.字节填充——字节填充的标志字节法.. 11
2.位填充——比特填充的标志比特法.. 11
3.字节计数法.. 12
4.物理层编码违例.. 12
二、错误检测和纠正.. 12
1.循环冗余校验CRC. 12
三、基本链路协议.. 13
0.实用的停等协议思路.. 13
1.乌托邦式单工协议.. 13
2.一种单工停等协议.. 14
3.单工且有噪声的协议.. 14
四、滑动窗口协议.. 15
1.捎带确认.. 15
2.发送与接收窗口.. 15
3.一位滑动窗口协议.. 15
4.回退N协议.. 16
第四章——介质访问子层.. 17
一、静态与动态信道分配.. 17
1.静态信道分配.. 17
2.动态信道分配的假设前提.. 17
二、多路访问协议.. 18
1.ALOHA(先说后听).. 18
2.载波侦听多路访问协议CSMA(先听后说).. 18
3.冲突避免多路访问MACA. 19
三、以太网.. 20
1.二进制指数后退算法CSMA/CD. 20
2.曼彻斯特编码.. 20
3.802.3帧格式.. 20
四、WLAN. 21
1.隐藏站和暴露站.. 21
2.802.11 MAC子层协议.. 22
五、数据链路层交换.. 22
1.网桥.. 22
2.网桥算法.. 23
3.生成树网桥.. 23
4.各层的交换设备.. 24
第五章——网络层.. 25
一、网络层设计要点.. 25
1.无连接服务实现——数据报网络.. 25
2.面向连接服务实现——虚电路网络.. 25
第七章——应用层.. 26
一、DNS——域名系统.. 26
1.基础定义.. 26
2.域名的格式.. 26
3.域名资源记录.. 27
4.域名服务器.. 28
二、HTTP——超文本传输协议.. 28
1.方法.. 29
2.响应组的状态码.. 29
3.消息头.. 30
第一章——概述
一、基础概念
1.计算机网络定义
·表示一组通过单一技术相互连接的自主计算机集合
2.P2P
对等通信技术:每个人可以和群体中的其他人通信,且没有固定的客户端和服务器的分工
二、网络硬件
1.传输技术
·点到点网络/点到点链路:使用一条链路将一对单独的机器连接起来。数据包在传输过程中可能会经过多个中间机器,网络中也可能存在多条不同长度的路径
·广播网络/广播式链路:通信信道被所有机器共享,任何一台机器发出的数据包都可以被任意其他机器收到。数据包使用地址字段指定接收方,只有检查地址字段并发现自己是目的地的机器才会处理此数据包
·单播(unicasting):只有一个发送方和一个接收方
·广播(boradcasting):在地址字段中使用一个特殊的地址,使得网络中每一台机器都会接收并处理该数据包
·组播(multicating):有些广播系统支持给一组机器发送数据包
2.按范围分类
·个域网PAN:范围1m,围绕着个人进行通信
典型:蓝牙
·局域网LAN:范围10m~1km,私有网络,一般范围覆盖一座建筑及附近一些区域
典型:公司使用的局域网称为企业网络,以及无线局域网wifi(IEEE 802.11),有线局域网中的以太网Ethernet(IEEE 802.3)
·城域网MAN:范围10km,覆盖一个城市
典型:有线电视
·广域网WAN:范围100km~1000km,国家级、地区级、大陆级的网络
·互联网Internet:范围10000km,行星级
3.包交换/分组交换
数据的各个包立刻发送且不必走同一条路
三、网络软件
1.协议层次结构
·对等实体:不同机器上构成相应层次的实体
·协议protocol:通信双方就如何进行通信的一种约定,它们连接对等实体。协议是水平方向的。同一层应当使用相同的协议
·接口interface:接口定义了层与层间,下层向上层提供哪些操作和服务。服务是垂直方向的
·分层的意义:简化设计,各层间独立,某一个层更改不会影响其它层。
2.层次设计面临的问题
·差错控制:进行检错、纠错,保证可靠性
·流量控制:保证发送方的发送速度不会淹没较慢的读取方,或者避免网络中存在超出其传递能力的数据。
如果网络中的流量过大,网络的能力无法传递所有数据包,就会发生拥塞。
3.面向连接与面向无连接
·面向连接的服务
类似于电话系统,先建立连接在通信,各分组不需要携带目的结点的地址
有时建立连接需要发送方、接收方、子网一起协商
·可靠性好,但协议复杂,通信效率不高
·面向无连接的服务
·报文:报文在不同的上下文中称呼不同,数据包/包是网络层的报文。
在面向无连接的服务中,每个报文都携带完整的目标地址,每个报文都由系统中的中间结点路由
·可靠性不好,但协议简单,效率高
·存储-转发交换:中间节点必须将报文(包)的所有信息接收后才能将数据传给下一个节点
·直通式交换:在报文还没有被全部接收完毕前就向下一个节点传输
4.服务质量
可靠的服务从不丢失数据,通常这需要接收方向发送方确认每一个收到的报文。当然我们可以不进行确认。确认与否和面向连接与否可以进行组合,根据实际情况选择合适的。
5.服务与协议的关系
·服务:某一层向它上一层提供的一组操作。服务会定义这一层需要提供什么样的功能给用户,但是并不会在乎如何实现
·协议:通信双方就如何进行通信的一种约定,规定了对等实体之间交换的数据包或报文的格式和含义。
·服务是纵向的、抽象的,它指的是一层向另一层提供的可用操作;协议是横向的、具体的,对等实体要通过协议来实现由服务定义的操作
6.参考模型
··OSI模型
·明确了3个主要概念:服务、接口、协议,并且定义清晰
·协议有很好的隐藏性,服务与协议的分离
·产生在协议发明之前
·分为7层
应用层:包含用户所需的协议
表示层、会话层:已弃用,分别用于抽象出统一的数据格式和允许用户建立有规则的会话
传输层:接收数据,必要时切割数据,将处理完的数据传递(给网络层)。这一层需要消除网络层的不稳定性。本层为真正端到端的层。
网络层:主要功能为控制子网的运行,提供独立于路由器的服务
数据链路层:纠正物理层的错误,将原始的传输设施变成没有漏检的传输错误的通路
物理层:在信道上正确传输原始的比特
·TCP/IP模型
·没有明确区分:服务、接口、协议
·产生在协议发明之后
·共4层:
网络层:无连接(IP)
传输层:面向连接(TCP)和无连接(UCP)
·应用层、传输层、互联网层、网络接入层
四、网络标准化
国际标准化组织ISO,国际电信联盟ITU
1.802协议
IEEE下属802委员会制定的标准
最重要的几个:
·802.3:以太网
·802.11:无线局域网
·802.15:个域网(如蓝牙)
·802.16:宽带无线
第二章——物理层
一、数据通信理论基础
1.带宽bandwidth
带宽有多种不同的意思
模拟信号中的带宽:以Hz度量,指在传输过程中振幅不会明显减弱的频率的宽度
数字信号中的带宽:以bps(比特/秒)度量,表示一个信道的最大数据速率
2.信道的最大数据速率计算
一般的语音信道是4000Hz
·尼奎斯特定理/奈奎斯特定理
该定律用于无噪声、有限带宽的信道
一个带宽为H(单位Hz)的低通滤波器,信号包含V个离散等级,则有:
最大通信速率 = 2H log2V (bps比特/秒)
·香农定理
在带宽为H的有噪声信道中,信噪比为S/N(常用dB表示,1dB=10lgS/N,S/N相对较大,表明有效信号一般占比大),则信道的最大传输率:
最大比特率 = H log2(1+S/N) (bps 比特/秒)
*S/N即signal-to-noise ratio
二、有导向的/引导性传输介质
·磁介质:如磁带
·双绞线:3类、5类、6类线
·同轴电缆
·光纤:
·全反射
·多模光纤:同时传出多个信号,通过角度不同或者多个波长实现
·光纤与铜线的比较
光纤的优点:
带宽高、衰减小、抗干扰、轻、安全性高
几乎无限的带宽
光纤的缺点:
(曾经)技术陌生,易损坏
双向传输时需要两根光纤,或一根光纤上划分两个频段
成本高
三、公共交换电话网络PSTN
1.调制解调器Modem的调制方式
Modem,调制解调器,俗称“猫”。
Modem是用于将数字信号和模拟信号进行转化的设备
·调幅:有振幅处代表1,无振幅处代表0
·调频:高频处代表1,低频处代表0(也可以反过来,协商好对应频率代表的意义就行)
2.非对称数字用户线ADSL
将1.1MHz的频谱分割为256份,将信道0分给简单老式电话服务POTS,信道1~5空闲以防止语音信号与数据信号干扰,其余信道中一条用于上行流控制,一条用于下行流控制,剩下的则可以按要求分配给上行流和下行流。
我们可以对半分,但是实际上我们经常将80%~90%分给下行信道,比如将32条信道用于上行。
3.干线与复用
我们希望多个用户、多个电话共享干线,于是就有了各种复用方法
要注意这些都是在2.5里
·频分复用FDM
将频谱分成几个频段,每个用户占有各自的频段进行通讯
不同频段之间应该有一些空间分隔空间。比如若干个信道,每个需要3100Hz,但我们可能需要给每个信道分配4000Hz。多出来的部分称为保护带。
·波分复用WDM
类似于FDM,不过我们分配的是波长。不同波长的光汇成一束传出,然后通过一个特殊的核就能滤掉其他波长。
波分复用可以认为是光的频分复用,对于光来说波长和频率是一体的。
·时分复用TDM
将信道用于传输的时间分片,每个用户可以分得一个时间片,并在占有的时间片内获得全部带宽。
4.交换
“交换是指在需要运送信号时,把一些功能单元、传输通路或电信电路互连起来的过程”
·电路交换
系统中的交换机在发出呼叫后,寻找呼叫方到接收方的一条物理路径,从而建立连接,并在这条路径上传输。
它有连接建立和连接释放的过程,而在数据传输的过程中不间断地传完
·包交换/分组交换
将报文切割为多个数据包,然后每个数据包都各自前往目的地。这个过程中,会有多个数据包同时向目的地传输,各个数据包的传输路径也会不同,这也会导致接收的顺序与原始顺序不一致。
使用存储-转发传输,一个包要被中间结点完全接收才能开始向下一个节点传输,这也是为什么在下面的例子中,某一个包还是不会重叠的。
分组没有固定的连接建立、数据传送、连接释放的过程。一个包成功从A发送到B就会发送下一个包,而前一个包已经开始从B发送到C了,所以一大段报文的的不同部分可能同时处于网络中,它们的发送时间是重叠的。
·报文交换?
其实并没有讲啊,相对于包交换,报文交换一次发送一个报文。报文是具有完整意义的一段数据,但包可能是报文打散的形态。
·交换的比较
电路交换 | 包交换 | |
连接建立? | 需要 | 不需要 |
专用物理路径? | 是 | 否 |
各个包的路径? | 相同 | 不相同 |
包按序到达? | 是 | 否 |
交换机崩溃? | 致命 | 不致命 |
可用带宽大小? | 固定 | 不固定 |
可能拥塞的时间 | 建立时 | 每个包都有拥塞的可能 |
存储-转发传输? | 不是 | 是 |
总得来说:
电路交换:需要建立一个专用且固定的连接,保证各个包在相同的路径上按序传输,路径上的交换机不能崩溃,带宽大小固定
包交换:不需要建立连接,各个包独自前往目的地,不保证按序,某一个交换机崩溃不一定会影响大局,且使用存储-转发传输
第三章——数据链路层
·可靠:数据链路层的主要功能之一是纠正物理层的错误,进行差错控制
·高效:协调收发双方的流量——流量控制,是实现高效的手段
网络层的包对应数据链路层的净荷域(亦称有效载荷),即数据链路层会在网络层传下来的数据上套一层壳
是数据链路层的帧由:帧头、有效载荷、帧尾,构成
一个包可能分为多个帧
“帧”这个概念属于数据链路层
一、成帧(Framing)
要能够确定帧的边界
1.字节填充——字节填充的标志字节法
帧与帧之间用特殊的标志字节分割
但我们通常找不到一个所谓“特殊的字节”,所以我们使用类似转义符的机制
例如:ESC为转义字符,FLAG为标志字节。这两个字节出现在内容中就需要在前面加上ESC转义
2.位填充——比特填充的标志比特法
以01111110(6个连续的1)标识每一帧的开始和结束,然后在数据中的连续5个“1”位后插入一个“0”,这样就只有开始和结束时才会有连续6个1
解码时要将连续5个1之后的0去除
3.字节计数法
发送方发送时,用帧的第一个字节来代表帧的长度
4.物理层编码违例
物理层中,用高-低电平对代表“1”,低-高电平对代表“0”,然后帧的边界就可以用高-高和低-低代表了。当然这只是一种例子。
二、错误检测和纠正
海明码建议参见修炼笔记
1.循环冗余校验CRC
发送:
1.在原信息的末尾添加若干位“0”,位数等于你的生成器(Generator)的位数-1;
2.用添“0”后的原信息除以生成器。这个除法和十进制除法不太一样,结果上“1”还是“0”取决于你上一步的结果的最高位是“1”还是“0”(这里所说的结果是不包括最高位的,最高位显然是0),原本除法中的减法操作转变为异或操作。
3.最后的结果在左侧添“0”,直到位数达到第1步中添加的“0”的位数,最后再将这些冗余位接在原信息末尾。
这种运算方式很重要!
很重要!
很重要!
接收:
用接收端接收的信息除以和发送端相同的生成器(Generator),如果余数不为0则一定出错了;如果余数为0,原信息的正确率是接近100%的(具体的正确率与生成器的选择相关),但并不是100%正确的检查
且这种方法无法纠错,只能丢弃出现差错的帧并重传了
有可能给你一个多项式让你CRC运算,这个时候我们要根据从n次项到0次项的系数来确定这个二进制数。
三、基本链路协议
0.实用的停等协议思路
ACK:代表获得了正确的数据,ACK i代表正确接收了编号为i的数据
NAK:代表获取数据出现了问题
A发给B数据,如果B顺利接收且无误,那么B就会回复ACK i,A继续发送下一个数据;
A发给B数据,如果B顺利接收但出错了,那么B就会回复NAK i,A就会重发;
A发给B数据,如果数据丢失了,B未能接收,A就不会接到B的回复。A中有一个计时器,一段时间后仍然没有得到B的回复就会重传;
A发给B数据,如果B顺利接收但回复丢失了,那么A仍然会重发(因为A并不能分辨是数据丢失还是回复丢失)。这时B会丢弃重发的数据(因为B已经接收到了),并再次发送ACK i
1.乌托邦式单工协议
怎么说呢……
发送方不断地从网络层获得数据,不断地发送
接收方阻塞在“等待有数据到来的信号”这一步,接收到之后瞬间将数据从物理层取出并传递到网络层
这个协议假设:
·数据只能单向传输
·数据链路层之间的通信信道永远不会损坏或者丢失帧
·两端的网络层就绪
·处理时间忽略
·缓冲区空间无穷大
看看就好……
2.一种单工停等协议
假设条件:
·单向数据传输
·发送方网络层一直有无限的数据要发送
·信道不会出错,从不损坏或丢失帧
(抛弃了“接收方网络层一直可以接收,接收方缓冲无限大”的条件)
实现方法简单来说就会在发送和接收方都有一个wait_for_event方法用于阻塞,之后物理层收到消息时才允许通过。
发送方在发送数据后会阻塞,接收方只有在发送方发出数据才会通过阻塞,而接收方在将数据传输到网络层后会将一个没有内容的信号帧传给发送方,发送方才能通过阻塞发送下一个数据。
3.单工且有噪声的协议
……其实和“实用的停等协议思路”一样啊,代码很乱(变量名称无比糟糕),详见修炼笔记吧(或者看PPT)
四、滑动窗口协议
1.捎带确认
当接收到一个数据帧后,我们不立刻发回一个控制帧用来确认接收,而是等到需要传送一个数据帧时将确认信息附加在帧头的一个ack字段上
这就叫捎带确认
2.发送与接收窗口
·发送窗口:发送方维持的一组序号,它代表着发送方准许发送的,以及已经被发送但还没被确认的帧
·接收窗口:接收方维持的一组序号,它代表着接收方期望并准许接收单未被确认的帧
发送窗口内的帧都有在传输过程中丢失的风险,我们会在内存中缓存这些帧
3.一位滑动窗口协议
每个发送的帧都有:序列号seq,确认号ack
(seq,ack,packetNum)
在一位滑动窗口协议中,窗口号只有0、1两种
·计算机保存自己的发送窗口号to_send和接受窗口号expect
·当得到接收信号后:
如果接收的帧的seq等于expect,代表我接收了我需要的帧,这个帧就可以传向网络层,并更改expect
如果接收的帧的ack等于to_send,代表我刚发送的帧被确认了,我们就可以从网络层取下一个帧以待发送了,并更改to_send
·也可能得到超时信号等信号,通常意味着故障了,我们要发送与上一次完全相同的帧
·之后我们直接发送一个帧,他的seq等于to_send,他的ack等于刚刚接受的seq(它应该等于1-expect),数据是当前待发送的
不同情况下会呈现这些结果:
·没有接收到期望的帧号会导致发回的ack相比上次不变
·没有接收到正确的确认号会导致发出的帧和seq相比上次不变
这个协议其实可能很混乱
4.回退N协议
·累计确认
约定接收方返回Ack i,默认代表编号i与i之前的数据都已经接收了。
·普通回退N协议
发送方一直发,同时启动一个计时器。如果在计时器的时间内还没有接到接收方的确认,就重新发送。
接收方如果是因为没有接收到数据而不发回确认,那就会一直等待正确的数据发送,期间不接受任何其他数据。
发送方超时后发现错误重新发送,会从没有收到确认的帧开始按序重新发
·选择重传/选择性重发
当接收方没能接收时,会返回一次Nak i表明自己没有接收到
在发送方还没有接收到Nak i时,发送方会继续发送接下来的数据,而接收方会将它们缓存,并返回Ack i-1(表示自己接收的最新数据为i-1)
发送方接收到Nak i时会重发对应的数据,接收方接收后会将它和缓存的数据一起(尽可能)处理掉(写入网络层),之后Ack会重新返回最新的Ack i。利用累计确认机制,就可以正常运作了
当然,如果因为种种意外(比如Nak丢了),发送方也会根据单个帧的超时重发,不过只重发超时的那一帧
第四章——介质访问子层
这是属于数据链路层的一个子层
这一层是用于信道分配的
一、静态与动态信道分配
1.静态信道分配
把信道容量直接拆开分配给用户用
·缺点:无通信时信道白白浪费
2.动态信道分配的假设前提
一切方案都以以下假设构建的模型为前提
·站模型:模型中有N个独立的站,站在生成帧后会持续等待,直到帧被发送出去
·单信道:所有通信共用一个信道
·冲突假设:冲突的帧必须在将来再次被发送
·时间连续或分槽:两者二选一
·载波侦听或不侦听:可以选择让站监听信道是否正在被使用,或者不监听
二、多路访问协议
1.ALOHA(先说后听)
所有发送方都可以随时发送信息,但是如果此时信道上有两个帧在同时尝试使用信道,那就会冲突,两个帧都会被损坏,等待一个随机时间后再发送
(监听损坏的可以让一个中央计算机重新广播帧)
·纯ALOHA
可以随时发送,出现冲突就等待一个随机时间再发
·分槽ALOHA
将连续的时间分为时间槽,所有发送方只能在时间槽开始的时刻发送,允许发送的时间离散化,提高了吞吐量
因为本来如果一个帧的发送所需时间为t,那么在t0~t0+t这段时间内发送会导致尾部与此帧冲突,t0+t~t0+2t这段时间内发送会导致头部冲突,所以此时易受冲突期为2t。但是分槽ALOHA只有在同一个时间槽内尝试发送的两个帧会引起冲突,易受冲突期变为t。(如果你在前一个帧正在传输的那一个时间槽内发,那就会强制要求你下一个时间槽再发)
2.载波侦听多路访问协议CSMA(先听后说)
·1-坚持CSMA
当有一个站要发送时,先监听信道;如果信道空闲就发送,否则就等待信道直到它空闲。
·非坚持CSMA
如果监听到信道忙,那么就等待一个随机时间后再监听,而不是持续监听
·p-坚持CSMA(适用于分时间槽的信道)
如果信道空闲,则有p的概率发送数据,如果不发送就推迟到下一个时间槽再使用此算法尝试进行一次发送;如果信道忙,则等到下一个时间槽再使用此算法尝试发送
·带冲突检测的CSMA CSMA/CD
如果两个站都同时侦听到信道为空并同时数就还是会冲突,我们需要解决。
这是一个在建立在p-坚持CSMA之上的CSMA算法机制
额外增加冲突检测,监听2t时间后还没有监听到冲突就确定自己抓住了信道,这2t时间被称为竞争期。t为两个相距最远的站传输所需时间。
如果检测到冲突,就立刻中断自己的传输,并在一段随机时间后再尝试重新传送。
t是基于这样的考虑:最糟糕的情况就是最远的两个站A和B,B在A的数据到自己门口了的时候发了一个信息,冲突了。冲突信号想返回发送方A,即使这么倒霉,也不会超过2t的时间,t为A传输到B所花时间
这就由此提出了一个重要概念:
·最小帧长
我们要求发送帧有一个最小帧长,这个帧的长度能保证需要在2t时间内占用总线,保证这段时间内总线被占用,使其他站点无法发送,直到2t后,发送站点100%能确定自己的发送是否发生冲突。
3.冲突避免多路访问MACA
这是一个无线局域网协议
发送方向接收方先发送一个RTS(request to send)帧,这是一个短帧,包含了随后要发的数据帧的长度;接收方会发一个CTS(clear to send)来回答,包含了从RTS帧中复制的数据长度。发送方接收了CTS后开始传输
RTS和CTS中都有帧长的信息
任何站收到了不属于自己的RTS都要保持一段时间的静默,保证CTS可以被无冲突地传回去
其他站只要听到了RTS或CTS,那就说明它和某一个正在进行数据传输的站离得很近,那就要延缓发送任何信息,直到传输完毕
我们认为MACA==CSMA/CA
MACAW要求每次成功发送的帧都要有一个ack
三、以太网
经典以太网使用1-坚持CSMA/CD算法
1.二进制指数后退算法CSMA/CD
专门优化CSMA/CD中遇到冲突后等待的时间的CSMA/CD改进版
在第i次冲突后,随机等待一段时间再请求,随机时间的范围为0~2i – 1。
通常,会在某一次冲突后达到一个随机上界的固定最大值,之后随机上界将不再变化。在某一次冲突后将放弃,不再请求
2.曼彻斯特编码
·曼彻斯特编码
高-低(高转低)电平对表示1,低-高电平对表示0(反之或许亦可)
·差分曼彻斯特编码
每一个区间内仍然是电平对,但是如果下一个要发送的位是0,那么就要发生一次跳变:如果前一位是高-低电平,这一位就是高-低电平。如果下一个要发送1,那么就不发生跳变
3.802.3帧格式
这就是以太网帧,IEEE 802.3,这个概念归属于数据链路层-介质访问子层
这里的地址是MAC地址,目标地址第一位为0时代表这是普通地址,第一位为1时代表这是组地址。
Data来自于网络层,这是网络层传下来的东西,里面也必然包含网络层的各种头啥的。
四、WLAN
1.隐藏站和暴露站
·隐藏站问题
·暴露站问题
2.802.11 MAC子层协议
这里实在是太太太混乱了……
这里显示出实际上用的这个协议确实需要接到RTS和CTS的栈根据其中的NAV(网络分配向量)确定自己需要沉默的时长。
同时,这里要求接收方在帧成功传递后返回一个ACK。如果发送方收不到ACK就要重发
五、数据链路层交换
1.网桥
网桥和交换机其实是一个东西。它运行在数据链路层上,连接多个局域网。各个端口连接的局域网是彼此隔离的。
网桥会利用帧头中的目的地址来判断这个帧下一步该前往哪个端口
每一个转发表都会有一个转发表,以散列形式存储,指明某个目的站地址要从哪个端口出去,看个例子更靠谱:
2.网桥算法
·flooding/泛洪算法
如果一个入境帧(进入网桥的帧)并不能确定它应该输出到哪个端口,就会被输出到所有端口(除了入境的端口)。网桥可以依赖这个过程来进行学习。
·后向学习法/逆向学习法
通过读取每个帧的源地址来确定发送者能被哪个端口访问。
·动态拓扑结构变化
哈希表还会记录确定这个映射关系的时间。
有进程定期扫描哈希表,将时间过老表项删掉。这当然会导致需要重新学习。
·集线器
集线器只会把各个线聚集,任何一端发出的内容都会无条件转发给其他所有端口。这会导致有时目标地址的端口和源端口相同,此时网桥会丢弃这个帧。
3.生成树网桥
如果一个网络中,网桥之间构成了环的话,那么泛洪时会导致无限循环的,所以要把一部分链路直接禁用,最终使得网桥之间的联系关系演化为一个生成树。
·step1:选定一个网桥作为根。我们的选择标识符最低的网桥作为根,这个标识符基于MAC地址的
·step2:构造从根到每个网桥的最短路径生成树(可以使用类似BFS的方法,如果有多个可选项就选标识符最低的那一个)
·step3:确定结构后,关闭那些不需要的链路
4.各层的交换设备
·应用层:应用网关
·传输层:传输网关
·网络层:路由器
·数据链路层:网桥、交换机
·物理层:中继器、集线器
这里也揭示了帧、数据包、头等等的嵌套关系
传输层填一个TCP或UDP头,网络层填一个IP头(灰色部分就是网络层向数据链路层传的),数据链路层再加上帧头帧尾
·中继器
模拟设备,中继器不理解帧、数据包等概念,它只知道将比特编码为电压。它会将线缆上的信号清理、放大,然后放到另一个线缆上。
参考红石中继器?
·集线器
允许输入多条线路,它也是物理层上的小傻子,啥也不懂,只知道把输入进来的信号传播到其它所有线路上
我们应当把集线器看作电缆的一部分,同时有两个信号来的话也会冲突
·网桥和交换机
这两个东西其实是一样的,更多的是市场上的区别。交换机一般端口比网桥更多。
·路由器
属于网络层,它会剥去帧头帧尾,读取IP数据包的头部来进行路由(后面会讲)
·传输网关
连接使用不同的面向连接传输协议的计算机。传输网关能将数据包从一个连接复制到另一个连接上,并可能重新进行格式化
·应用网关
它能理解数据的意义,将它们进行不同应用意义上的转化。
“网关”本身还是一个术语,代表运行在较高层次的转发进程
第五章——网络层
数据链路层关注的是将数据从线路的一边传到另一边
网络层则关注如何将数据包从发送方一路送到接收方
·向上提供的服务独立于路由器技术,屏蔽路由器的数量、类型、拓扑关系
·传输层可用的网络地址应该有统一的编址方案
一、网络层设计要点
1.无连接服务实现——数据报网络
所有数据包独立地注入网络中。在这种背景下,我们通常称数据包为数据报。
这种网络被称为数据报网络。
在这种情况下,从传输层来的数据会因为比较大而被分隔成若干数据报,它们会被传到路由器,路由器中的路由表会指明:如果它需要前往某一个路由器,那么下一步应当前往的下一个路由器。
管理路由表并做出路由选择的算法称为路由算法。
IP协议就是无连接网络服务的重要范例。
2.面向连接服务实现——虚电路网络
在发送数据包之前,首先建立一条从源路由器到目标路由器之间的路径,这个连接就是“虚电路”。
建立一个连接之后,这个连接的路径就会被存储在各个路由器的路由表中。发送的每一个数据包都有一个标识符。
路由表会分为入境和出境,键为入境的设备,键值为它所属于的连接。
路由表在建立前往同一个路由表的出境表项时,必须确保标识符与之前不同。
额……这里看书吧,书上这里讲的还算清楚
二、路由算法
0.最优化原则
·最优化原则:如果路由器J在从路由器I到路由器K的最优化路径上,那么从J到K的最优路径也必定遵循同样的路由
·熟悉吗?熟悉就对了……
·汇集树:根据最优化原则,所有的源端到一个指定目标的最优路径会构成一棵以目标为根的树,这棵树就是汇集树
·路由算法的目标就是给每个路由器找到并使用汇集树
1.最短路径路由算法(全局算法)
这个算法的前提是:给定一个完整的网络视图,计算最优路径
·测算“路径长度”的方法是多样的,包括站点数量、距离、信道带宽、平均通信量、通信开销、队列平均长度、测量到的时延
·然后……Dijkstra迪杰斯特拉
2.泛洪算法/扩散法
·原理:将每一个入境数据包发送到除了入境线路外的每一条其他线路
·问题:产生大量重复数据包,甚至会产生无限的数据包
·解法:
·分组头设置一个计数器,没经过一跳就减1,计数器到0就丢弃这个包
·选择性扩散法:仅将分组扩散到与正确方向接近的线路上(?)
3.距离矢量算法
·原理:每个路由器维护一张向量表,表中给出每个目的地已知的最佳距离和线路,通过相邻路由器交换信息来更新。节点u更新信息,就可以从它的每一个邻接v获取表,然后通过计算u到v的距离加上v声称的到某一个节点的最短距离来计算一个新的距离。
·无穷计算问题:这个算法收敛缓慢,且在一个节点离开时,可能会造成无穷的计算。图中的例子相当有助于理解
在A下线后,B仍然会尝试找到到A的最短距离,这时就只能找C了,C又得看B……
后者本质上是在节点被移除后,其余节点在尝试寻找到它的路径时不可避免地产生环路。
·环路的补救或避免
·定义最大值
定义一个最大跳数
·水平分割
传送路由信息的过程中,不再把路由信息发送到接收此路由信息的接口上。本质是防止将从邻居身上学到的信息再传回去
4.链路状态路由
·step1:发现邻居节点及网络地址
向所有点到点的线路发送一个特殊的HELLO数据包,线路另一端的路由在接收后应返回一个应答,返回一个全局唯一的名称
·step2:测量线路开销或延迟
通过线路发送一个ECHO数据包,对方应立刻发回,然后将测量时间除以2
·step3:构造链路状态包
状态表如图
·step4:发布链路状态包
采取泛洪法,发送的包包括序号seq字段和年龄age字段。Age字段会随时间不断减少,为0时路由器就会丢弃这个。不过由于系统中每过一会儿就会有新的包到来,所以这种丢弃就不会有问题(除非这个记录对应的路由器扑街了)。Seq字段则是每发送一次就加1。
·seq序号循环问题
使用32位的序号,137年才能绕回……
接收到一个包后要和自己状态包缓冲区的对应路由器的状态包进行比对,无论如何都放弃较老的包(即序号小的),相等时抛弃来的。
在路由器的状态包缓冲区中,还有发送标志和ACK标志。对来源进行ACK返回,对其他的则发送包。
如果有重复的数据包来了,我们就改变位。我们只改变这个最新的来源对应的send位和ACK位,然后根据这些位进行操作
·step5:计算最新路由
此时其实所有链路状态对于所有路由器都是完整可见的了,相当于每个路由器都有完整的网络图,直接Dijkstra
5.距离矢量路由和链路状态路由的比较
·距离矢量路由只向邻居分享自己的信息,链路状态路由使用泛洪将信息传递给所有路由器
·距离矢量路由有收敛过程,不是借助全体信息计算的,链路状态路由直接对网络整体计算
·距离矢量路由在某一个路由器,某一个链路发生变化时,更可能影响所有路由器的所有表项,链路状态路由更新更新的则是某一个或某几个路由器的信息。
6.分级路由
为防止路由表过大,我们将路由器按区域分组,同区域的目标地址还以完整地址的形式存储于路由表中,不同区域则完全归为一整个区域存储于表中,从而降低路由表的大小
7.广播路由
主机要给全部主机发送消息称为广播
·方法1:分别发送分组到每个目的端
·方法2:扩散法/泛洪法
·方法3:多目的地路由选择
每个数据包包含一组目标地址,路由器通过这一组地址判断哪些输出线路是必要的(“必要的”指这个输出线路至少是到达某一个目标地址的最优路径),然后路由器生成若干该数据包的副本,这些副本中的目标地址的只包含使用的线路能到的目标地址
·方法4:利用发起广播的路由器的汇集树或利用生成树
这种方法需要所有路由器都能知道我们要使用的生成树,这对于链路状态路由好说(反正大家都有完整的网络图),但是对于距离矢量路由就不太行了
·方法5:逆向路径转发
当一个广播的包传入时,如果输入线路是常用的广播源发送包的线路就把这个包转发到其他所有线路上,反之丢弃。
8.移动路由
登录过程:
·外地代理定期广播分组,宣布自己的存在及地址;同时,移动主机可以广播,问“这里有没有外地代理?”
·移动主机登录到外地代理
·外地代理与移动主机的本地代理联系
·本地代理检查安全性信息
·外地代理得到本地代理的确认后,建立一个表项,并通知移动主机已经登录了
移动主机先向将转交地址(care of address)发回给本地代理,本地代理就可以把发来的数据转给移动主机,移动主机直接向发送者回复
三、拥塞控制
1.概念
通信子网中存在太多分组时会使性能降低
2.负载脱落——随机早期检测RED
当链路上的平均队列长度超过某个阈值,就被判定为即将拥塞,路由器会随机选择已有的数据包丢弃来避免拥塞
四、服务质量QoS
如何保证提供的吞吐能力、延迟匹配我们所需求的服务质量?
1.过度配置
给一个非常高的路由容量、带宽配置,高到无论什么情况都能满足高质量服务,简称力大砖飞,典型例子是电话系统
但是它贵……
2.接收方缓存
·抖动:指连续传递的两个相邻数据包转发的时延之差的绝对值。高抖动即两个连续的数据包到达的时间间隔差距很大,这是不好的。
接收方先缓冲数据,延迟一段时间之后再正式读取,这样在接收方看来,数据就更像是连续发送的(我称之为“攒着一起读”),抖动小。
3.发送方缓存——漏桶算法和令牌桶
漏桶算法:把数据想象为水,装在一个漏桶里。不管有多少数据,漏桶以恒定的速度输出数据,从而保证发送速度恒定。“桶”容量有限,满的时候到来的数据就要在队列中等待或者被丢弃
令牌桶:桶中会不断产生令牌,想要从桶中取出数据就要同时拿到一个令牌(一般一个令牌能允许取出指定大小的数据)。如果桶中有充足的令牌,发送端就可以全速发送。如果令牌在高速发送的情况下被全部消耗,那发送的速率就会与生成令牌的速率一致了
相比之下,漏桶比较死板,令牌桶由于可以积攒令牌所以更灵活一些
五、网络互连
不同的网络使用的协议可能不同,多个网络连接会遇到问题
1.隧道技术
用于处理两个所处网络的类型相同,但是中间隔着一个不同类型的网络的情况。
直接将发出的数据包使用这个中间网络的协议进行包装,等出了这个中间网络,到达那个相同的网路后再提取原本的内容。
六、Internet的网络层
1.IPv4协议
·IPv4头部
要熟悉这个头部结构,但不必背诵
这里的源地址和目标地址是IP地址格式
注意IHL指明的是头部长度(以32位为单位),最小为5
总长度是包含头部和数据的所有内容
DF代表“不分段”,为1时代表不允许路由器分割这个数据报
MF代表“更多的段”,除最后一个段之外的所有段都要设置
Fragment offset是分段偏移量,代表这个段在数据包整体中的位置
生存期每一跳就要减,用于避免数据永远逗留
更多的看一看书P337
2.IP地址
·IP地址包括前缀和主机号,由4个8位域组成(咱们平时见到的是点分10进制)
前缀=“网络段”。同一个网络下的主机拥有相同的前缀,后面的位可以指明主机。前缀的长度由IP地址最后“/x”这样的写法来指明,代表前缀长度为x
·子网掩码:前若干位为1,和一个IP地址进行AND操作可以提取出网络部分,在取反后进行AND可以取出主机部分
·子网:内部将一个网络块分成几个部分供多个内网使用,但对外则仍然像单个网络一样,这种操作就叫子网划分。分出的一系列结构就是子网。
我们可以看到,子网位是从原本的主机位中抽出来的,然后被归于前缀
·分类和特殊寻址(这里最好看书p345)
·子网掩码除了要用1覆盖掉前缀(包括类型位和网络段),还可以有更多的1,被1覆盖的部分用于指明子网,没被1覆盖的部分可以用于指明子网中的主机
·一些特殊的IP地址:
·全为0
全0的IP地址代表本机
·网络段全为0,主机号部分有内容
代表默认认为这个地址和本机存在于同一网络中
·全为1
代表进行本地广播
·网络段有意义,但是主机位全为1
远端广播
·127开头
特殊的回环测试用ip地址,不是互联网中可用的ip地址
基于以上特殊ip地址,我们禁止主机位全为0或全为1(不过这是约定)
3.子网划分
子网划分时,要根据子网要求的主机数量确定使用的主机位位数(这代表我们划分子网时必须是2^m个主机数)。再辅以提前确定的地址类型(A类?B类这样的),我们就可以确定拿多少位做子网位了。
我们要用恰到好处的位数当主机位,剩下的位全都当子网位。
4.CIDR——无类域间路由(路由聚合)
·起因:
B类地址对大多数机构来说太大了,IP地址会因此浪费并被很快用光
路由选择表暴涨
·路由聚合
把多个长前缀的小地址块合并成一个短前缀的大地址块,这个合并过程称为路由聚合,产生的较大地址块称为超网
·CIDR无类域间路由
在路由聚合机制之下,同一个IP地址可能被不同的路由器看作有不同的前缀。这种与类别地址层次编码不同,每个路由器有各自的前缀信息的路由称为无类域间路由
·基本思想:以可变长分块的方式分配C类地址(这个思想被提出时只剩这些IP地址了),并且有“分了又分”的操作
·原则1:分配出去的一块地址,一直保持不变的位数需要相同。例如:如果你需要分配4096个地址作为一块,那就要让这4096个地址前20位完全相同,后12位遍历0~4095.
·原则2:最长前缀匹配——一个IP地址到来后,如果和多个路由表中的表项匹配,那么谁匹配的长度最长就发向谁
5.NAT——网络地址转换
·基本思想:一个内网中有非常多的设备,但是他们对外共享一个IP地址。一个数据包从内网向外传时就需要将IP地址转化为面向外网的真实IP地址。
·问题:有数据包传回来的时候,由于所有设备都共享一个外网IP,我们如何将这个数据包传给指定的设备?
·解决方法:
使用源端口号字段存储一个索引,这个索引和内网IP地址和原来的源端口信息建立映射
当一个出境的数据包进入NAT盒子,其IP地址被真实的对外IP地址替代,源端口段被一个索引值替代(也就是说出去的数据包中的源端口段已经失去本来的意义),NAT盒子中的地址转换表中会更新一个表项,由这个索引值指向原本的内部IP地址+源端口
然后还要重新就按IP头和TCP(传输层)头的校验和
入境数据包会提取源端口号,当做索引项在地址转换表中找到内部IP地址和真·端口号
·问题:它破坏了IP协议的很多原则
·IP地址不再唯一标识世界上的一台机器
·违反了分层规则,NAT使用了端口号,它是别的层的
·NAT盒子保持端口号和IP地址的映射,这是面向连接网络
·地址转换表项只能由出境数据包建立,那之后入境数据包才能正常输入
6.Internet控制协议
·ICMP——Internet控制消息协议
路由器处理的一个数据包过程中发生意外,可通过ICMP向源端报告有关事件
·ARP——地址解析协议
将目标IP地址转化为MAC地址(数据链路层地址),以支持数据链路层帧的包装
·同一个以太网下
当一个主机需要知道一个IP地址对应的MAC地址时,在以太网中广播,问谁有这个IP地址对应的MAC地址。当然,只有这个IP地址对应的设备会返回自己的MAC地址来应答。这样就有了
请求这个MAC地址的主机还应该缓存这个地址,留着稍后用,省得广播。并且请求MAC地址的主机还应该把自己的IP-MAC地址对应关系也包含在这个ARP包里
ARP缓存中的表项应该定期超时清理
·不同以太网上(路由器不转发以太网级广播报文)
这个时候主机会发现目标IP地址不在这个网路中,那它就会请求路由器(往往称为默认网关)在这个以太网中的端口的MAC地址,默认网关的IP地址应该有这个网络里的最低地址。然后它就会利用这个MAC地址向路由器发送帧。
路由器这个帧后,可以通过IP内容了解到这个数据包该发送到哪个网络,该走哪个端口。路由器要是不知道目标IP的MAC地址还可以ARP。
还可以进行ARP代理:路由器直接以自己的MAC地址作为结果返回,路由器将发来的帧转发到该去的网络。
·RARP——反向地址解析
由MAC地址找IP地址的协议
·DHCP——动态主机配置协议
当一个主机接入网络后,广播一个报文,DHCP服务器接收后(在这个广播不能被DHCP直接接收时要由路由器转交),DHCP会分配出一个空闲的IP并根据以太网地址作为标识把IP地址返回
7.内部/外部网关路由协议
Internet由大量的独立网络或自治系统(AS)构成,它们内部有各自的内部网关协议,之间则使用外部网关路由协议
·OSPF——内部网关路由协议
开放的最短路径优先协议。是一种常用的内部网关协议,属于链路状态路由协议的一种
它考虑的对象是路由器和一个区域
·BGP——外部网关路由协议
边界网关协议。用于连接自治域。是一种改进了的距离矢量路由协议(相比原本的路由协议,节点还能从邻居那里获得到达目的地的路径,从而避免路径上有自己形成环),保存完整的路由信息。
它需要涉及各种政治、安全、经济等方面考虑
第六章——传输层
·消除网络层的不可靠性
·提供从源端到目的端可靠的、与实际使用的网络无关的信息传输
·传输实体:完成传输层功能的软硬件,利用网络层提供的服务向高层提供有效的、可靠的服务
·标识实体的标签为端口号,专注于两个计算机上的进程的连接
一、传输协议的要素
这里介绍的内容带有理念性,它们传输层协议的理念模型,实际实现可能不一样。
1.寻址
·TSAP:传输服务访问点,代表传输层服务上的端点;NSAP则是网络服务访问点,比如IP地址
·我们想要把摸一个进程关联到本地TSAP不是问题,但如何获得我们想要交流的远方的服务程序的TSAP?即寻址
·planA:预先约定
使用广为人知的TSAP,将其用于永久不变的服务。但是这个方法不能大规模使用,用户的进程总是变化的。
·特殊的进程——Name Server名字服务器/Directory Server目录服务器
在一个众所周知的端口上监听。
所有新服务被创建时都要向他注册,将服务名(一个ASCII字符串)和TSAP告诉他。
用户要和名字服务器连接,发送服务名以获得TSAP
·planB:初始连接协议
这个协议用于避免那些很少人使用的服务长期活跃并监视端口。
由进程服务器在一个众所周知的端口运行,同时代替那些实用的服务器监听各个端口。进程服务器监听到某一个端口的一个用户请求后,如果这个端口还没有实用服务器在等待,那用户就会先获得一个和进程服务器的连接,然后进程服务器派生出实际需要的服务器的并转交连接
2.建立连接
·问题:要在数据包丢失、损坏、延迟、重复等情况下保持架构的可靠
·planA:唯一传输地址
每次传输都生成一个唯一的地址,连接结束就丢弃,永远不再使用
·planB:唯一标识符
每个连接都有一个唯一标识符,所有传输实体都要维护一个包含所有过期连接的表
·planC:两次握手
A发出连接请求CR Segment,B发回连接确认ACK Segment
这个方案会因为网络层丢失、存储和重复包而失败
·planD:三次握手方案
A发出序号为X的CR Segment
B发出序号为Y的ACK Segment并用ACK ACK=x来确认A的序号为X的CR Segment
A发出序号为X的第一个数据Segment,并确认B的序号为Y的CR Segment
每个DATA都得带着seq代表自己的连接标签,ACK代表获得的对方的连接标签。旧的请求携带的ACK一定会和当前的连接产生冲突(看b),只要Host2记住自己当前的连接标签,就可以拒绝那些旧的请求了。
Host2收到任何CR都会回复一个ACK,Host1会检查对方发来的ACK,这样就可以确认这是不是自己尝试新建的连接了。如果不是的话就会回复REJECT
这两者配合,前者保证接收方不会接收到错误的连接的数据,后者保证发送方会告知接收方一个请求的错误。
3.释放连接
实际上释放连接很难有说完全完美的方案
·planA:非对称释放
一方释放连接,整个连接就断开
·planB:对称释放
将连接看成两个单向连接,双方都同意断开才是彻底断开
·实际plan:三次握手
仍然是一个类似三次握手的协议
发起断开的一方要向对方发送一个DR(disconnection request),并启动一个计时器
另一方接收到DR后返回一个DR,并启动一个计时器
请求断开方在接收到回复的DR时发回一个ACR并释放连接
另一方在接收到ACR后释放连接
如果“另一方”没能接收到ACR(ACR因种种原因发不到),那么会在一段时间后超时释放连接
如果发起方接收不到“另一方”的DR,那么会在一段时间后超时继续发送DR并重新启动计时器
理论上,如果发起方发送的所有DR都丢失也会引起问题,我们可以让它在发送N次DR后强行释放连接,不过这样“另一方”又会无法正常释放连接(因为它从来都没有收到过DR),这个连接成了半开连接
我们可以让双方在一段时间内接收不到另一方发送的内容就断开连接。不过为此,双方都要在不想断开连接但没有数据可发的时候发送没有内容的哑帧来保持连接
4.流量控制和差错控制
·缓存
网络层是不可靠的,传输层实体必须缓存所有连接发出且未被确认的数据以备出错重传
有三种缓存机制:固定缓存大小,可变缓存大小,大循环缓冲区(顾名思义)
在这个过程中会使用累计确认,同样有seq、ack。
接收方返回ack是同时会返回buf来指明自己缓冲区的剩余。为0时发送方就要停止。
·流量控制和拥塞控制面临的问题
流量控制解决接收方没有足够缓冲区引起的问题
拥塞控制解决网络容量不足引起的问题
二、UDP
·不需要建立连接
·收发双方不握手
·每个UDP报文处理都是独立的
·延迟小
·没有连接状态、简单
·报文头小
·没有拥塞控制、差错控制,但可以尽快发送
·应用于:可以容忍丢包、速度敏感的场景,如流媒体
·应用程序可以自己定义错误恢复
·UDP头结构可以参考书P418,伪头在计算校验和后就被丢弃
1.UDP头
UDP头有源端口和目标端口,这是UDP的存在的必要性
2.IPv4伪头
这是IPv4伪头,UDP计算校验和时可以选择构建一个临时的IPv4伪头,加入校验和的一部分,然后丢弃。这有助于检测出被错误递交的数据包
三、TCP
1.TCP服务模型
·1024以下的端口号保留
·TCP连接:全双工、点到点、不支持广播和多播、字节流而非消息流(不保留消息的边界,不知道字节所代表的是什么消息)
2.TCP协议基础
·每个字节都有自己的编号
·累计确认:编号靠前的字节必须先被确认,后面的字节才能被确认
·接收方在接收到信息后会返回一个段,其中的确认号的值指明了接收端期望接收的下一个序号,应该是刚接收的字节的序号+1(与之前的有区别)
3.TCP的头
源端口字段和目标端口不用说
序号和确认号就是seq和ack。TCP流中的每一个字节都会被编号,序号和确认号都是基于这个“每个字节都编号”的原则来的
TCP长度的单位是32位
CWR和ECE作为拥塞控制信号,TCP接收端收到拥塞指示后就会设置ECE位,告诉发送端发慢点;TCP发送端设置CWR,代表自己已经放慢了,不需要继续借助ECE发送信号了
URG=1代表紧急指针启用
ACK=1代表ack字段有效,ACK=0时确认信息是无效、可忽略的
PSH=1表示这个数据是被PUSH推出来的,很着急,请求接收端立刻将数据交给应用程序
PST=1表示重置一个混乱的连接,它为1就是连接出问题了
SYN代表是否处于建立连接的过程,即是否为连接请求和连接应答。SYN=1&&ACK=0表示它是一个连接建立过程且没有确认字段,对应连接请求;SYN=1&&ACK=1表示它是建立连接的过程且带了确认,对应连接应答。
FIN=1代表释放连接
后面是窗口大小
4.TCP连接建立
三次握手,和之前的那个一样。但是要注意的是ACK是接收到的序号+1,代表自己的期望接收。
5.TCP连接释放
可以将TCP连接视为一对单工连接,任何一方都可以通过使用FIN字段请求关闭,另一方可以返回ACK来确认。一次ACK和一次FIN可以合并。
如果请求FIN的一方在两倍于最大数据包生存区的时间内都没有回应就直接释放连接,另一方也会因此超时。
6.TCP滑动窗口协议
两端都有一个缓冲区,接收端返回时需要标明自己窗口剩余大小
·Nagle算法
发送端只在一开始发送一个小数据包,之后到达的字节都先缓冲,直到前一个数据包被确认或者缓冲区满再发送
·低能窗口综合症
接收端一次从缓冲区里读一个字节,并立刻向发送端更新窗口信息的话,就会导致发送端一次发一个字节
·Clark算法
不允许接收端发送只有1个字节的窗口更新段,强制要求接收端缓冲区有一定量的可用空间后再告诉发送端
7.TCP拥塞控制
·慢启动算法
实际上这是一个不断的探测过程,而且我们并不会管到底是什么引起了超时,这只是一个尝试解决问题的过程。
*快速重传
我们要求接收方如果收到了跨顺序的包(比如手里有1、2接到了4),就会不断返回旧确认号,称之为重复确认
发送端在接到三次这样的重复确认后就会重发这个可能丢失的包,慢启动阈值设置为当前拥塞窗口的一半(如同超时一样)
第七章——应用层
一、DNS——域名系统
1.基础定义
我们利用域名系统,可以将一个名字映射成IP地址
应用程序可以调用一个叫解析器的程序,将名字作为参数传给这个程序。这个程序会向本地DNS发送一个包含该名字的请求报文,本地DNS查询到这个名字对应的IP地址就会将它返回给解析器,解析器再将它返回给调用方
2.域名的格式
·每个域由它往上到根的路径命名(越靠后越靠近根),成员由“.”分隔:cs.zju.edu.cn
·域名对大小写不敏感
·成员名最长63个字符,路径名不能超过255个字符
·顶级域分为通用域和国家域
比如:eng.sun.com
3.域名资源记录
每个域都有一组与它相关的资源记录,这些资源记录不只限于IP地址
资源记录格式:域名 生存期 类别 类型 值
·域名:额……域名
·生存期:指代的其实是该记录的稳定程度
·类别:对于Internet信息,这里总是IN,其余情况可能是其它的代码,但少见
·类型:指明这是什么类型的记录
4.域名服务器
为避免单个信息源带来的诸多问题,DNS的名字空间被划分为不重叠的若干区域,分给不同的DNS服务器来存储、处理。
比如这里,能处理eng.yale.edu的域名服务器是处理不了cs.yale.edu的
·查询过程
当我们进行一次域名查询但本地域名服务器没有时,域名服务器就会查询从根服务器开始发动查询。
如果收到查询请求的服务器没有这条记录(因为是分区的),那么这个更接近顶级的域名服务器根据这个域名发现自己下属的哪一个域名服务器可能能查询到,并将它的IP返回。如此反复,直到最终找到保存有记录的域名服务器。
二、HTTP——超文本传输协议
这段可以看书P531
HTTP是用于web服务器与客户之间传输信息的协议
它涉及了各种略有额外通用性的方法
有不同的响应状态码等
1.方法
2.响应组的状态码
3.消息头
最后
以上就是迷人柠檬为你收集整理的江湖救急笔记——计算机网络第一章——概述第二章——物理层第三章——数据链路层第四章——介质访问子层第五章——网络层第六章——传输层第七章——应用层的全部内容,希望文章能够帮你解决江湖救急笔记——计算机网络第一章——概述第二章——物理层第三章——数据链路层第四章——介质访问子层第五章——网络层第六章——传输层第七章——应用层所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复