计算机网络

课外知识

一、每层的数据是什么?

运输层:报文(segment)

网络层:数据报(datagram);将IP数据报中的数据分片成更小的IP数据报,叫做片(fragment)

二、安全性

  1. 洪泛攻击(TCP连接):要求连接但是仅浪费其分配的资源,不真实连接;解决方案:在第二次握手的时候不分配资源,而是生成一个特殊的序列号(cookie),服务器不记忆cookie信息,而是根据一个复杂的散列函数计算源IP、目的IP和端口号验证该ACK;P172(计算机网络自顶向下 第六版)
  2. DoS攻击(IP数据报的分片):发送一系列的偏移量不为0的数据,目的试图重组数据报(not gonna work)

三、层次与设备

  • 物理层:中继器,集线器
  • 数据链路层:网桥或交换机
  • 网络层:路由器
  • > 网关

第三章:运输层

知识点

3.1 传输层提供的服务

3.1.1 传输层的功能

  1. 提供应用程序(进场)之间的逻辑通信(端到端)
  2. 多路分解(将运输层的数据剥去报文后交付到正确的目的进程中)和多路复用(不同的应用进程都可使用同一个传输层协议)
  3. 传输层对报文提供差错检测(segment);网络层只校验IP数据报首部不校验数据部分
  4. 提供两种不同的传输协议:面向连接的TCP;无连接的UDP

3.1.2 端口和套接字

  • 端口——传输层的服务访问点,识别主机中的应用程序。(套接字只具有本地意义,不同的计算机相同的端口号没有联系)
  • 0-1023:熟知端口号;1024-49151:登记端口号;49152-65535:临时端口号
应用程序FTPTelnetSMTPDNSTFTPHTTPSNMP
熟知端口号212325536980161
  • 套接字——(主机IP地址,端口号),套接字是一个通信端点,它唯一标识网络中的一台主机和其上的一个应用(进程)。

习题

1.关于传输层的面向连接服务的特性是保证可靠和顺序交付

2.TCP和UDP分别拥有自己的端口号,互不干扰;即TCP、UDP可以绑定同一端口来进行通信,因为TCP和UDP协议是互不干扰的,因此各自的端口号也互相独立;

3.TCP报文的首部长度为20B,IP数据的首部长度也为20B;

4.若使用UDP进行数据传输,则应用层必须承担可靠性方面的全部工作;

3.2 UDP协议

UDP做最少的工作,仅在IP数据报服务上增加了两个最基本的服务:复用和分用以及差错检测。应用程序开发者若选择UDP,则应用程序几乎直接与IP打交道。(DNS、SNMP)其优点:

  1. 无须建立连接(减少延时)
  2. 无连接状态(不需要像TCP维护连接状态)
  3. 分组首部开销少(8B
  4. 应用层控制发送的数据和发送时间

校验:计算校验和时,要在UDP数据报之前要加入12B的伪首部(原因:为了凑成16位:12B伪首部+2B源端口+2B目的端口+2B长度+2校验和),计算这16位字的和(溢出则回卷),并将此和的反码写入校验和字段。接收方在把收到的UDP数据报加上伪首部计算校验和;若无差错则结果全为1,否则出错。!!!IP数据报的校验和只检测IP数据报的首部,但UDP的校验和检测首部+数据部分;

习题

1.UDP数据报中的长度字段包括首部和数据部分的长度;

2.UDP校验和段的使用是可选的,如果源主机不想计算校验和,那么该校验和段应为全0

3.UDP数据报的伪首部包含了IP信息,但是伪首部只用来计算校验和,不发送;(既然不发送伪首部,那如何在目的主机中添加伪首部计算校验和?在IP数据报的首部可以拿到IP信息等)

3.3 TCP协议

3.3.1 TCP协议的特点

  1. TCP是面向连接的传输层协议
  2. 每条TCP连接只能是点对点的(一对一)如果想要利用同样的IP和端口进行另一个TCP连接 后面的连接会被阻止
  3. TCP提供可靠的的交付,保证数据无差错不丢失,不重复且有序
  4. 全双工通信,故两段都设有缓存
  5. TCP是面向字节流

3.3.2 TCP报文段

  1. TCP报文段的首部最短为20B,后面4N字节是根据需要而添加的选项,TCP首部长度20B - 60B。
  2. 在计算校验和时和UDP一样,在TCP报文段前添加12B的伪首部。(只需要将UDP伪首部的第4个字段,即协议栈字段的17改为6,其他的和UDP一样)
  3. SEQ表示发送的报文段中数据部分的第一个字节在A的发送缓冲区中的编号。
  4. ACK表示A期望下一个报文段的数据部分的第一个字节在B的发送缓冲区的编号。

3.3.3 TCP连接管理

  连接(三次握手)

  1. 客户机的TCP首先向服务器的TCP发送一个连接请求报文段。这个特殊的报文段中不含应用层数据,SYN=1;另外客户机会随机选择一个起始序号SEQ=x;(不携带数据但需消耗一个序号)
  2. 服务器的TCP收到连接请求报文后,如果同意连接,发回确认,并为该TCP连接分配缓存和变量;SYN=1,ACK=1,ack=x+1,服务器并随机生成一个起始序号seq=y;(不携带数据但需消耗一个序号)
  3. 客户机收到确认,还要向服务器给出确认,并且需要连接分配缓存和变量。ACK=1,seq=x+1,ack=y+1;(可以携带数据,若不携带数据则不消耗序号)

  释放(四次握手)

  1. FIN=1,seq=u;
  2. ACK=1,seq=v,ack=u+1;
  3. FIN=1,ACK=1,seq=w,ack=u+1;
  4. ACK=1,seq=u+1,ack=w+1;

为何不采用“三次握手”释放连接?且发送最后一次握手报文后要等待2MSL的时间呢?

  • 保证A发送的最后一个确认报文段能够到达B,如果A不等待,最后一个报文丢失,则B无法进入关闭状态,因为A已经关闭无法重传
  • 防止出现“已失效的连接请求报文”;保证经过2MSL,本连接持续时间内所有的报文段都从网络中消失。

5.3.4 TCP可靠传输

  1. 序号:序号建立在传送的字节流上
  2. 确认:TCP默认使用累积确认,即TCP只确认数据流中至第一个丢失字节为止的字节
  3. 重传:a). 超时 :新RTTs = (1-a) * 旧RTTs + a * 新RTT样本 b). 冗余ACK:三次冗余ACK,快速重传!

5.3.5 TCP流量控制

  通信过程中,接收方根据自己接受缓存的大小,动态地调整发送方的发送窗口的大小,称为接收窗口rwnd;发送方根据其对当前网络拥塞程序的估计而确定的窗口值,这称为拥塞窗口cwnd

5.3.6 TCP拥塞控制

拥塞控制和流量控制的区别?

拥塞控制是让网络能够承受现有的网络负荷,是一个全局性的过程;流量控制往往是指点对点的通信量的控制,通过抑制发送端发送数据的速率,以便接收端来得及接收。

维护:

  1. 接收窗口rwnd,接收方根据目前接收缓存大学所许诺的最新窗口值,放在TCP报文中通知发送方。
  2. 拥塞窗口cwnd,发送方根据自己估计的网络拥塞程度二设定的窗口值。
  3. 发送窗口大小 = min(rwnd,cwnd)

慢开始:从一个最大报文段长度MSS开始,每经过一个传输轮次翻倍。直到到达ssthreas,开始执行拥塞避免算法。

拥塞避免:每经过一个往返时延RTT就增加一个MSS的大小,当出现一次超时,临慢开始门限ssthresh=当前cwnd的一半,cwnd重置1,并重新开始执行慢开始算法。

快重传&快恢复:当收到三个重复的冗余ACK报文时,直接重传对方未收到的报文段。执行“乘法减小”算法,把cwnd的值设置成ssthresh改变后的数值,然后开始执行拥塞避免算法(“加法增大”)。

习题

1.主机甲和乙建立了TCP连接,甲始终以MMS=1KB大小的段发送数据,并一直有数据发送;乙每收到一个数据段都会发出一个接收窗口为10KB的确认段。若甲在t时刻发生超时的时候拥塞窗口为8KB,则从t时刻起,不再发生超时的情况下,经过10个RTT后,甲的发送窗口是10KB

   t 时刻发生超时,threashold = 8/2 = 4,经历10个RTT之后:

t12345678910
12456789101112

在第10个RTT之后的拥塞窗口为12,但接收窗口始终为10,而发送窗口取min(拥塞窗口,接收窗口) = 10

2. TCP伪首部与UDP伪首部一样,包括IP分组首部的一部分;IP首部有一个字段指明上层协议是TCP(6),UDP(17)

3.数据偏移:4位,用来表示TCP报文段的 数据 起始处 距离 TCP报文段的 起始处 有多远。

——> 首部长度(max) = 15(4位 1111)*4B = 60B 首部长度(min) = 20B

4.为确保数据传输的可靠性,TCP采用了对报文段确认的机制。

5.TCP的滑动窗口协议中,规定重传分组的数量最多可以等于滑动窗口的大小

6.假设在没有发生拥塞的情况下,在一条往返时延RTT为10ms的线路上采用慢开始控制策略。如果接收窗口的大小为24KB,最大报文段MSS为2KB,那么发送方发出第一个完全窗口需要40ms

慢开始:发送窗口的初始值为拥塞窗口的初始值(即一个最大报文段MSS=2KB)

然后依次增大4KB,8KB,16KB,24KB (32KB) 选择最小的 故4RTT = 40ms

小结

1. TCP使用的是GBN(Go Back N)退回N步,还是SR(Selective Repeat)选择重传?

  • GBN:累积确认,丢掉所有的失序报文,每次重传所有未确认的报文
  • SR:超时重传单个分组,选择确认,接收方重新确认已收到的分组,窗口长度必须小于等于序号空间的一半
  • TCP:两者混合(累积确认)+ 缓存失序序列 +(选择确认)

2. UDP不需要计算RTT(因为没有确认和重传机制),TCP需要 √

  RTTnew = (1-a) RTTold + a * RTTnew  —— a取0.125

  DevRTT = (1-b) DevRTT + b * | sampleRTT - EstimatedRTT | —— b取0.25 估计往返时间和实际往返时间方差

  TimeoutInterval = EstimatedRTT(估计值) + 4*DevRTT(差) —— 设置重传超时间隔

3. 觉得一个非常优雅的地方:TCP重传具有最小序号的还未被确认的报文段,每次TCP重传都会将下一次的超时间隔设为原先值的两倍,而不是用EstimatedRTT和DevRTT推算出的值。

4. 套接字不匹配,TCP将RST标志位置为1,而UDP主机发送一个特殊的ICMP数据报。

P23:考虑GBN协议和SR协议。假设序号空间的长度为k,那么为了避免出现图3-27(是一个新分组还是一次重传)中的问题,对于这两种协议中的每一种,允许的发送方窗口最大为多少?

原答案:

In order to avoid the scenario of Figure 3.27, we want to avoid having the leading edge of the receiver's window (i.e., the one with the “highest” sequence number) wrap around in the sequence number space and overlap with the trailing edge (the one with the "lowest" sequence number in the sender's window).  That is, the sequence number space must be large enough to fit the entire receiver window and the entire sender window without this overlap condition.  So we need to determine how large a range of sequence numbers can be covered at any given time by the receiver and sender windows. 
 
Suppose that the lowest-sequence number that the receiver is waiting for is packet m.  In this case, it's window is [m,m+w-1] and it has received (and ACKed) packet m-1 and the w-1 packets before that, where w is the size of the window. If none of those w ACKs have been yet received by the sender, then ACK messages with values of [m-w,m-1] may still be propagating back.  If no ACKs with these ACK numbers have been received by the sender, then the sender's window would be [m-w,m-1]. 
 
Thus, the lower edge of the sender's window is m-w, and the leading edge of the receiver's window is m+w-1. In order for the leading edge of the receiver's window to not overlap with the trailing edge of the sender's window, the sequence number space must thus be big enough to accommodate 2w sequence numbers.  That is, the sequence number space must be at least twice as large as the window size, k ≥ 2w. 

大致意思是:如果发送方发送一整组数据,接收方接受数据并发出ACK消息,发送方此时没有接受到ACK消息;对于发送方而言,窗口为[m-w,m-1];对于接收方而言,窗口为[m, m+w-1];其中m表示send_base,w表示window大小;

问题:为了区分是第一个分组的重传还是下一组的初次传送

QUESTION:0 1 2 3 0 1 2 3 ;序号k为4;若此时窗口大小为3

0 1 2 3 0 1 2 3 ;[0, 1, 2]表示发送方窗口;[3, 0, 1]表示接收方窗口;若此时接收方接受到0分组,它为第一个分组的0的重传?还是下一个分组的0的初次传送?

QUESTION:0 1 2 3 0 1 2 3;序号k为4;若此时窗口大小为2

0 1 2 3 0 1 2 3 ;[0, 1]表示发送方窗口;[2, 3]表示接收方窗口;此时无论如何都不会出现相同序号的分组的情况。

即分组序号k ≥ 2w(窗口).

第四章

知识点

4.1 网络层的功能

  1. 分组转发:将分组从一个输入接口转移到适当的输出接口(路由器内部)
  2. 路由选择:网络范围内,以决定分组从源到目的所采取的端到端路径
  3. 拥塞控制

习题

1.在路由器互联的多个局域网内,要求每个局域网:物理层、数据链路层、网络层协议可以不同,而网络层以上的高层协议必须相同

路由器是第三层设备,向传输层隐藏了实现过程;网络层之上的协议数据是路由器无法处理的,所以网络层以上的协议必须相同;反例:特定路由器连接IPv4和IPv6

4.2 路由器

4.2.1 路由器的内部组成(分组转发)

  • 输入端口
  • 输出端口

  随机早期检测(Random Early Detection):

  • 交换结构

4.3 网际协议:转发和编址(IP)

4.3.1 IPv4分组

  • 首部长度的单位:4B
  • 片位移的单位:8B
  • 总长度的单位:1B

4.3.2 IP数据分组

  1. MSS(最大报文长度):Maximum Segment Size;属于运输层;
  2. MTU(最大传送单元):Maximum Transmission Unit;属于网络层;

    链路层的MTU严格限制着IP数据报的长度;所以需要分片;片在目的地的网络层被重新组装;目的主机使用IP首部中的标识MF(More Fragment) & DF(Don't Fragment) = 0 表示可分片、标志、和片偏移字段来完成对片的重组。

转发分组:

  1. 直接交付:目的网络直接与该路由器相连(在同一物理网段里)
  2. 间接交付:涉及到其他的路由器+直接交付

4.3.3 IPv4地址

    时间顺序:先出现A、B、C、D(多播)、E(保留)类地址分类;再出现CIDR(Classless Interdomain Routing)无类别域间路由选择;

  • 主机号全0表示本网络:例 x.x.x.0
  • 主机号全1表示本网络的广播地址
  • 127.0.0.0保留为环路自检(Loopback Test)地址,表示任意主机本身,(o゚▽゚)o  该地址永远不会出现在任何网络上;

为了确定子网,分开主机和路由器的每个接口,产生几个隔离的网络岛,使用这些接口端接这些隔离的网络的端点。这些隔离的网络中的每一个都叫做一个子网

两级IP = {<网络号>,<主机号>}

三级IP = {<网络号>,<子网号>,<主机号>}

CIDR:消除传统分类网络划分,IP={<网络前缀(a.b.c.d / x)>,<主机号>}

Here~

4.4 自治系统的路由选择:OSPF、RIP、BGP

4.5 广播和多播

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值