1.如果要将一个数据报从一个源节点发送到另一个目的节点我们应该怎么办?
最简单的方案是在源节点和目的节点中间建立一条安全可靠的通路,以后两个节点之间所有的通信都在这条通路上进行,我们只要保证这个通路上的每个节点都是正常运行的,那我们就能保证数据传输的准确性(虚电路)。
随着节点的越来越多,这种方案的缺陷渐渐地展现出来:①维护一条安全可靠的通路的代价太大,需要确保每两个节点之间的消息都能够准确到达;②并且如果一个节点出问题了,那么和这个节点相关的通路都得重新规划,费时费力。
怎么去解决呢?第一个问题,我们既然不想去保证每个节点之间都能发送成功,其实我们只要保证目的地最终的结果是正确的就可以,类似于分布式事务中从JTA和BASE模式的改变,最终一致性才是目的。第二个问题,其实如果一个节点出问题了,相隔的节点是最先知道的,如果我们把路径规划的工作放到中间节点上(也就是路由器),而中间节点也只需要关注我应该给哪个节点发送是最优的就可以了。这样就减轻了发送方的压力。就这样,TCP/IP协议诞生了。
2什么是TCP/IP协议?
利用不可靠的ip协议实现可靠的传输。
IP协议之所以是不可靠的是因为IP网络存在冲突丢包及传输错误甚至被恶意篡改的情况。
简单来说,就是每两个节点之间采用ip协议(网络层)进行传输,但是因为不可靠,所以我们在上层,也就是传输层有自己的保证信息正确的机制,这就是TCP要做的事。
那么TCP是怎么保证传输的可靠性的呢?
首先要保证可靠性,那我们就得对每一条消息进行ack,也就是说source节点给dist端发送一个信息,要等到dist端进行ack确认收到了才能算是发送成功了,如果发送超时,就必须要有重传机制。
当然,为了变得更加高效,更加可靠,tcp协议还包含很多东西:
①首先就是我们熟悉的三次握手,四次挥手,用这个机制,tcp保证source节点和dist的可用性(可用性是指接收消息和发送消息都没有问题),具体怎么实现的,我们后面再说。
②为了避免一个大的数据包重试的代价太大,tcp会将