本文接上期内容。
TCP 协议如何保证可靠传输
1、应用数据被分割成 TCP 认为最适合发送的数据块。
2、TCP 给发送的每一个包进行编号,接收方对数据包进行排序,把有序数据传送给应用层。
3、校验和: TCP 将保持它首部和数据的检验和,这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
4、TCP 的接收端会丢弃重复的数据。
5、流量控制: TCP 连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP 使用的流量控制协议是可变大小的滑动窗口协议(TCP 利用滑动窗口实现流量控制)。
6、拥塞控制: 当网络拥塞时,减少数据的发送。
7、停止等待协议:为了实现可靠传输,它的基本原理是每发完一个分组就停止发送,等待对方确认,在收到确认后再发下一个分组。
8、超时重传: 当 TCP 发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段;如果不能及时收到一个确认,将重发这个报文段。
停止等待协议
停止等待协议是为了实现可靠传输,它的基本原理是每发完一个分组就停止发送,等待对方确认,在收到确认后再发下一个分组;在停止等待协议中,若接收方收到重复分组,就丢弃该分组,但同时还要发送确认。
1、无差错情况:
发送方发送分组,接收方在规定时间内收到,并且回复确认,发送方再次发送。
2、出现差错情况(超时重传):
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此,每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些,这种自动重传方式常称为自动重传请求ARQ 。另外,在停止等待协议中若收到重复分组,就丢弃该分组,但还要发送确认,连续ARQ 协议可提高信道利用率。发送维持一个发送窗口,凡位于发送窗口内的分组可连续发送出去,而不需要等待对方确认;接收方一般采用累积确认,对按序到达的最后一个分组发送确认,表明到这个分组位置的所有分组都已经正确收到了。
3、确认丢失和确认迟到
确认丢失:确认消息在传输过程丢失
当A发送M1消息,B收到后,B向A发送了一个M1确认消息,但却在传输过程中丢失。而A并不知道,在超时计时过后,A重传M1消息,B再次收到该消息后采取以下两点措施:
1、丢弃这个重复的M1消息,不向上层交付。
2、向A发送确认消息。(不会认为已经发送过了,就不再发送。A能重传,就证明B的确认消息丢失)。
确认迟到 :确认消息在传输过程中迟到
A发送M1消息,B收到并发送确认。在超时时间内没有收到确认消息,A重传M1消息,B仍然收到并继续发送确认消息(B收到了2份M1)。此时,A收到了B第二次发送的确认消息,接着发送其他数据。过了一会,A收到了B第一次发送的对M1的确认消息(A也收到了2份确认消息)。处理如下:
(1)A收到重复的确认后,直接丢弃。
(2)B收到重复的M1后,也直接丢弃重复的M1。
自动重传请求 ARQ 协议
停止等待协议中超时重传是指只要超过一段时间仍然没有收到确认,就重传前面发送过的分组(认为刚才发送过的分组丢失了)。因此每发送完一个分组需要设置一个超时计时器,其重转时间应比数据在分组传输的平均往返时间更长一些。这种自动重传方式常称为自动重传请求ARQ。
优点: 简单
缺点: 信道利用率低
连续ARQ协议
连续 ARQ 协议可提高信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到了。
优点: 信道利用率高,容易实现,即使确认丢失,也不必重传。
缺点: 不能向发送方反映出接收方已经正确收到的所有分组的信息。 比如:发送方发送了 5条 消息,中间第三条丢失(3号),这时接收方只能对前两个发送确认;发送方无法知道后三个分组的下落,而只好把后三个全部重传一次。这也叫 Go-Back-N(回退 N),表示需要退回来重传已经发送过的 N 个消息。
滑动窗口(Sliding window)
1、TCP 利用滑动窗口实现流量控制的机制。
2、滑动窗口是一种流量控制技术。早期的网络通信中,通信双方不会考虑网络的拥挤情况直接发送数据。由于大家不知道网络拥塞状况,同时发送数据,导致中间节点阻塞掉包,谁也发不了数据,所以就有了滑动窗口机制来解决此问题。
3、TCP 中采用滑动窗口来进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区可以用于接收数据。发送方可以通过滑动窗口的大小来确定应该发送多少字节的数据,当滑动窗口为0时,发送方一般不能再发送数据报。但有两种情况除外,一种情况是可以发送紧急数据,例如,允许用户终止在远端机上的运行进程;另一种情况是发送方可以发送一个1字节的数据报来通知接收方重新声明它希望接收的下一字节及发送方的滑动窗口大小。
流量控制
1、TCP 利用滑动窗口实现流量控制。
2、流量控制是为了控制发送方发送速率,保证接收方来得及接收。
3、接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为 0,则发送方不能发送数据。
拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏,这种情况就叫拥塞。拥塞控制是为了防止过多的数据注入到网络中,这样可以使网络中的路由器或链路不致过载。拥塞控制所要做的有一个前提,就是网络能够承受现有的网络负荷。拥塞控制是一个全局性的过程,涉及到所有的主机、所有的路由器、以及与降低网络传输性能有关的所有因素。相反,流量控制往往是点对点通信量的控制,是端到端的问题,流量控制所要做到的是抑制发送端发送数据的速率,以便使接收端来得及接收。
为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口的状态变量,拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化,发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,即 慢开始 、 拥塞避免 、快重传 和 快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理 AQM),以减少网络拥塞的发生。
1、慢开始: 慢开始算法的思路是当主机开始发送数据时,如果立即把大量数据字节注入到网络,那么可能会引起网络阻塞,因为现在还不知道网络的符合情况。经验表明,较好的方法是先探测一下,即由小到大逐渐增大发送窗口,也就是由小到大逐渐增大拥塞窗口数值。cwnd初始值为1,每经过一个传播轮次,cwnd加倍。
2、拥塞避免: 拥塞避免算法的思路是让拥塞窗口cwnd缓慢增大,即每经过一个往返时间RTT就把发送放的cwnd加1。
3、快重传与快恢复: 在 TCP/IP 中,快速重传和恢复(fast retransmit and recovery,FRR)是一种拥塞控制算法,它能快速恢复丢失的数据包。没有 FRR,如果数据包丢失了,TCP 将会使用定时器来要求传输暂停,在暂停的这段时间内,没有新的或复制的数据包被发送。有了 FRR,如果接收机接收到一个不按顺序的数据段,它会立即给发送机发送一个重复确认;如果发送机接收到三个重复确认,它会假定确认件指出的数据段丢失了,并立即重传这些丢失的数据段。有了 FRR,就不会因为重传时要求的暂停被耽误。当有单独的数据包丢失时,快速重传和恢复(FRR)能最有效地工作;当有多个数据信息包在某一段很短的时间内丢失时,它则不能很有效地工作。
在浏览器中输入url地址 ->> 显示主页的过程(面试常客)
百度好像最喜欢问这个问题。
打开一个网页,整个过程会使用哪些协议
状态码
各种协议与HTTP协议之间的关系
一般面试官会通过这样的问题来考察你对计算机网络知识体系的理解。
HTTP长连接、短连接
在HTTP/1.0中默认使用短连接,也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
而从HTTP/1.1起,默认使用长连接,用以保持连接特性,使用长连接的HTTP协议,会在响应头加入这行代码:
(1)Connection:keep-alive
(2)复制代码
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接。
想要看完整的计算机网络面试可进链接—十年架构师教你:如何搞定计算机网络面试(一)
https://www.jianshu.com/p/b32518236281
如果对java微服务、分布式、高并发、高可用、大型互联网架构技术、面试经验交流等等感兴趣的同学,可以关注我,我会不定期免费发放资料链接,如果你有好的学习资料可以私聊发我,我会注明出处之后分享给大家。欢迎分享,欢迎评论,欢迎转发,需要资料的同学Java后端技术群:819940388,或关注微信公众号:Java资讯库,回复“架构”,免费的大型互联网Java技术视频分享给大家。
网友评论