想必很多人都听过一些经典的问题:
TCP三次握手 四次挥手是啥,TCP和UDP什么区别?HTTP又是啥?
我想从更科普的角度讲一下我看完计算机网络之后的一些体会:
想象一下,我们通信手段一直在变,从烽火狼烟,飞鸽传书,走镖,邮寄,到电话,视频,互联网,甚至量子通信,但不变的一直都是 数据传输的可靠性,准时性等,因此互联网在实践中被不断的完善。
要想实现可靠性和准时性等(等是因为我总觉得漏了个什么)参照历史中的通信手段,我们首先要给需要通信的双方取个唯一的名字,这样才能保证确实是这两个物理机要通信,这就不得不提到在网卡中固化好的唯一的MAC地址,MAC地址就好像一台物理机的名字一样,它一直都不会改变因为它写在硬件里面,但你知道一个人的名字是不足以找到她到底在哪里的,毕竟笔记本之类的设备是很经常移动的。
这时候就来到iP协议层咯,它来负责两台已知ip地址的物理机到底是如何找到彼此的,就好像两台物理机通过网线连在一起那么神奇。这里面的细节非常有意思,比如说ip地址到MAC地址是如何映射的,ARP协议,物理机A到底是通过什么路径(路由)到达主机B的,ICMP协议,这些路径是如何被规划出来的等。
上面提到这些都是在为准时性和可靠性在做努力,那么谁来保证呢?
TCP面向连接的协议就确保咯数据的可靠性,丢包等都会有相应的处理。而UDP不保证数据的可靠性。看书的时候有个疑问,TCP\UDP 协议都是建立在不保证数据传输的可靠性的ip协议上的,那么TCP又怎么能确保数据是可靠的呢?现在看来就没什么疑问咯,因为TCP协议有一整套的应对方法来做保证。
至于应用层HTTP 等协议我回头来填坑,但我觉得看到TCP/UDP基本上就可以说基本掌握互联网 网络通信到底是怎么回事了。
最后:socket编程也在后面填一下坑。因为 基本原理懂了后真的会觉得这些代码就是完成了上面的基本功能一样,但是语法总是要记忆,项目总是有复杂多变的业务逻辑在里面。