《计算机网络——自顶向下方法》知识点总结 第三章

文章目录

知识点总结

  • 路由器仅作用于该数据报的网络层字段,它们不检查封装在该数据报的运输层报文段的字段。
  • 为什么运输层在应用程序进程之间提供逻辑的而非物理的通信?因为运输层仅仅是将应用报文加上运输层头部封装传递给网络层,没有经过物理链路。
  • 运输协议能够提供的服务常常受制于底层网络层协议的服务模型。如果网络层协议无法为主机之间发送的运输层报文段提供时延或带宽保证的话,运输层协议也就无法为进程之间发送的应用程序报文提供时延或带宽保证。
  • UDP和TCP最基本的责任是,将两个端系统间IP的交付服务扩展为运行在端系统上的两个进程之间的交付服务。将主机间交付扩展到进程间交付被称为运输层的多路复用(transport-layer multiplexing)与多路分解(demultiplexing)
  • TCP拥塞控制防止任何一条TCP连接用过多流量来淹没通信主机之间的链路和交换设备。TCP力求为每个通过一条拥塞网络链路的连接平等地共享网络链路带宽。这可以通过调节TCP连接的发送端发送进网络的流量速率来做到。在另一方面,UDP流量是不可调节的。使用UDP传输的应用程序可以根据其需要以其愿意的任何速率发送数据。
  • 在接收主机中的运输层实际上并没有直接将数据交付给进程,而是将数据交给了一个中间的套接字。由于在任一时刻,在接收主机上可能有不止一个套接字,所以每个套接字都有唯一的标识符。标识符的格式取决于它是UDP还是TCP套接字,我们将很快对它们进行讨论。
  • 每个运输层报文段中具有几个字段。在接收端,运输层检查这些字段,标识出接收套接字,进而将报文段定向到该套接字。将运输层报文段中的数据交付到正确的套接字的工作称为多路分解。
  • 在源主机从不同套接字中收集数据块,并为每个数据块封装上首部信息(这将在以后用于分解)从而生成报文段,然后将报文段传递到网络层,所有这些工作称为多路复用。
  • 在这里插入图片描述
  • 端口号是一个16比特的数,其大小在0~65535之间。0~1023范围的端口号称为周知端口号(well-known port number),是受限制的,这是指它们保留给诸如HTTP(它使用端口号80)和FTP(它使用端口号21)之类的周知应用层协议来使用。周知端口的列表在RFC1700中给出,同时在http://www.iana.org上有更新文档[RFC3232]。当我们开发一个新的应用程序时(如在2.7节中开发的一个应用程序),必须为其分配一个端口号。
  • 通过clientSocket=socket(socket.AF_INET,socket.SOCK_DGRAM)创建的udp套接字会被运输层自动分配一个端口号。也可以通过bind()方法为这个udp套接字关联一个特定的端口号。
  • TCP套接字通过一个四元组来标识;UDP套接字通过一个二元组来标识。
  • 也就是说,对于udp来说,服务器使用recvform()方法得到客户端源端口号并且返回,而对于tcp来说,使用connectionSocket,addr = serverSocket.accept()来创建一个新的套接字(这个套接字是通过四元组:源IP地址,源端口,目的IP地址,目的端口来标志的,相同的套接字必须参数完全相同)。
  • 端到端原则[Saltzer1984],该原则表述为因为某种功能(在此时为差错检测)必须基于端到端实现:“与在较高级别提供这些功能的代价相比,在较低级别上设置的功能可能是冗余的或几乎没有价值的。”
  • TCP将这些数据引导到该连接的发送缓存(send buffer)里,发送缓存是在三次握手初期设置的缓存之一。接下来TCP就会不时从发送缓存里取出一块数据。有趣的是,在TCP规范[RFC793]中却没提及TCP应何时实际发送缓存里的数据,只是描述为“TCP应该在它方便的时候以报文段的形式发送数据”。TCP可从缓存中取出并放入报文段中的数据数量受限于最大报文段长度(Maximum Segment Size,MSS)。MSS通常根据最初确定的由本地发送主机发送的最大链路层帧长度(即所谓的最大传输单元(Maximum Transmission Unit,MTU))来设置。设置该MSS要保证一个TCP报文段(当封装在一个IP数据报中)加上TCP/IP首部长度(通常40字节)将适合单个链路层帧。
  • 最大链路层帧长度(即最大传输单元MTU 1500字节)=TCP/IP报文首部长度(40字节)+最大报文长度(MSS)
  • 在这里插入图片描述
  • 32比特的序号字段(sequence number field)和32比特的确认号字段(acknowl-
    edgment number field)。这些字段被TCP发送方和接收方用来实现可靠数据传输服务,讨论见后。
  • 16比特的接收窗口字段(receive window field),该字段用于流量控制。我们很快就会看到,该字段用于指示接收方愿意接受的字节数量。
  • 4比特的首部长度字段(header length field),该字段指示了以32比特的字为单位的TCP首部长度。由于TCP选项字段的原因,TCP首部的长度是可变的。(通常,选项字段为空,所以TCP首部的典型长度就是20字节。)
  • 可选与变长的选项字段(options field),该字段用于发送方与接收方协商最大报文段长度(MSS)时,或在高速网络环境下用作窗口调节因子时使用。首部字段中还定义了一个时间戳选项。可参见RFC854和RFC1323了解其他细节。
  • 6比特的标志字段(flag field)。ACK比特用于指示确认字段中的值是有效的,即该报文段包括一个对已被成功接收报文段的确认。RST、SYN和FIN比特用于连接建立和拆除,我们将在本节后面讨论该问题。当PSH比特被设置的时候,就指示接收方应立即将数据交给上层。最后,URG比特用来指示报文段里存在着被发送端的上层实体置为“紧急”的数据。紧急数据的最后一个字节由16比特的紧急数据指针字段指出。当紧急数据存在并给出指向紧急数据尾的指针的时候,TCP必须通知接收端的上层实体。
  • 报文段的划分:
    在这里插入图片描述
  • 主机A填充进报文段的确认号是主机A期望从主机B收到的下一字节的序号。
  • 因为TCP只确认该流中至第一个丢失字节为止的字节,所以TCP被称为提供累积确认。
  • 当主机在一条TCP连接中收到失序报文段时该怎么办?有趣的是,TCPRFC并没有为此明确规定任何规则,而是把这一问题留给实现TCP的编程人员去处理。他们有两个基本的选择:①接收方立即丢弃失序报文段(如前所述,这可以简化接收方的设计);②接收方保留失序的字节,并等待缺少的字节以填补该间隔。显然,后一种选择对网络带宽而言更为有效,是实践中采用的方法。
  • 往返时间估计在这里插入图片描述
  • EstimatedRTT是一个SampleRTT值的加权平均值。
  • 这个加权平均对最近的样本赋予的权值要大于对老样本赋予的权值。这是很自然的,因为越近的样本越能更好地反映网络的当前拥塞情况。从统计学观点讲,这种平均被称为指数加权移动平均(Exponential Weighted Moving Average,EWMA)。
  • 重传超时间隔(TimeoutInterval初始值为1s)在这里插入图片描述
  • 一个来自接收方的确认报文段(ACK)的到达:当该事件发生时,TCP将ACK的值y与它的变量SendBase进行比较。TCP状态变量SendBase是最早未被确认的字节的序号。(因此SendBase-1是指接收方已正确按序接收到的数据的最后一个字节的序号。)TCP采用累积确认,所以y确认了字节编号在y之前的所有字节都已经收到。如果y>SendBase,则该ACK是在确认一个或多个先前未被确认的报文段。因此发送方更新它的SendBase变量;如果当前有未被确认的报文段,TCP还要重新启动定时器
  • 3
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值