文章目录
一、TCP/IP五层模型(重要)
二、应用层常见的协议
三、TCP与UDP
四、TCP传输可靠性保障
五、ARP协议
本文对于计算机面试、笔试过程中经常被问到的计算机网络类问题,做一个梳理总结,方便自己查看学习,同时也希望为其他找工作、学习的伙伴提供一个参考。
TCP/IP五层模型:应用层、传输层、网络层、数据链路层、物理层
HTTP(超文本传输协议):主要是为Web浏览器与Web服务器之间的通信而设计
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议):电子邮箱的发送过程(我邮箱"”,向目标邮箱""发生邮件)
判断邮箱真正存在?
POP3/IMAP(两者都是负责邮件接收的协议)
FTP(文件传输协议):主要提供文件传输服务,基于TCP实现可靠的传输,传输过程可屏蔽操作系统和文件存储方式
基于客户-服务器模型而设计,在客户端、服务器之间建立两个连接
Telnet(远程登陆协议)
SSH(安全的网络传输协议)
什么是TCP? TCP是传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议。
3.3.1 TCP的三次握手
假设发送端为客户端,接收端为服务端。开始客户端、服务端的状态都是CLOSED
A<–>B
3.3.2 TCP的四次挥手
常见问题:
1)四次挥手为什么要等待2MSL?
保证A发送的最后一个ACK报文段能够达到B。这个ACK报文段可能丢失,B收不到这个确认报文,就会超时重传连接释放报文段,A可以在这个2MSL时间内收到这个重传的连接释放报文段,接着A重传一次确认,并重新启动2MSL计时器,最后A和B都进入CLOSED状态。若A在TIME-WAIT状态不等待一段时间,而是发送完ACK报文段立即进入CLOSED,则无法收到B重传的连接释放报文段,那么A不会再发一次确认报文段,B就无法正常进入CLOSED状态
2)为什么是四次挥手?
TCP是全双工通信,可以双向传输数据。任何一方都可以在数据传送结束后 发出连接释放的通知,待对方确认后进入半关闭状态。当另一方也没有数据再发送的时候,则发出连接释放通知,对方确认后就完全关闭了TCP连接。
举个例子,A和B打电话
3.3.3 随机生成序列号的原因
1.基于数据块传输:应用数据被分割成TCP认为最适合发送的数据块,再传输给网络层,数据块被称为报文段或段。
2.对失序数据包重新排序以及去重:TCP为了保证不发生丢包,就给每个包一个序列号,有了序列号能够将接收到的数据根据序列号排序,并且去掉亚复序列号的数据就可以实现数据包去重。
3.校验和:TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错,TCP 将丢弃这个报文段和不确认收到此报文段。
4.重传机制:在数据包丢失或延迟的情况下,重新发送数据包,直到收到对方的确认应答(ACK)。TCP重传机制主要有:基于计时器的重传(也就是超时重传)、快速重传(基于接收端的反馈信息来引发重传)、SACK(在快速重传的基础上,返回最近收到的报文段的序列号范围,这样客户端就知道,哪些数据包已经到达服务器了)、D-SACK(重复SACK,在SACK的基础上,额外携带信息,告知发送方有哪些数据包自己重复接收了)。关于重传机制的详细介绍,可以查看详解TCP超时与重传机制这篇文章。
5.流量控制:TCP连接的每一方都有固定大小的缓冲空间,TCP的接收端只允许发送端发送接收端缓冲区能接纳的数据。当接收方来不及处理发送方的数据,能提示发送方降低发送的速率,防止包丢失。TCP使用的流量控制协议是可变大小的滑动窗口协议(TCP利用滑动窗口实现流量控制)。
6.拥塞控制:当网络拥塞时,减少数据的发送。TCP在发送数据的时候,需要考虑两个因素:一是接收方的接收能力,二是网络的拥塞程度。接收方的接收能力由滑动窗口表示,表示接收方还有多少缓冲区可以用来接收数据。网络的拥塞程度由拥塞窗口表示,它是发送方根据网络状况自己维护的一个值,表示发送方认为可以在网络中传输的数据量。发送方发送数据的大小是滑动窗口和拥塞窗口的最小值,这样可以保证发送方既不会超过接收方的接收能力,也不会造成网络的过度拥塞。
TCP利用滑动窗口实现流量控制。流量控制是为了控制发送方发送速率,保证接收方来得及接收。接收方发送的确认报文中的窗口字段可以用来控制发送方窗口大小,从而影响发送方的发送速率。将窗口字段设置为0,则发送方不能发送数据。
为什么需要流量控制? 这是因为双方在通信的时候,发送方的速率与接收方的速率是不一定相等,如果发送方的发送速率太快,会导致接收方处理不过来。如果接收方处理不过来的话,就只能把处理不过来的数据存在 接收缓冲区(Receiving Buffers) 里(失序的数据包也会被存放在缓存区里)。如果缓存区满了发送方还在狂发数据的话,接收方只能把收到的数据包丢掉。出现丢包问题的同时又疯狂浪费着珍贵的网络资源。因此,我们需要控制发送方的发送速率,让接收方与发送方处于一种动态平衡才好。
这里需要注意的是(常见误区):
TCP为全双工(Full-Duplex,FDX)通信,双方可以进行双向通信,客户端和服务端既可能是发送端又可能是服务端。因此,两端各有一个发送缓冲区与接收缓冲区,两端都各自维护一个发送窗口和一个接收窗口。接收窗口大小取决于应用、系统、硬件的限制(TCP传输速率不能大于应用的数据处理速率)。通信双方的发送窗口和接收窗口的要求相同
发送窗口
TCP发送窗口可以划分成四个部分:
TCP发送窗口结构图示:
接收窗口
TCP接收窗口可以划分成三个部分:
TCP接收窗口结构图示:
接收窗口的大小是根据接收端处理数据的速度动态调整的。如果接收端读取数据快,接收窗口可能会扩大。否则,它可能会缩小。
另外,这里的滑动窗口大小只是为了演示使用,实际窗口大小通常会远远大于这个值。
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络的性能就要变坏。这种情况就叫拥塞。
为了进行拥塞控制,TCP 发送方要维持一个拥塞窗口(cwnd)的状态变量。拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。发送方让自己的发送窗口取为拥塞窗口和接收方的接受窗口中较小的一个。
TCP的拥塞控制采用了四种算法,即 慢开始、拥塞避免、快重传和快恢复。在网络层也可以使路由器采用适当的分组丢弃策略(如主动队列管理AQM),以减少网络拥塞的发生。
自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层和传输层的错误纠正协议之一。它通过使用确认和超时两个机制,在不可靠服务的基础上实现可靠的信息传输。若发送方在发送一段时间内没有收到确认信息(ACK),它通常会重新发送,直到收到确认或重试超过一定的次数
ARQ包括停止等待ARQ、连续ARQ协议
停止等待ARQ协议
停止ARQ协议:实现可靠传输。它的基本原理是每发完一个分组就停止发送,等待对方确认(回复ACK),若过了一段时间还是没收到ACK确认,就说明没有发送成功,需要重新发送,直到收到确认后再发下一个分组;若接收方收到重复分组,就丢弃该分组,但同时还有发送确认
连续ARQ协议
连续ARQ协议:提供信道利用率。发送方维持一个发送窗口,凡位于发送窗口内的分组可以连续发送出去,而不需要等待对方确认。接收方一般采用累计确认,对按序到达的最后一个分组发送确认,表明到这个分组为止的所有分组都已经正确收到
每当我们学习一个新的网络协议的时候,都要把他结合到OSI七层模型中,或者是TCP/IP协议栈中来学习,一是要学习该协议在整个网络协议栈中的位置,二是要学习该协议解决了什么问题,地位如何?三是要学习该协议的工作原理,以及一些更深入的细节。
ARP协议,可以说是在协议栈中属于一个偏底层的、非常重要的、又非常简单的通信协议。
开始阅读这篇文章之前,你可以先看看下面几个问题:
MAC全称 媒体访问控制地址(Media Access Control Address):如果说互联网中每一个资源都由IP地址唯一标识(IP协议内容),那么一切网络设备都由MAC地址唯一标识
可以理解为,MAC地址是一个网络设备真正的身份证号,IP地址只是一种不重复的定位方式(比如说
住在某省某市某街道的张三,这种逻辑定位是IP地址,他的身份证号才是他的MAC地址),也可以
理解为 MAC 地址是身份证号,IP地址是邮政地址。MAC 地址也有一些别称,如LAN地址、物理地
址、以太网地址等。MAC地址具有可携带性、永久性
ARP协议工作时有一个大前提,那就是ARP表。
在一个局域网内,每个网络设备都自己维护了一个ARP表,ARP表记录了某些其他网络设备的IP地址-MAC地址映射关系,该映射关系以<IP,MAC,TTL>三元组的形式存储。其中,TTL为该映射关系的生存周期,典型值为 20分钟,超过该时间,该条目将被丢弃。
ARP的工作原理将分两种场景讨论:
同一局域网内的MAC寻址
假设当前有如下场景:IP地址为137.196.7.23 的主机A,想要给同一局域网内的IP 地址为137.196.7.14主机B,发送IP数据报文。
再次强调,当主机发送IP数据报文时(网络层),仅知道目的地的IP地址,并不清楚目的地的MAC地址,而ARP协议就是解决这一问题的。
为了达成这一目标,主机A将不得不通过ARP协议来获取主机B的MAC地址,并将IP报文封装成链路层帧,发送到下一跳上。在该局域网内,关于此将按照时间顺序,依次发生如下事件:
在整个过程中,有几点需要补充说明的是:
总结来说,ARP协议是一个广播问询,单播响应协议。
不同局域网内的MAC地址
更复杂的情况是,发送主机A和接收主机B不在同一个子网中,假设一个一般场景,两台主机所在的子网由一台路由器联通。这里需要注意的是,一般情况下,我们说网络设备都有一个IP地址和一个MAC 地址,这里说的网络设备,更严谨的说法应该是一个接口。路由器作为互联设备,具有多个接口,每个接口同样也应该具备不重复的 IP 地址和 MAC地址。因此,在讨论 ARP 表时,路由器的多个接口都各自维护一个 ARP 表,而非一个路由器只维护一个ARP 表。
接下来,回顾同一子网内的MAC寻址,如果主机A发送一个广播问询分组,那么A所在的子网内所有设备(接口)都将会捕获该分组,因为该分组的目的IP与发送主机A的IP在同一个子网中。但是当目的IP与A不在同一子网时,A所在子网内将不会有设备成功接收该分组。那么,主机A应该发送怎样的查询分组呢?整个过程按照时间顺序发生的事件如下:
参考

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/201181.html