TCP/IP学习总结
目录
问题一:TCP/IP为什么采用分层的结构
问题二:为什么说传输层提供端到端的服务,网络层是点到点的服务
问题三:怎么确定IP分片中的第一片和分片需要注意的地方
问题四:ARP协议的理解
问题五:路由表中关键的有哪几项
问题六:TCP从哪几个方面来提供可靠性
问题七:TCP连接为什么采用的是三次握手而不是四次,断开连接为什么是四次而不是三次
问题八:TCP断开连接为什么要等待2MLS时间
问题九:重传定时器,坚持定时器,保活定时器的作用
问题一:TCP/IP为什么采用分层的结构
TCP/IP协议簇在《TCP/IP 详解 卷一:协议》上分为四层,分别为:链路层,网络层,传输层,应用层。经过查找资料,目前共识最多的是五层模型,分别是物理层,数据链路层,网络层,传输层,应用层。从OSI七层模型演变而来,五层模型中应用层囊括了OSI的表示层和会话层。对于初学者很容易想当然的认为应用层是第一层,正确的是第一层是物理层,应用层是第七层。采用分层结构是将复杂的问题分成一个个相对简单的小问题,每层实现相应的功能,模块化的设计在后面的应用中更容易扩展,实现起来也相对容易。
问题二:为什么说传输层提供端到端的服务,网络层是点到点的服务
传输层上的协议主要有TCP和UDP,拿TCP举例,TCP接受应用层的数据,将数据封装成一个个的TCP报文段,经过三次握手后将数据发送到接收端,TCP协议采用很多机制,比如确认,重传等保障数据能可靠地到达接收端,具体在网络中怎么传输怎么选路传输层不管这些,所以TCP提供的是一个端到端的服务。 网络层的的协议主要是IP协议,主要功能是通过路由选择算法为分组通过通信子网提供适当的路径,实现网络互连。网络中的每一个路由器都不知道完整的路径,IP选路关心的是下一跳的路由选择,将IP数据报送到下一跳的路由中,如此下去,直到到达接收端,所以说网络层提供时点到点的服务。
问题三:怎么确定IP分片中的第一片和分片需要注意的地方
通过IP首部中的片偏移字段和标志字段中的more fragments(直面翻译是更多片,当有分片发生时,最后一片该为置0,前面的为1)来确定,第一片的片偏移为0,more fragments为1,由此可以唯一确定IP分片中的第一片分组。
IP的分片每片的标识字段是一样的,到达接收端后通过标识字段和偏移量来进行重组。打个比方,要发送一本书过去,标识字段就好比每页的页码,一页内容分三组发送,每组的标识字段都是一样的。其次任何运输层的首部只出现在第一片的数据中,这个要特别注意。
问题四:ARP协议的理解
ARP协议是地址解析协议,功能是将IP地址到对应的MAC地址之间提供动态的映射。那什么时候会用到ARP协议呢?在网络层数据封装成IP数据报之后,传输到链路层,链路层将数据封装成帧,在以太网的封装中,要填入接收端的MAC地址,首先会在本机的ARP缓存表中查找有没有IP对应的MAC地址,如果没有找到,这时候主机就会发送ARP请求给以太网上的每个主机。询问的内容是如果谁的IP地址与请求报文中的IP地址对应,那么请告诉我你的MAC地址。
该部分还有免费ARP和代理ARP。免费ARP有两个作用,一是可以找出IP冲突的问题,二是若主机更换了网卡,对于收到免费ARP请求的主机会将最新的MAC地址更新到缓存表中。对于代理ARP这个也是有前提的,只有在默认路由没有设置和路由器有代理ARP功能的时候,代理ARP才会发生作用。
问题五:路由表中关键的有哪几项
路由表的表项主要有:目标网络,网络掩码,网关(下一跳),接口,跃点数。IP选路时根据路由表进行选路,确定下一步往哪发。初学者也有一个误区,会认为匹配路由表是从上往下匹配。正确是从最长的网络掩码开始匹配的。先与网络掩码相与,在匹配对应的目标网络。若都没有找到,则会发往默认的路由。
问题六:TCP从哪几个方面来提供可靠性
1,UDP会将应用程序的数据一下子交给网络层,而不管数据有多大,所以UDP很容易导致IP分片。TCP尽量避免分片的发生,应用数据会被分割成TCP认为最合适发送的数据块。
2,TCP采用了对数据进行确认的机制,保证双方都能知道数据发送和接收的情况
3,TCP对首部和数据有一个校验和,这是首部一个强制的校验,而UDP的首部的校验和是可选的。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化,若收到段的检验和有差错,TCP将丢弃这个报文段
4,对于每个连接TCP管理了四个定时器,分别是重传定时器,坚持定时器,保活定时器,2MLS定时器。每个定时器在特定的场景都会发挥相应的作用,TCP也是通过这四个定时器来处理数据传输过程中的特殊情况。
5,TCP利用滑动窗口,慢启动,拥塞避免等算法来进行流量的控制。
问题七:TCP连接为什么采用的是三次握手而不是四次,断开连接为什么是四次而不是三次
首先讲一下四次断开连接,也就是四次挥手,首先主动断开连接的一方发送一个FIN断开请求的报文段,接收方对此有个ACK应答,接收方应用程序关闭触发接收方发送一个FIN的断开请求报文段,然后发送方回复一个ACK,至此正常的断开结束。我们知道TCP是一个全双工的连接,任何一方都可以发数据接收数据,采用四次而不是三次是考虑到半打开的一个情况,假如发送发数据发送完毕后,触发一个FIN的请求,但是此时接收端还有数据未发送完毕,这时候接收端回复ACK后,还是会继续发送完数据,然后才会发送FIN断开的请求。所以必须要有四次挥手。
经过上面的解释,那么三次握手就容易理解了,之所以存在 3-way hanshake 的说法,是因为 TCP 是双向通讯协议,作为响应一方(Responder) 要想初始化发送通道,必须也进行一轮 SYN + ACK。由于 SYN ACK 在 TCP 分组头部是两个标识位,因此处于优化目的被合并了。所以达到双方都能进行收发的状态只需要 3 个分组。
问题八:TCP断开连接为什么要等待2MLS时间
MLS是最大报文段生存时间,标准时2分钟,但是在实际中常用是30秒,1分钟或两分钟。为什么是2MLS呢,考虑到一种情况,被动关闭的一方发送了FIN请求后,主动关闭的一方对这个请求发送ACK确认,但是假如这个ACK丢失的话,被动关闭的一方收不到这个ACK,会启动重传FIN,这时候如果主动关闭的一方不处于等待的状态,就会收不到这个重传的报文,TCP连接无法正常断开,所以启用2MLS时间,是让主动关闭的一方有足够的时间来进行对重传的确认。
再考虑一种情况,假如没有这个等待时间,立马关闭连接,启动同样的TCP连接,网络中有上次存在迟到的报文,会混入到新的连接中,对新连接造成干扰,所以等待2MLS时间,也是等待本次连接的所有报文消亡。
问题九:重传定时器,坚持定时器,保活定时器的作用
1,重传定时器:TCP当发送一个报文段后会维持一个重传定时器,若在规定的时间内没有收到对该报文段的确认后,则触发对该报文段的重传,重传时间是“指数退避”的
2,坚持定时器:当接收端的窗口扩大报文段丢失后,发送端无法发送数据,接收端则在等待发送端发送数据,如此形成死锁的情况。坚持定时器就是当收到的窗口为0时,在接下来时间内若没有按时收到窗口扩大报文,则会发送一个探查窗口。
3,保活定时器:就是探查一下对方是否还活着