网络相关的话题其实很广,对于java的学习来说,我想分为这几个部分:网络基础知识,基本的网络编程,请求与响应的相关内容,额外的一些扩展。
当然再开始探讨之前,也需要做好一些学习的准备,起码需要了解一些的是:java基础知识,IO流,多线程的基础知识,计算机网络相关等等。这里说明一下,不用太过于害怕这几条,起码这里你需要的只是:Java基础(就是起码懂怎么写最简单的代码),IO流(就是知道什么是IO和分为哪几种IO),多线程(就是说你起码要知道thread和runnable在代码里怎么写的),计算机网络(就是说你上过网并且听说过一些词例如IP之类的)。
有了以上这些条件,那在这里我们主要先来探讨第一个部分的内容,纯纯的理论知识。
要想了解基础知识,首先来回忆一下你有没有听过以下这些词:ip,http,https,端口号,tcp,udp,DNS,ipv4,ipv6,localhost…相信你或多或少听说过其中的一些甚至是所有。那不妨让我们先想想,我们与网络之间的交流都是怎样的。
也许你会说页面输入了一个网址来看网页。
看到这里你也许也会联想到访问tomcat时的localhost:8080。对于我们来说都算是访问服务器来获取资源嘛,一个是从百度来的资源,一个是从tomcat部署在本机的服务器。那么接下来就看看这里面都涉及到了哪些我们刚刚提到的词。
首先最先看到的www.baidu.com和localhost都叫ip地址,ip地址可以理解为主机的一个地址,对应了电脑本身,对于像百度这样的域名,DNS会负责解析寻址,而当你能够定位到地址之后,你应该去寻找你需要的端口号,其中端口号占两个字节,TCP和UDP是各有0到65535个,端口是对应进程,但百度却没有体现端口号,原因是因为http和https都有默认的端口号,http是80,https是443,所以以下这种方式也是访问百度的首页。
对于端口号来说,0到1023是程序随时占用的,1024到49151是分配给用户以及进程的,49152到65535是动态或私有的端口号。如果这样还是对端口号没什么概念,不妨打开自己的任务管理器看看。
这里的PID就是端口号的体现。(没有的自己点右键添加一下这个字段)
所以看到这里,起码我们大概想象到了这样一个流程:我们想看一个网页,于是我们需要输入ip地址和端口号来获取资源,并且根据证书不同(http与https)可能有不同的默认端口号。
然后我们就需要系统地了解一下分层问题了。分层有OSI的七层也有TCP/IP的四层,其实他们都是描述了一个整体,只是划分有所不同罢了。OSI的七层分别是:1.物理层 2.数据链路层 3.网络层 4.传输层 5.会话层 6.表示层 7.应用层。至于TCP/IP的四层以及和七层的联系则是:物理层(1,2),网络层(3),传输层(4),应用层(5,6,7)。这里就不单独放个图片了,我们也不会讨论物理层的内容。这里我会想象一个最简单网络的样子,两台电脑之间的交流,首先要获取地址组成网络(网络层),然后需要能传输资源达成交流的目的(传输层),两台电脑连接起来要进行这次交流(会话层),两台电脑传输的数据也需要格式上的互通(表示层),最后起码电脑上还得有应用帮助我们实现这样的操作(应用层)。(以上这样的形容不严谨但也不是特别离谱)
对于网络的样子有了一个大概的想象之后,不妨再往回看看,ipv4和ipv6,这两位其实没什么好说的,只不过是两种地址值的协议,ipv4是32位4个字节0到255的十进制数,这个地址值范围虽然看起来不小但其实很早就不够用了,并且大部分分布在北美地区。于是便有了ipv6,拥有128位16个字节,支持的范围大大增加。(这里不做过多的区别描述,有兴趣自己查一下吧)*这里附赠一个知识点:ipv4是分段分类的,可以简单理解为通过开头分辨,0-127是A类通常用于主干网络或大型互联网公司等,128-191为B类多用于节点叫多的地区的网络,192-223为C类多用于小型局域网,224-239为D类用于多点广播,240-255为E类作为保留用于实验和开发。(至于怎么记住,其实就是每次都除2,不信你算算)全零的地址代表任意,全255的地址代表当前子网的广播地址。有兴趣的可以在命令行里ping一下百度的ip地址看看。(我偏要ping个b站)
看到这里可以回想一下了,我们讨论了网络的一些基本名词,包括ip,端口号,分层。以及浅谈了有关http和https,ipv4和ipv6。但主要还是聊了聊我关于网络的想象,接下来主要在对于TCP和UDP的对比讨论中实现简单的网络编程,对网络的基础知识也是对后续理解提供帮助嘛。
网络编程那些躲不过的小基础
最新推荐文章于 2024-05-03 23:19:59 发布