一个秃了头的大师托梦给我说要想称为大神就要有一个完善的个人知识体系,我从梦中惊醒,打开笔记本开始了整理。。。
只有位于网络边缘部分的主机的协议栈才有运输层。它属于面向通信部分的最高层,同时也是用户功能中的最低层。
运输层为相互通信的应用进程提供了逻辑通信。“逻辑通信”的意思是“好像是这样通信,但事实上并非真的这样通信”。因为分层的架构,运输层向高层用户屏蔽了下面网络核心的细节,它使应用进程看见的就是好像在两个运输层实体之间有一条端到端的逻辑通信信道。
这条逻辑通信信道对上层的表现却因运输层使用的不同协议而有很大的差别。
TCP协议和UDP协议也是运输层的两个主要协议。
两个对等运输实体在通信时传送的数据单位叫作运输协议数据单元 TPDU (Transport Protocol Data Unit)。
因为主机上可能有多个进程同时进行通信,进程是动态创建和撤销的,需要一个能够确认找到进程的方法,如果使用进程标识符,但是不同的操作系统对于进程标识符的类型又不相同,所以引入端口概念。
端口用一个 16 位端口号进行标志,允许有65,535个不同的端口号。端口号只具有本地意义,即端口号只是为了标志本计算机应用层中的各进程。
由此可见,两个计算机中的进程要互相通信,不仅必须知道对方的端口号(为了找到对方计算机中的应用进程) ,而且还要知道对方的 IP 地址(为了找到对方的计算机)。
全称User Datagram Protocol,用户数据包协议
接收方 UDP 对 IP 层交上来的 UDP 用户数据报,在去除首部后就原封不动地交付上层的应用进程,一次交付一个完整的报文。所以应用程序需要选择一个合适的报文大小,否则都会对ip层的传输效率有影响。
TCP 连接的端点不是主机,不是主机的IP 地址,不是应用进程,也不是运输层的协议端口。TCP 连接的端点叫做套接字 (socket) 或插口。端口号拼接到 (contatenated with) IP 地址即构成了套接字。
一个 TCP 报文段分为首部和数据两部分,而 TCP 的全部功能都体现在它首部中各字段的作用。 TCP 报文段首部的前 20 个字节是固定的,后面有 4n 字节是根据需要而增加的选项 (n 是整数)。因此 TCP 首部的最小长度是 20 字节。
“停止等待”就是每发送完一个分组就停止发送,等待对方的确认。在收到确认后再发送下一个分组
在接收方 B 会出现两种情况:
在这两种情况下,B 都不会发送任何信息。但A都必须重发分组,直到B正确接收为止,这样才能实现可靠通信
问题:A如何知道 B 是否正确收到了 M1 呢?
解决方法:超时重传,简单来说就是一段时间没收到确认就再发一次
A 为每一个已发送的分组都设置了一个超时计时器。 A 只要在超时计时器到期之前收到了相应的确认,就撤销该超时计时器,继续发送下一个分组 M2 。 若A在超时计时器规定时间内没有收到B的确认,就认为分组错误或丢失,就重发该分组。
问题:确认消息丢失等情况导致的B收到了多次M1请求,B是如何区分自己收到了多次重复的请求?
解决方法:编号
A为每一个发送的分组都进行编号。若B收到了编号相同的分组,则认为收到了重复分组,丢弃重复的分组,并回送确认。B为发送的确认也进行编号,指示该确认是对哪一个分组的确认。A根据确认及其编号,可以确定它是对哪一个分组的确认,避免重发发送。若为重复的确认,则将其丢弃。
使用上述的确认和重传机制,我们就可以在不可靠的传输网络上实现可靠的通信。
像上述的这种可靠传输协议常称为自动重传请求 ARQ (Automatic Repeat Request)。意思是重传的请求是自动进行的,接收方不需要请求发送方重传某个出错的分组。
虽然停止等待协议可以实现可靠的传输,但是它有一个非常显著的缺点。就是信道利用率非常低。
所谓信道利用率就是,分组发送的时间在一次传输中总时间中的占比(总时间包含发送时间,确认发送时间,以及确认接受时间)
为了提高效率,提出流水线传输
流水线传输就是发送方可连续发送多个分组,不必每发完一个分组就停顿下来等待对方的确认。这样可使信道上一直有数据不间断地传送。
此方法也被称为连续ARQ协议,其基本思想为:
接收方一般采用累积确认的方式。即不必对收到的分组逐个发送确认,而是对按序到达的最后一个分组发送确认,这样就表示:到这个分组为止的所有分组都已正确收到了。
TCP 使用流水线传输和滑动窗口协议实现高效、可靠的传输
所谓回退N,举例就是,发送方发送12345,接收方正确的收到了12,但是3迟迟没有收到,即使此时收到了45,也需要丢弃45,不确认,让发送方重发345。这样就是回退了n
校验方法基本与UDP过程类似,不过多赘述,了解即可
MSS (Maximum Segment Size)是 TCP 报文段中的数据字段的最大长度。数据字段加上 TCP 首部才等于整个的 TCP 报文段。所以,MSS是“TCP 报文段长度减去 TCP 首部长度”。选择较小的 MSS 长度,网络的利用率就降低。若 TCP 报文段非常长,那么在 IP 层传输时就有可能要分解成多个短数据报片。在终点要把收到的各个短数据报片装配成原来的 TCP 报文段。当传输出错时还要进行重传。这些也都会使开销增大。
因此,MSS 应尽可能大些,只要在 IP 层传输时不需要再分片就行。
所谓流量控制就是让发送方不要发的过快,让接收方来得及接收。
首先:TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口。
因为是全双工通信,意味着双方都有可能发送与接收数据,所以都需要维护两个窗口
原理其实很easy,以上图举例
发送端维护着一个大小为5的发送窗口,接收方维护着大小为3的窗口
发送方发送3和4,此时发送窗口缩小,一直到收到确认。
接收方收到对应分组后会向前滑动,并返回确认
收到确认后发送窗口向前滑动,并扩大
往细了分其实还分发送方糊涂窗口综合征还有接收方糊涂窗口综合征
每次仅发送一个字节或很少几个字节的数据时,有效数据传输效率变得很低的现象。
其实就是接收方消耗数据比较慢,一次性只接一个或者几个字节,导致发送方发了又满,如此往复
解决方法:让接收方等待一段时间,使得或者接收缓存已有足够空间容纳一个最长的报文段,或者等到接收缓存已有一半空闲的空间。只要出现这两种情况之一,接收方就发出确认报文,并向发送方通知当前的窗口大小。
在某段时间,若对网络中某资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种现象称为拥塞 (congestion)。
TCP 采用基于窗口的方法进行拥塞控制。TCP发送方维持一个拥塞窗口 cwnd (Congestion Window)。真正的发送窗口值 = Min (接收方窗口值,拥塞窗口值)
所以下面的算法是用来控制拥塞窗口大小变化的
无论在慢开始阶段还是在拥塞避免阶段,只要发送方判断网络出现拥塞(重传定时器超时)
目的:迅速减少主机发送到网络中的分组数,使得发生拥塞的路由器有足够时间把队列中积压的分组处理完毕。
发送方只要一连收到三个重复确认,就知道接收方确实没有收到报文段,因而应当立即进行重传(即“快重传”),这样就不会出现超时,发送方也不就会误认为出现了网络拥塞。快重传并非取消重传计时器,而是在某些情况下可以更早地(更快地)重传丢失的报文段。
当发送端收到连续三个重复的确认时,由于发送方现在认为网络很可能没有发生拥塞,因此现在不执行慢开始算法,而是执行快恢复算法 FR (Fast Recovery) 算法:
参考学习:www.bilibili.com/video/BV1L4…
TCP 协议为了实现可靠传输, 通信双方需要判断自己已经发送的数据包是否都被接收方收到, 如果没收到, 就需要重发。 不握手不能知道对方是否收到。
两次过程:
1、可能会出现资源浪费的情况,比如A先发起一个tcp连接请求但是因为意外导致没有传输到B,A又发了一个连接请求,第二个请求顺利的到达了B,然后两次握手建立连接,传输数据,然后关闭,关闭完了之后第一次请求到达了B,B误以为A又发起了一个新的连接请求,并发送了确认,同时自己进入了连接建立状态,但是实际上A并没有发送,导致资源浪费
2、B的初始序号得不到确认,举例当只有两次确认的情况下,A发起连接同时携带自己的初始序号,此时B发送确认同时携带对于A需要的确认,但是B的初始需要就没办法确认了!
四次过程:没必要,完全可以简化成3次,B的确认和请求同步可以放在一次请求里面进行
最长报文段寿命,是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃
1、A最后一次确认如果丢失了,会导致B重传,但是A已经关闭,这样会导致B反复重传且一直处于最后确认状态
这2个MSL中的第一个MSL是为了等自己发出去的最后一个ACK从网络中消失,而第二MSL是为了等在对端收到ACK之前的一刹那可能重传的FIN报文从网络中消失。
如果TIME_WAIT状态保持时间不足够长,第一个连接就正常终止了。第二个拥有相同五元组的连接出现,而第一个连接的重复报文到达,干扰了第二个连接。TCP事先必须防止某个连接的重复报文在连接终止后出现,所以让TIME_WAIT状态保持时间足够长(2MSL),连接相应方向的上的TCP报文要么完全响应完毕,要么被丢弃。建立第二个连接的时候,不会混淆。
保活计时器 通常设置为2小时 。若服务器过了2小时还没有收到客户的信息,它就发送探测报文段。若发送了10个探测报文段(每一个相隔75秒)还没有响应,就假定客户出了故障,因而就终止该连接。 用来防止在TCP连接出现长时期的空闲。
计算机网络(第7版)谢希仁 编著(文中很多图片来自此书的配套ppt,真的受益匪浅,🙏)
B站湖科大教书匠老师的关于计算机网络运输层的几个视频,在看其中几个知识点时纯文字的描述有些晦涩,我比较愚钝理解较慢,看了视频豁然开朗🙏
知乎上大神们的回答!!
整理不易,越整理越知道自己的不足,继续坚持✊ 冲啊!!! 冲TMD,希望能看到这篇的大家伙们也都有所收获,加油奥利给