计算机网络 通信网络笔记(自顶向下的方法)from top to the botton of MIT
作者:互联网
网络利用率大并不是好事:会导致网络很堵,速度变慢。时延变长。
第一章计算吞吐量:
考虑下图,其中有一个机构网络连接到互联网。假设平均对象大小为900,000位,并且从机构的浏览器到原始服务器的平均请求速率为每秒15个请求。还假设从接入链路互联网上的路由器转发HTTP请求到收到响应所需的时间平均为3秒。对于平均接入延迟(access delay),即从互联网路由器到机构路由器的延迟,可以建模为,ta是通过访问链路发送对象所需的平均时间(也就是机构网络到原始服务器网络的时间,圈起来的部分),b是对象到达访问链路的速率。
[1]查找总的平均响应时间。
[2]现在假设在机构局域网中安装了一个缓存。假设错过率为0.4。假设如果缓存满足了请求,则响应时间可以忽略不计。查找总的平均响应时间。
•Find the total average response time.
Answer: 900,000 bits=0.9Mb
Ta=0.9/15=0.06 S
b= 15
T=T0+Taccess=3+0.06/(1-0.0615)=3.6 S
[2 marks]
•Now suppose a cache is installed in the institutional LAN. Suppose the miss rate is 0.4. Assume that the response time is negligible if the request is satisfied by the cache. Find the total average response time.
[2 marks]
Answer:
b是objects到达访问链路的速率因此Tab=0.9M,
当缓存丢失时,只有原来的0.4的数据需要ACCESS下载,其他直接在本地LAN下载即可。
所以接入延迟 Taccess=0.06/(1-0.4Tab)=0.09375 S,
本地接入网络LAN下载速度是100Mbps非常快,0.6*Tlan这项可以看作0
如果缓存丢失 平均响应时间为=T0+Tlan+Taccess =0.09375 +0+3=3.09375 s,
如果缓存命中则为 0 s
因此,平均响应时间 =0× 0.6 + 3.09375× 0.4 = 1.2375 s
设置重传时间间隔RTO的计算:
需要三个参数 Estimated估计RTT sample采样RTT device设备误差RTT
估计RTT=(1-a)上一次估计RTT的值+a采样RTT
设备误差DEV RTT=(1-b)上一次设备误差DEV RTT的值+b|采样RTT-上式求得的估计RTT|
然后就可以计算重传时间间隔RTO=估计RTT+4*设备误差dev RTT
对IP包分块长度的计算:
Suppose a router receives an IP packet containing 600 data bytes and has to forward the packet to a network with maximum transmission unit of 200 bytes. Assume that the IP header is 20 bytes long. Show the fragments that the router creates and specify the relevant values in each fragment header (i.e., total length, fragment offset, and more bit).
[5 marks]
假设一个路由器接收到一个包含600个数据字节的IP包,并且必须将该包转发到一个最大传输单位为200字节的网络。假设IP头是20字节长。显示路由器创建的片段,并在每个片段头中指定相关值(即,总长度、片段偏移量和更多位)。(如果在TCP报文还要再加20字节长的头部)
ANSWER:
IP数据包=600数据字节
MTU(最大传输单元)=200字节
IP头=20头字节
(其结果是IP头至少为20字节)
每个片段的最大可能的数据长度=MTU-IP头=200-20=180字节。
由于ip片段的数据长度必须以8字节的倍数为单位,我们可以得到每个片段可以携带的最大数据字节数是180/8=22。。。。。4,因为数据字节应该是整数,我们应该对每个数据字节使用22,每个片段会剩下4个字节,太可惜了直接丢弃掉。
ip片段=228=176字节
我们应该携带600字节的内容作为一个IPpacket:600/176=3…72
20+176=196
20+72=92
所以我们有3组196字节和1组92字节,它们的Mf=为0
IP packet = 600 data bytes
MTU (maximum transmission unit)= 200 bytes
IP header = 20 header bytes
(as the IP header is at least 20 bytes it results)
Maximum possible data length per fragment = MTU – IP header = 200 – 20 = 180 bytes.
For the reason that ip fragments’ data length must be in multiples of 8 bytes, we can get the maximum number of data bytes that can be carried per fragment is 180/8=22.5 because the data bytes should be integer we should use 22 for each data byes.
ip fragments=228=176 bytes
We should carry 600 bytes ’ content as an IP packet:600/176=3…72
20+176=196
20+72=92
So we have 3 groups of 196 bytes and 1 group with 92 bytes whose Mf=0
so this is the result:
当我们有3组196 bytes和1组92 bytes的TCP报文时,我们的fragment offset(也就是数据偏移)应该为下表所示(只算前不算后,统计之前的有效信息是多少组的8 bytes),而MF就记住哪一段是最后一段给它标0就行了。Fragment Offset表示的是有效信息里含了多少个8字节的单位(8 bytes as a unit)
The sequence is like this:
Total length Fragment Offset(8 bytes as a unit) Fragment FLAG
Fragment 1 196 0 1
Fragment 2 196 22 1
Fragment 3 196 44 1
Fragment 4 92 66 0
2.已知子网掩码和一个IP地址,对IP子网段的计算:
A host in an organization has an IP address 150.32.64.34 and a subnet mask 255.255.240.0. What is the address of this subnet? What is the range of IP addresses that a host can have on this subnet?
[4 marks]
ANSWER:
address of this subnet=IP address “and” subnet mask
10010110 00100000 01000000 00100001
AND 11111111 11111111 11110000 00000000
result: 10010110 00100000 01000000 00000000
In the decimal is 150.32.64.0
the range of IP addresses that a host can have on this subnet:
法一:256-240=16=24 so 4+8=12 is the host digits. 212=4096. 4096-2=4094
4094/256=15 …254
64+15=97
So IP address is from 150.32.64.1 to 150.32.79.254
法二:将子网掩码取反后 或运算 with IP地址 得到广播地址 150.32.79.254
子网地址到广播地址的范围就是可分配地址的范围
已知拥有的IP地址,计算子网掩码CIDR(无类别域际路由选择)
3.A small ISP owns the following networks: 128.56.24.0/24, 128.56.25.0/24, 128.56.26.0/24, 128.56.27.0/24. Perform CIDR aggregation of these networks.
ANSWER:
24=11000 25=11001 26=11010 27=11011
These demonstrate:110xx the variable digits:2
So the total variable digits are :32-24+2=10
How many digits are “1” in the mask: 32-10=22
SO the mask is 128.56.24.0/22
Details:
128.56.24.0/24 =10000000.00111000.00011000.00000000
128.56.25.0/24 = 10000000.00111000.00011001.00000000
128.56.26.0/24 = 10000000.00111000.00011010.00000000
128.56.27.0/24 = 10000000.00111000.00011011.00000000
Mask = 11111111.11111111.11111100.00000000
The resulting prefix is 128.56.24.0/22
如何描述排队时延的决定因素是什么呢? 即 流量是周期性到达(有序不堵塞) 还是突发性到达(阻塞导致产生连锁效应,不断阻塞)
如果⽤ a 表示分组到达队列的平均速率( a 的单位是分组/秒,即
pkt/s)前⾯说过 R 表示的是传输速率,所以能够从队列中推出⽐特的速率(以 bps 即 b/s 位单位)。假设所有的
分组都是由 L ⽐特组成的,那么⽐特到达队列的平均速率是 La bps。那么⽐率 La/R 被称为 流量强度(traffic
intensity) ,如果 La/R > 1,则⽐特到达队列的平均速率超过从队列传输出去的速率,这种情况下队列趋向于⽆限增加。所以,设计系统时流量强度不能⼤于1。
现在考虑 La / R <= 1 时的情况。流量到达的性质将影响排队时延。如果流量是 周期性 到达的,即每 L / R 秒到达⼀个分组,则每个分组将到达⼀个空队列中,不会有排队时延。
每组的bit长度*到达缓冲区的速度/输出给下一个节点的比特率
如果流量是 突发性 到达的,则可能会有很⼤的平均排队时延。⼀般可以⽤下⾯这幅图表示平均排队时延与流量强度的关系
吞吐量:传播x比特的文件用了T秒,吞吐量=X/T,等同于比特率的计算,单位也是bps。
8层传输模型:应用层(表示层、会话层)、传输层、网络层、数据链路层、物理层。
应用层就是 打包工人,负责把小程序的数据编码解码成通信中的编码,把货物进行封装。 数据在传输层被完整的接收后,会传递给由端⼝号识别的应⽤程序进⾏处理。也就是传输层按端口号把数据拿给对应的应用层端口:“你帮我看看这写的是啥啊。”于是应用层说:“好的,我帮你套接字也就是socket,从这这叫做AIP应⽤程序编程接⼝ (Application Programming Interface,API)出来的都是我给你翻译好的材料”,“但是你要注意了,我们这些端口的号码不同,你可别找错应用程序了,不然肯定翻译出来的是乱码”。
Alice用网页发送邮件到outlook服务器然后服务器把邮件放到bob的邮箱,bob再读邮件,分别用到HTTP/smtp/smtp/pop3协议。
IMAP 代表Internet 消息访问协议,也可以访问邮箱。IMAP 与 POP 不同,因为您的电子邮件“实时”在服务器上,您可以从多个设备访问同一个收件箱。与 POP 的下载和存储本地机制不同,IMAP 让您可以实时访问同一个收件箱,无论您使用什么设备。
应用层还很谨慎:“你丢包了可以叫人家重新发,但是我要能够查到丢包再通知你,我压力很大”特别是像电子邮件、WORED文档这种准确性要高的,如果是像视频这种我还能丢几个包。
传输层的上家应用层不靠谱,下家网络层会丢包,只能靠自己提高准确性,
于是准确性高就用可靠数据传输(reliable data transfer): 也称为RDT协议:1.0(小弟很可靠),2.0(小弟会flip反转一些位,包2错误了,那我ack只能给你NACK,提示你重发),3.0(小弟不仅会反转还会发送的时候丢包,那我的定时器会让我再发一次ACK,提示你超时重发;包2错误了,那我ack只能给你ACK1,取消了NACK这个玩意儿)
selective repeat(类似go back N,但是selective可以选择性重发,不用直接退回到出错的位置,但是窗口大小只有2n-1和go back N比差了一倍!!!)、窗口滑动、go back N(窗口大小2n-1)这些方式来反复确认丢包了吗?要确认你有没有给我反馈,我不可能一直在原地傻等,于是我设定2RTT为我的等待期限,用我的定时器timer进行计时,要是2RTT你还没寄过来,我就当你没收到。
Stop-waiting模式中(RDT3.0协议) 当超时定时器RTO设置到小于RTT的时候会出现这种情况:
假设A发送的两个段按顺序到达B。第一个确认丢失,第二个确认在第一个超时间隔之后到达。绘制一个时间图,显示这些段以及已发送的所有其他段和确认:(如果一个包有N个字节并从seq=K开始,则ACK返回的值为k+N)
但是这种stop-waiting效率不高: 利用率才不到千分之一!! 有效吞吐量=波特率R*利用率=270kbps 你搞再大的带宽也没用,还是搞个缓存区来窗口滑动(流水线作业)比较有用
为了提高效率 采用流水线作业(采用窗口方式不断发送):sliding window的原因
那接收时候的确认方式知道了,我还得保证输送过来的东西没丢包啊,那你传输层就得采用可靠的TCP协议(但是也有代价,我的首部比较长导致传输的信息少,而且要先建立连接再传输,那肯定就得等我进行三次握手咯,而且输送完了必须关闭连接因为会占用链路资源,所以我还得四次挥手)。
而TCP是如何防止packet switch中缓冲区拥堵导致丢包的呢,当接收⽅和发送⽅之间的⽹络出现拥塞时,TCP 的拥塞控制会抑制发送进程(客户端或服务器),防止你发送到缓冲区去丢包。发送窗口的值是swnd = min(cwnd, rwnd),也就是拥塞窗口和接收窗口中的最小值。 有了TCP这个传输层的可靠协议,我应用层的HTTP协议就可以顺利和他配合,解析HTML语言了。
拥塞控制总结:
做完了这些准备,可以开始做事了:当我要访问www.xxx时,应用层先找DNS服务器进⾏域名的映射,找到对应的IP地址,然后定义TCP应该包含的信息:http协议在80端口,于是80端口再告诉传输层TCP,我给你路由表帮我找到IP是这个的人,把我要的东西告诉他。搞定后,www.xx的服务器返回一个响应的html文件,我这边的客户端通过socket映射后成功解析了超文本,生成对应的图片。 我接收完报文后,TCP连接马上关闭。
值得一提的是,虽然TCP响应完就关闭,但是第一次连接后服务器就回给我一个cookie值,并存在了服务器中,每隔一段时间才删除,下次客户端发送请求时候,报文头部就带了COOKIE值,就能获得更个性化的体验了。但是上网速度并没有提升,提升还是要靠缓存服务器:Web 缓存(Web cache) 也叫做 代理服务器(proxy server)。举例:NETFIX为了提高客户体验,把缓存服务器部署在了各个ISP的子网中。
CDN(content delivery network)内容分发网络: 阿里云进行加速(就近访问)、腾讯云 视频直播、点播、RTC(real time实时音视频)。
CDN 利用更靠近用户的服务器向其提供内容,使得速度大大提升,并且对整条链路的带宽影响变得很小。实现方式:管理分布在多个地理位置上的服务器,在每个服务器上缓存各种视频、⾳频、⽂件等。CDN 权威服务器储存着哪个服务器存在你想要的资源,然后给你这个表你自己去找他要。
CDN服务器放置原则:其中一种服务器放置理念被称为深入EnterDeep,它通过在世界各地的访问isp中部署服务器集群,深入进入互联网服务提供商的接入网络。其目标是减少延迟,并增加最终用户和CDN服务器之间的吞吐量。另一种理念是“带回家”,它通过在较少的站点上构建大型CDN服务器集群,并通常将这些服务器集群放在ixp(互联网交换点)中,从而将isp带回家。与深层设计理念相比,这种回家设计通常会导致更低的维护和管理成本One server placement philosophy is called Enter Deep, which enter deep into the access networks of Internet Service Providers, by deploying server clusters in access ISPs all over the world. The goal is to reduce delays and increase throughput between end users and the CDN servers. Another philosophy is Bring Home, which bring the ISPs home by building large CDN server clusters at a smaller number of sites and typically placing these server clusters in IXPs (Internet Exchange Points). This Bring Home design typically results in lower maintenance and management cost, compared with the enter-deep design philosophy
传输层就是修高速公路的,路桥专业最擅长的就是建立连接(按照端口号查找是对哪个应用程序进行连接,然后投放包裹,留给应用层使用),把packet switching中的网络修起来等待使用。 协议:TCP、UDP(二者都有校验和,检查包是否损坏),UDP速度更快(所以拿来打游戏和电话),但是UDP没有重传机制(直接就把包扔了就敷衍完事了),没有selective repeat和go back N这种可靠的通信协议RDT。
TCP 会将要传输的数据流分为多个 块(chunk) ,然后向每个 chunk 中添加 TCP 标头,这样就形成了⼀个 TCP段也就是报⽂段。TCP报文有:源端口号、目标端口号、源IP地址、目标IP地址四大寻址内容,因此需要更多的头部空间,而UDP报文只需要两大寻址内容:源端口号、目标端口号即可(因为他不需要构建连接进行双向通信,所以我只要知道哪个端口来解析我的包就行了,至于包我就每人发一份)
窗口滑动机制:有缓冲区,缓冲区长度就是窗口长度,当我送出多个位让前端不断拓展,但缓冲区已经满的时候我就不能再送了,开始等待ACK1的到来,来一个ACK我的后端就向前移动一位。
Sliding window 的接收窗大小(在GO BACK N中为1)和发送窗大小之和不能大于序列的位数组合 即Ws + Wr.<2m 原因是:为了防止数据包被误识别。 如果窗口大小大于序列号空间的一半,如果ACK丢失,发送方可能会发送一个接收方认为是重传的新数据包。 因为新包与旧包有一些相同的段。
主机 B 在没有接收到⾃⼰期望序列号的报⽂段时,会对之前收到的数据进⾏确认应答。发送端则⼀旦收到某个确认应答后,⼜连续三次收到同样的确认应答,那么就会认为报⽂段已经丢失。需要进⾏重发。使⽤这种机制可以提供更为快速的重发服务 。
流量控制:通过控制发送窗口大小来进行(结合上两行我讲到的接收缓冲区,)发送端每隔几次发送⼀个 窗⼝探测包 ,接收端会告诉他现在是否拥堵,当接收端的缓冲区数据溢出,窗⼝⼤⼩的值也被设置更⼩告诉发送端,从⽽控制数据发送量。 (它是基于接收端的控制,是一个局部性的控制,因此它只考虑接收端能不能接收数据而不考虑其他人要不要用到这条宽带)
从大局提高带宽效率的情况下我们使用的是拥塞控制:拥塞控制是一个全局性的过程,涉及到所有的主机、路由器,以及与降低网络性能有关的所有因素。
就好比:所有接收的货车都有空等你运来,难道你就能无限制地运吗?肯定不行,因为来的车多了路就被堵死了
快速重传:在超时重传定时器到期之前,接收收到连续三个相同的 ACK 后,发送端就知道哪个报⽂段丢失了,于是发送⽅会重发这个丢失的报⽂段,这样就不⽤等待重传定时器的到期,⼤⼤提⾼了效率。
RTO设太大直接失去作用:有你这个定时器和没你都一样,我自己都知道错了我要你干嘛??
RTO设置太小:Premature timeout过早超时,天天催的都是重复的消息,烦死人了
最理想的RTO:在第二个ACK来催之前我已经把第一个的SEQ补发出去了。应该把RTO时间设置为比RTT稍微大那么一点点。
快速重传机制(三个一样的ACK就重发一次你这个ACK对应的序列):
既然TCP安全又可靠,那么如何建立两点的TCP连接呢? 三次握手(上述提到的缓冲区分配导致TCP容易受到泛洪SYN攻击,解决办法:回复RST叫他别再发了)
SYN 标志位 被置为 1代表没有连接:序列号SEQ表示目前生成的举动是谁发起的,ACK表示确认刚刚收的行为是谁做的。
传输层的输送结束后,TCP连接被关闭(四次挥手关电话) 主机中的缓存和变量 将会被释放。
流量控制:TCP 通过监控缓冲区控制窗口大小,让「发送方」根据「接收方」的实际接收能力控制发送的数据量。(为了接收方的窗口好)
拥塞控制:通过降低发送速度,降低对带宽的占用率,避免利用率太高,阻塞宽带。(为了宽带好)
分为两种:1、TCP采用端到端的拥塞控制:如果超时或者三次冗余确认就被认为是⽹络拥塞,TCP会减⼩窗⼝的⼤⼩,或者增加往返时延来避免。
2、(常用在银行系统)ATM⽹络辅助的拥塞控制 : 在⽹络辅助的拥塞控制中,路由器会向发送⽅提供关于⽹络中拥塞状态的反馈。这种反馈信息就是⼀个⽐特信息(信元编码)在链路中循环一圈,它指示链路中的拥塞情况。
我们只详细学习TCP的端到端拥塞控制(不依靠网络反馈的信号,只靠我自己收到的ACK判断)
慢启动(slow-start) ,MSS=任务字节数/往返时间RTT,cwnd 的值会初始化为 1 个 MSS,并且每次传输报⽂确认后就会增加一倍。所以一开始的窗口大小是小的,传输速率是慢的。
当 cwnd >= ssthresh 时,就会使用「拥塞避免算法」。规则是:每当收到一个 ACK 时,cwnd 增加 1/cwnd,变成了线性增长。
线性增长到一定程度出现了重复,收到了3个ACK,进入了「重复发生算法」:ssthresh =当前cwnd/2 ,也就是阈值设置为当前拥塞窗口值的一半;(注意阈值要取整,14.5=14)
而拥塞窗口 cwnd = ssthresh + 3 ( 3 的意思是确认有 3 个数据包被收到了)。然后回到拥塞避免状态,继续线性增长。
最糟糕的情况终于来了:出现了超时!!开始【超时发生算法】:直接把cwnd降为0,但是阈值放过你,阈值只需要和重复发生一样设置为:ssthresh =当前cwnd/2。然后重新开始了慢启动状态,新的轮回开始了。
总结:
拥塞窗口小于阈值:慢启动 2倍增加。一开始1/2/4/8,到8开始堵了,cwnd打为1。把8/2=4作为警戒值。
大于拥塞窗口的时候是拥塞避免: 线性增加
收到3个ACK:拥塞发生ssthresh =cwnd/2 ,也就是设置为刚刚拥塞窗口值的一半;当前的cwnd=3+cwnd/2
Timeout发生:ssthresh =cwnd/2 cwnd打为1,但是进入快速恢复阶段
全过程如图:一开始1/2/4/8,到8开始堵了,把8/2=4作为警戒值,从1开始,/2/4指数型增加,3个ACK就拥塞避免就行了不用从1开始,变为一半就行。
以上写的是TCP RENO在【重复发生】时候直接把CWND减半,而TCP Tachoe在【重复发生】时候直接把CWND=1(太狠了,跟“延迟发生一样严格”)
Additive increase and multiplicative decrease (AIMD)加法增加乘法减少策略:
乘性减:丢失事件后将CongWin降为1, 将CongWin/2作为阈值,进
入慢启动阶段(倍增直到CongWin/2)
加性增:
当CongWin>阈值时,一个RTT如没有发生丢失事件 ,将CongWin加1MSS。
正如下图所示,不断地震荡波动。
拥塞控制机制会跟踪拥塞窗⼝(congestion window) 的变量 cwnd ,⽤于限制 TCP 在接收到 ACK 之前可以发送到⽹络的数据量。⽽接收窗⼝(rwnd) 是⼀个⽤于告诉接收⽅能够接受的数据量。 cwnd >= 发送了的窗口数据 — 已确认了的窗口数据=发送了但是还未确认的窗口。
传输层的端口复用与分用:复用(multiplexing)以及分用(demultiplexing)利用端口号进行,但是不同的端口号用的都是同一个传输层协议(tcp或者UDP)。复⽤的现实意义:⼀个机构所有部门的不同⽂件都会通过收发室进⾏发出。
分⽤的现实意义:各种邮件通过收发室整理,再发给不同的人。
UDP为什么不可靠?UDP没有拥塞控制,也就是说主机不会因为⽹络拥堵⽽⾃⾏降低发送速率。广泛用于视频对话,语⾳通话,游戏对战等。
UDP为什么速度快?⽆连接性:即发送数据前,不需要特意建⽴连接,结束也不用释放连接,减少了发送数据前的传输时延。
网络层就是货车司机,拿到快递后看单号是要寄到哪里(路由表查找要找哪台ip,要走哪个网关)然后规划路线从高速公路开过去。 协议:IP。
网络层分为:1,数据层(对传过来的包进行头部封装,以8字节为以单位进行切片,并且加上IP地址和掩码,形成数据报)并且在几微妙的时间内把数据报从输入接口移到输出接口 2,控制层(形成转发表,也就是路由表,确定我要从哪里走,也就是路由选择算法:一个个找IP地址太麻烦因此以子网为单位计算看看我要从哪个路由器走比较近)算法分为:BGP边界网关协议 (Border Gateway Protocol)采用矢量路由vector (分布式请求局部最优DJKSTRA)、OSPFOpen Shortest Path First 开放式最短路径优先(广播后搜寻全局最优) 采用link-state路由
数据层就是打包裹,控制层就是找路线配送的。
数据链路层就是小区的快递员,在以太网内部(也就是子网内)投放数据快得很。(MAC:Media Access Control Address),媒体访问控制地址,也称为局域网地址(LAN Address),以太网地址(Ethernet Address)或物理地址(Physical Address)。所有发出的包都带着目标电脑的MAC地址。网络中所有设备收到数据后会自觉比较目标地址是不是自己,如果不是就丢弃。你没看错,全凭大家自觉,因为大家都是一个LAN的自己人。所以这一层对全局是不可靠的,因此之后为了进行可靠通信,我们又衍生出了网络层和传输层。
通过ARP协议将目标IP地址解析为MAC地址,网关把数据封装成帧利用MAC地址传输到下一个路由器的网卡,最终发送到PC的网卡上。MAC地址出厂就决定了,而IP地址是可变的相当于家庭住址不断搬家。(以太网就是最主流的LAN技术实现,便宜的很适合数据中心的深度学习跑代码,10MB30块)找不到对应的MAC地址就叫交换机帮我广播。交换机的作用就显示了:作为老大控制局域网的稳定,采用生成树算法,断开环形网络中的一条边,保证网络为树状防止泛洪。交换机会将C连接的网口跟C的MAC地址绑定到一起,等A给C发数据的时候,交换机只会给C发数据。
LAN局域网的一般距离是几公里为半径,这也是交换机的工作范围。
ETHERNET(a着内特)以太网交换机:即插即用,会self-learning不需要配置。采用MAC多点访问控制协议,或共享介质控制会自学每个数据包的经过介质的 MAC 地址,形成转发表,做好老大的转发角色。以帧frame为单位进行传输,而不是位bit或者字节byte。
同轴电缆、双绞线、光纤的高传输速度使得MAC层不担心丢失的问题,概率比无线通信TCP小多了。
载波Carrier侦听sense多路multiple访问access /冲突检测detection( CSMA/CD ) 是一种同媒介共享介质(或称为多点)访问控制 ( MAC ) 协议,以太网就是用这个。Wireless LAN使用CSMA/CA(avoid) 会要求每个介质提前检查⼀下链路上是否已经产⽣冲突的现象,若有则先等待,并继续检测。而LAN使用CSMA/CD,只在传输时查看是否有冲突,不会提前检查。⼀旦检测到冲突,马上终止发送并把冲突消息广播给大家,并且使用者尽可能早地释放信道。
以上是在LAN局域网中,不冲突意味着一定成功,那么在广域网WLAN中,有很大的问题:因为距离远并且速度慢,电磁波信号传不及时,不冲突不意味着成功传输。
exponential backoff二进制指数退避算法:首次碰撞:在{0,1}选择K;延迟K512位时,第2次碰撞:在{0,1,2,3}选择K,之后的每次碰撞窗口都扩大2倍,总会找到一个没有同时发送的时间。
Delay-Bandwidth Product延迟带宽积:冲突发生时,让先开始重传的人占据传输。
和CSMA载波监听多路访问相对的协议是:ALOHA:直接发,收不到回应我再发。比较自私。
开槽阿洛哈(slot aloha)时间以X秒为单位与帧时间同步的电台在帧到达后,站点在第一个时隙中传输帧退避间隔:以多个时隙为单位。
时码分多路访问TDM:不同的人在不同的时刻讲话。ALOHA就采用这种方式划分信道。
• 频分多路访问FDM:不同的组在不同的小房间里通信
• 码分多路访问CDMA:不同的人使用不同的语言讲话。所有站点在整个频段上同时进行传输, 采用信道编码(极化码就是其中一种)加以区分。
0、随机访问MAC的协议
数据链路层动态随机分配信道时对随机访问MAC协议:ALOHA,CSMA,CSMA/CD,CSMA/CA 载波侦听多路访问(英語:Carrier Sense Multiple Access
ALOHA,CSMA,CSMA/CD的区别仅在于是否对信道进行监听和是否有碰撞检测:
1、ALOHA:不监听,无碰撞检测;
2、CSMA:有监听,无碰撞检测;
3、CSMA/CD:有监听,有碰撞检测。
4、CSMA/CA:有监听,尽量避免冲突。
监听(CS):发送时先判断其他站点是否正在发送数据,监听到有数据正在发送就不发了,根据不同策略等待一段时间(即CSMA的三种退避算法)后再进行发送。但由于通道的传播延迟,仍然可能出现发送端发送完毕,数据帧正在传输中,接收端未接受到的情况,这种情况不会被监听到,此时发送数据依然有可能发生碰撞。
碰撞检测(CD):在无碰撞检测的情况下,发送方不知道信道上是否发生了碰撞。就算信道上发生了数据帧的碰撞,被破坏掉的帧依旧会持续发送到接收方,然后接受方提供反馈之后发送方才能发现产生了碰撞,浪费了时间。有碰撞检测即发生碰撞就立刻从碰撞点返回消息,发送方收到消息后立刻停止发送,等待一段时间后再重传,提高了信道利用率。碰撞检测需要对信道持续监听。
冲突避免(CA):发送包的同时不能检测到信道上有无冲突,只能尽量“避免”。
0.1 CSMA vs ALOHA
Aloha是一种简单的通信方案,最初由夏威夷大学开发,用于卫星通信。在Aloha方法中,通信网络中的每个源在每次有帧要发送时发送数据。如果帧成功到达目的地,则传输下一帧。如果目的地没有接收到帧,则会再次发送该帧。CSMA(Carrier Sense Multiple Access)是一种媒体访问控制(MAC)协议,其中节点只有在验证没有其他通信量之后才能在共享传输媒体上传输数据。
0.2 ALOHA协议
如前所述,Aloha是一个简单的通信协议,网络中的每个源只要有一个帧要发送,就发送数据。如果帧传输成功,则将发送下一帧。如果传输失败,源将再次发送相同的帧。半双工无线链路或两个无线广播系统都能很好地工作。但是,当网络变得更复杂时,例如具有多个源和目的地的以太网使用一个公共数据路径时,就会出现由于数据帧冲突而导致的问题。当通信量增大时,碰撞问题变得更严重。这会降低网络的效率,因为帧碰撞会导致两个帧中的数据丢失。时隙Aloha是对原始Aloha协议的改进,其中引入了离散时隙来提高最大吞吐量,同时减少冲突。这是通过只允许信源在时隙开始时传输来实现的。
0.3 CSMA协议
CSMA协议是一种概率MAC协议,其中节点在共享信道(如电气总线)上传输之前验证信道是否空闲。在发送之前,发送器尝试检测通道中是否有来自另一个站的信号。如果检测到信号,则发射器等待持续传输完成,然后再开始传输。这是协议的“载波感知”部分。“多址”定义多个站点在信道上发送和接收信号,并且由单个节点发送的信号通常由使用该信道的所有其他站点接收。载波感知多址碰撞检测(CSMA/CD)和载波感知多址避碰(CSMA/CA)是CSMA协议的两种改进。CSMA/CD通过在检测到碰撞时立即停止传输,从而提高CSMA的性能,CSMA/CA通过在信道被检测到繁忙时将传输延迟一个随机间隔来改善CSMA的性能。
1、ALOHA
分为纯ALOHA协议和时隙ALOHA两种,无监听,直接发,检测到碰撞后等待一段随机时间后再重传。
1.1 纯ALOHA
工作原理:站点只要产生帧,就立即发送到信道上;规定时间内若收到应答,表示发送成功,否则重发。
重发策略:等待一段随机的时间,然后重发;如再次冲突,则再等待一段随机的时间,直到重发成功为止
优点:简单易行
缺点:极容易冲突
竞争系统:多个用户以某种可能导致冲突的方式共享公用信道的系统
1.2 时隙ALOHA(S-ALOHA)
基本思想:把信道时间分成离散的时间槽,槽长为一个帧所需的发送时间。每个站点只能在时槽开始时才允许发送。其他过程与纯ALOHA协议相同。
可以避免冲撞到发送了一半的帧,但依然有可能多个帧同时在在一个时间槽开始时进行发送,然后再在信道中产生碰撞。比纯ALOHA的信道利用率提升一倍。
2、CSMA
载波监听多路访问CSMA的技术,也称做先听后说LBT(Listen Before Talk)。要传输数据的站点首先对媒体上有无载波进行监听,以确定是否有别的站点在传输数据。假如媒体空闲,该站点便可传输数据;否则,该站点将避让一段时间后再做尝试。这就需要有一种退避算法来决定避让的时间,常用的退避算法有非坚持、1-坚持、P-坚持三种。
2.1 非坚持算法
算法规则为:
⑴假如媒本是空闲的,则可以立即发送。
⑵假如媒体是忙的,则等待一个随机时间后,再次监听进行发送。采用随机的重发延迟时间可以减少冲突发生的可能性。
优点:减少冲突
缺点是:即使有几个站点都有数据要发送,但有可能大家可能等待时延都比较长,致使媒体仍可能处于空闲状态,使用率降低。
2.2 1-坚持算法
算法规则:
⑴假如媒体空闲的,则可以立即发送。
⑵假如媒体是忙的,则继续监听,直至检测到媒体是空闲,立即发送。
优点是:只要媒体空闲,站点就立即可发送,避免了白白浪费空闲时间,减少媒体空闲时间;
其缺点是:假若有两个或两个以上的站点有数据要发送,那么检测到媒体是空闲时候这些站点会同时发送数据,一定会产生冲突。
2.3 P-坚持算法
算法规则:
⑴监听总线,假如媒体是空闲的,则以P的直接发送,而以(1-P)的概率延迟一个时间单位再次监听进行发送。一个时间单位通常等于最大传播时延的2倍。
P-坚持算法是一种既能像非坚持算法那样减少冲突,又能像1-坚持算法那样减少媒体空闲时间的折中方案,P取1时就是1-坚持,P取0时就是非坚持。系统忙的时候可以选择P小一些,闲的时候选择P大一些。
CSMA的三种算法是监听时的退避算法,与碰撞时的不同,发生碰撞时都是等待一段随机时间再重传(个人理解)。
3、载波监听多路访问/冲突检测(CSMA/CD)
由于CSMA在产生碰撞后会依然传送被破坏掉的帧,这样会白白浪费信道容量,一种改进方法是增加碰撞检测。
CSMA/CD比CSMA增加了碰撞检测,在传输时间继续监听媒体,一旦检测到冲突,就立即停止发送,并向总线上发一串短的阻塞报文(Jam),通知总线上各站冲突己发生,停止发送数据,可以提高总线的利用率,这就称作载波监听多路访问/冲突检测协议,简写为CSMA/CD。
CSMA/CD的代价是用于检测冲突所花费的时间。对于基带总线而言,最坏情况下用于检测一个冲突的时间等于任意两个站之间传播时延的两倍(即快要发送到终点时发生碰撞再折回,花了两倍时间)。
3.1 二进制指数回退算法
二进制指数回退算法是CSMA/CD检测到碰撞后需要重传时的回退算法,独有的,与前面不一样:
是从离散的整数集合[0,1,2,……,(2k-1)]中随机的取出一个数r,等待的时延为r倍的基本退避时间,k为碰撞的次数,最大取10,基本退避时间为2倍的传播时延(即争用期)。
当冲突次数超过16次后,发送失败,认为网络过于拥挤,无法发送,丢弃传输的帧,发送错误报告。
3.2 最小帧长
如果帧长过小,信道上就可能存在多个数据帧,当发生冲撞时收到返回时不知道究竟是哪个发生了冲撞,所以规定了最小帧长。
最小帧长等于:2倍的传播时延传播速率
这样可以在发现碰撞时保证信道上只发出了一条数据。为什么取2倍的传播时延2t,是因为如果发生碰撞,碰撞反馈信息会最晚在2t时间内返回。收到反馈消息后最多只需要判断2t时间内发出的是哪一条帧进行重发就可以了。
换个说法:现在正在发送一条帧,还没从发送端发完时收到了一条碰撞反馈,此时从前找2t个时间内只可能存在一个数据帧,就知道是哪个帧出现了问题。假如帧长过短的话,2t时间内可能存在好多帧,就不知道是哪个出现问题了。
10MB/S以太网以51.2us为争用期,一秒可发送512bit数据,即64Byte,所以一般选择64B作为最小帧长。
说白了:CSMA/CD是碰撞后广而告之所有人这里碰撞了,大家(在一个很小的时间间隔IFS inter fragment space后)停止传输,各自随机等待一段时间后再发送。而CSMA是要等人家送到你脸上(经过端到端延迟或者同端有人出去了)才能知道已经有人在使用信道了,但我仍然会把我发送的信号发送完,并不会马上停止。
4、CSMA/CA 协议
CSMA/CD适用于小规模有线以太网,在大规模无线局域网中由于碰撞过多并不适用,由此可以采用避免碰撞的CA协议。
CSMA/CA(Carrier Sense Multiple Access with Collision Avoid,即带有冲突避免的载波侦听多路访问)是一种数据传输是避免各站点之间数据传输冲突的算法,其特点是发送包的同时不能检测到信道上有无冲突,只能尽量“避免”。
利用此协议时,先向信道发送一个RTS帧,承载地址、大概传输时间等信息,接收方会相应一个CTS帧,与发送方预约信道,此时信道就只允许这两方之间进行数据传输,避免了冲突。接收方收到数据后进行CRC循环冗余检验,没有问题返回ACK确认帧,有问题重传。
CA协议无法完全避免冲突,只是预约好信道后不会产生冲突。因为发送RST帧时也有可能与其他的RST帧产生冲突,不过控制消息要比数据短的多,冲突后等待随机重发,二次冲突的概率也小很多。
Inter Frame Space,字面翻译过来就是两个封包之间的传输间隔,一个非常神奇的概念,用Ethernet 来举个例子,如果我在sense 链路的过程中发现bus 是 free 的状态,那我就会马上 send 封包出去,而如果是busy 的状态,则我会在bus 变成 free 状态后再过一个 random backoff time 周期,再send 封包;换做是WLAN,如果bus 碰巧free 状态,我会在等待一个DIFS周期后(周期内bus也要是free) send 封包,而如果是busy 的状态,则要持续等待bus变成free状态,再等一个DIFS周期,然后再等一个random backoff time 周期,才能send 封包。
总结:WLAN要比Ethernet 多等一个DIFS周期再进入等一个random time发自己的包的环节。
5、其他
随机控制访问协议优点是负载轻的时候效率高,负载重的时候冲突开销大,其他协议还有:
同为动态分配信道协议的轮询访问协议,优点是动态划分,没有冲突,缺点是有轮询开销或令牌开销、等待延迟、单点故障。
还有基于多路复用技术的静态信道划分协议,有FDM,TDM,WDM,CDM,优点是没有冲突,负载时都得到利用效率高,缺点是负载低时无法利用全部带宽效率低。
经过链路层,链路层有⼀个 Maximum Transmission Unit ,最⼤传输单元 MTU, 即数据链路层上所能通过最⼤数据包的⼤⼩
VLAN:虚拟局域网技术,隐私保护:DS系的林同学想把网卡的MAC地址挂在EE系的交换机下,但他不想让其他人通过广播知道他也在EE,那么仅有的一台交换机就利用LAN管理软件创建了一个虚拟的LAN用来装林同学的网卡MAC地址,不和其他人装同一个网络。
P2P协议:BitTorrent 是 P2P 使⽤的主要协议。大家共享上传和下载的带宽,当涉及到⽂件共享时,对等⽹络越⼤,速度越快。 在 P2P ⽹络中的许多对等点上存储相同的⽂件意味着当某⼈需要下载⽂件时,该⽂件会同时从多个位置下载。一起把网络扩大,并且对为别人奉献,是最优解。
TELNET ⼜称为远程登录,是⼀种应⽤层协议,它为⽤户提供了在本地机器上就能够操控远程主机⼯作的能⼒。也就是不用密码的账户登录(要密码的是SSH)
SMTP 服务器:邮箱代理服务器。发邮件的内容TCP/IP发给邮件服务器,邮件服务器响应给收件人。
网络层:
IP协议:网络层的路由与转发功能的基础,支撑起了数据层和控制层
如何获得IP地址:1、手动配置:输入IP地址,输⼊⼦⽹掩码,输⼊路由,输⼊ DNS 服务器。
3、动态主机配置协议(DHCP)是互联网协议(IP)网络自动分配IP使用的网络管理协议。设备使⽤ DHCP 协议从 DHCP 服务器请求 IP 地址。DHCP 服务器会为设备分配动态的 IP 地址。当该 IP 地址的客户端租约到期时,该地址就会更改,旧的IP被回收到池子里给其他人。
电信网格管理员通过DHCP的设置实现对IP地址段的区域分配:1、用户请求IP地址 2、你的lease已经过期,我就回复NAK :ACK 的相反的报⽂,表示服务器拒绝了客户端的请求。
当我不需要 IP 地址时,可以发送 DHCP 解除包(DHCP RELEASE) 进⾏解除。
DHCP 分配地址的旧主人和新主人发生冲突,城大网络早上都出现此问题
数据层:致力于构建IP地址打包,2种打包方式:IPV4、IPV6。
IPv6地址由两个逻辑部分组成:一个64位的网络前缀和一个64位的主机地址,主机地址通常根据物理地址自动生成,叫做EUI-64(或者64-位扩展唯一标识)。IPV6的前64位固定表示网络号 ,只有后64位的2的64次方是可以自由分配的 /58的IPV6可以分配的地址是2的6次方。
IPV4:由于首部需要占用一些字符,运输效率没有IPV6高(拓展首部,位数又多,可以支撑物联网的大量IP地址使用)
IPV4:共32位
⼦⽹掩码(subnet mask)⼜叫做⽹络掩码,是32位地址,用于区别⽹络标识和主机标识(也就是说明这些PC属于哪个大哥的势力范围)。子网掩码中设置为1的位数它是用“斜杠符号”写的。因此255.255.255.0可以写为/24,255.255.255.128写为/25,255.255.255.192写为/26
IPV4中的子网有2个IP是要献祭的:首位作为本子网主机地址和末位作为广播地址不可拿来分配
多播传输是向多播地址组发送数据包例如,PC为172。164.1通过本子网的交换机向多播组地址224.10.10.5/24这个网段的兄弟们发送数据包
DMZ称作非军事化区demilitarized 使得病毒隔离于内外网
IPV4数据报格式:MTU是maximum transmission unit最⼤传输单元:每个片段(包含首部在内)最多能装载的数据量。比特率也就是速度单位是bps=bit/s 而传输文件用的大小都是字节byte=8 bits
要换算!! 128组每组64个有效数据和14个传输、网络、数据链路层的头部(有效数据字节数MSS Maximum segment size必须是8的整数倍,以8个字节为一个单位计有效数据),则以1Mbts传输需要多久? 8*(64+14)*128/106 而MTU是最大传输的单位(MSS再加上Header得到的结果)
存活时间(Time To Live,TTL)
⾸部校验和(Header Checksum) 占⽤ 16 位用于对字段纠错,在每⼀跳都查.
注意:首部是4位,和首部校验和区分开。而且TCP作为IP的上一层封装,也有遗留下来的TCP首部
MF = 1 代表后⾯还有分⽚,MF = 0 代表收到的是最后⼀个分⽚。
IPV6:IPv6地址长度为8组16进制(2的4次方)=128位(128 bit)总数为2128或理解为8组每组4个每个数都是16进制=1632=2128。所以IPV6和IPV4都是由32个数组成的,但是IPV6有进制优势,16进制是2进制的4次方,因此相比于IPV4的4组8个位=32位总数为232,整整多了4次方倍。但IPV6是4个数一组以十六进制写入为32个16进制数,而IPV4是8个数一组。帮助减少IPv6地址表示法的第一条规则是省略任何前导0。2000
标签:botton,IP,top,CSMA,信道,TCP,发送,地址,自顶向下 来源: https://blog.csdn.net/qq_45756171/article/details/122268180