计算机网络,是不是觉得现在网络应用框架这么多,socket不用手写,物理层和链路层就更加不用理了是吧。最近尝试把一个网络应用部署到云服务器上,网络没问题,端口全开,云主机上localhost可访问,但从公网死活访问不了,至于原因就等题主你学习计算机网络的时候来思考一下吧。
  • 以前只知道打开浏览器上网,却不知道输入网址后到底发生了什么。学了这门课以后,才了解到中间原来经过那么多的步骤,从物理上的传输再到在页面上展示出来,这其中每个环节都不可少。了解到数据是如何从世界的另一端被准确传输到你所使用的电脑的。这门课还会利用交换机和路由器做很多实验,可以学到不少有意思的东西,后来家里几次断网都是答主自己修好的哈哈。
写到这里,可能还是不太明白对【以后发展】到底有何影响,再举个例子吧。比方说你要完成一个大型项目,设计一个搜索引擎。假设你已经掌握好了相应的知识,有了很好的idea。当你要实现它的时候,你需要将需求分割为若干个功能模块,让它们组合在一起工作,在处理大数据时,你知道可以使用多线程/多进程来并行处理etc,这些都是学习操作系统相关知识带给你的;那么你的数据从哪里来呢?如果没有现成的数据,你就需要自己写爬虫爬下来了,爬虫就涉及很多计算机网络方面的知识了;至于数据结构.. 重要性不言而喻了,编程实现时首先要考虑的就是数据结构。

比方说设计一个网页,你要怎么和用户交互而不仅仅是展示你的网页这么简单?用户的数据你要怎样存储到服务器?当用户下次登录时又怎样去调用这些数据?在用户量极为庞大时如何处理高并发?这些问题,你不学好基础的课程是没有办法解决的。再比方说设计一个Android应用,你要怎样减小安装包的大小?要怎样优化内存的使用?怎样缓存使得用户使用时不需要花费过多的网络流量?这些问题亦然。

想做建筑设计师,还是建筑工人?

计算机网络分为3块:
1. 硬件
网卡,网线,交换机这些,用来处理数据的。
2. 协议
数据在网络中通信如何组织?如何识别?如何保证数据的正确性?
这2块我就不多说了。

3. 操作系统
这就是如何把计算机网络和操作系统结合起来的问题了。
对于操作系统来说,网卡也是一种硬件资源。但是网络不单只是一种硬件,而是一种媒体入口。比如操作系统管理硬盘,当然不是简单的记一下硬盘有多大,然后一切操作都交给硬盘芯片去做,更多的需要组织硬盘的扇区,分区,记录文件和扇区/偏移的关系等等。
操作系统对于网络来说也是如此,要记录自身在网络的标识(ip),可被他人访问的入口(port),以及对方的信息(remote ip/port)。连接,断开,数据确认等操作也是由协议控制。
传递自身消息给对方,类似访问硬盘一样把内存中的数据传递给网卡缓存,再发消息给网卡让网卡去传数据,而是否发送成功这些保证不再由硬件中断信号反馈,而是通过网络协议完成。接收对方消息,也是接收到网卡中断,再把数据从网卡缓存移动到内存中,再通过协议给予对方反馈。

简单来说就是这样,如果以后有时间,我再把osi七层协议中的内容和操作系统的交互再详述一遍吧。

网络方面的就推荐《tcp/ip详解》,《uinx网络高级编程》吧。
 
计算机网络:去实现一个虚拟的网卡,自己去实现TCP/IP协议,网络上的东西就明白大半了。
 
至于计算机网络,自己可以实现一个TCP/IP协议栈就好了。
《intel编程参考手册》《自己动手写操作系统》《操作系统的设计和实现》《TCP/IP协议》等都是非常好上手的参考资料。
 
 
posted on 2017-02-22 13:57  秋冷桂团团  阅读(113)  评论(0)    收藏  举报