一、 数据在网络中是怎么路由的?
1.1 同局域网中
网络是未知的, 计算机a怎么把数据刚好传输到计算机b呢? 实际上a是不知道计算机b的。 它会交换机问b在哪里? 交换机不知道的时候, 它会对所有人喊话-b在吗, 有你的数据。 当所有人听到这个请求, 都很老实, 不是自己的都不去领。只有b才会回复,是我的, 这样a知道b了可以进行通信了。 而且这个过程可以缓存起来(b缓存,交换机缓存, a缓存地址), 下次a不要再问哪个是吧啦。
1.2 不同局域网中
当计算机a向不同网络中c传输数据时,它还是先向连接交换机问c在哪里, 这时候c不会在自己局域网广播了(因为我们这个局域网同一个名字-小明,其实就是网络地址一样的)。它会转给路由器。 路由器会查找它所在的网络机器。
二、 四层网络
2.1 数据链路层 机器怎么发送数据
2.2 网络层 机器怎么把数据传输到目标的机器上
2.3 传输层 应用程序怎么把数据传输到应用程序
2.4 应用层 应用程序之间的交互内容
三、tcp & udp
tcp面向连接,udp非连接的
tcp提高可靠的, 有序,重传,udp是尽可能
tcp是点对点, udp可以1对多
tcp传输是流, udp传输的是数据段
udp头比tcp小, 没有重传,实时性更高
四、三次握手&四次挥手
因为网络不可靠, 三次握手,通过反馈确认来保证来可靠。
四次挥手, 因为tcp是双向连接, 没法知道对方是否可以释放连接了, 但是我可以知道自己是否需要再发送数据了。当我不需要发送数据时候就发送fin给对方, 自己处于wait状态。
什么时候会出现closewait 就是别人给我发送数据, 我收到了, 但是我还没有给它说我也不发送数据了。
什么时候会出现timewait呢, 就是被关闭方, 它向主动方发送了最后一条通道要断开的信息, 主动方会出现timewait状态。因为主动方之前已经说了不主动发送数据了, 所以没办法主动反馈,只好等对方再发咯。
五、网络编程模型
5.1 同步阻塞迭代模型
5.2 多进程
5.3 多线程
5.4 select/poll
5.5 epool
六、 长连接
网络不可靠, 靠的就是反馈。