当面试被问到到TCP/UDP

相信绝大部分的都能回到出来

1、TCP面向连接,UDP面向无连接。
2、TCP是可靠的,UDP不可靠。
3、TCP面向字节流的,UDP面向数据报。
4、TCP保证顺序,UDP不保证顺序
5、TCP保证正确性,UDP可能丢包

回到到这里,在面试官来看已经暴露给他太多的问题点了。
什么是面向连接?
TCP为什么可靠?(保证顺序性和不丢包是可靠性的具体体现了)

问题一 什么是面向连接?
这里的回答点就是三次握手机制。UDP在发送数据报文的时候不需要建立连接直接发送。TCP建立连接之前必须经历三次握手,主要目的让对方知道相互的初始序号值,如果是两次握手只能确认发起方的序列号值被对方接受到。

问题二 TCP为什么是可靠?
这个问题可以进行拆分,可靠性的表现为累计确认、流量控制和拥塞控制。

累计确认: 发送方会有一个发送的缓存,当收到响应方的ACK之后将缓存里面的数据清掉。例如C向S发送四条数据 M1 、M2、M3、M4,其中M1和M2已经发送并且也收到ACK回应,此时C的缓存里将会清空M1和M2数据,S端 M3数据丢失,M4正常收到,此时S端不会发送M4这个数据包的ACK,而是等待M3数据RTO时间超时重传(超时重试即对每一个发送的消息都会给出一个超时时间,如果在这个时间段之内仍未收到ACK回复,则触发重试),当然RTO时长会被重新计算,使其等待时间更长。等M3数据收到之后,M3和M4一起发送ACK给C端,这就是累计确认。可以看出这解决了包的丢失问题和乱序的问题。

由于等待的时间间隔比较长,可以采用一个快速确认方案,连续发三个M2的ACK,发送端则会重新发M3消息。

流量控制
发送端发送数据会收到接收端ACK的回应,里面就会带接收端窗口的大小,表示接受端最大能接收的数据量,发送端可以根据自己实际情况来对数据发送的流量进行控制(例如超出接受端窗口的数据不发送)。针对的是端到端的。解决的问题是接收端没有足够的接收空间从而导致丢包问题。

拥塞控制
阻塞控制是针对网络上的,慢增长,首先拥塞窗口的大小设置位1,如果能够收到数据第二次窗口大小增加到2,第三次仍能收到数据窗口大小增加到4,第四次仍能收到ACK数据此时可以设置窗口大小为8,之后缓慢增长,进入拥塞算法,每一次窗口大小增加1,一直到发生丢包,此时拥塞窗口的阀值设为当前的一般,拥塞窗口设置为1。重复上面的操作。
拥塞控制主要是为了控制发送的数据太快,网络处理不及时而导致的丢包。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章