网络编程---模型概述&网络要素

OSI模型

OSI模型的划分和各个层的功能

OSI一共分为七层,自下而上分别是物理层, 数据链路层, 网络层,传输层, 会话层, 表示层, 应用层, 每个层都有自己的功能:

1.物理层:定义物理设备的标准,如网线的接口类型等,主要作用是传输比特流,该层的数据名为比特

2.数据链路层:接收物理层的数据,并对其MAC地址进行封装与解封装。数据名为桢

3.网络层:由于上一层的MAC地址与设备息息相关,如果设备挂了,那么地址将无法使用,因此引入了一个逻辑地址,名字叫做IP地址,这样,换一台设备也可以继续以前的工作,而该层的作用便是进行IP地址的封装与解封装。数据名为数据包

4.传输层:定义一些数据传输协议和端口号,如TCP协议,UDP协议等,建立数据的通路。数据名为段

5.会话层:在系统之间发起会话或者接受会话(设备之间需相互认识IP地址/MAC地址/主机名)

6.表示层:对接收的数据进行解释,加密/解密,压缩/解压缩等

7.应用层:最容易接触的一一层,我们用的APP,文件等终端应用便是这一层的东西

数据在OS模型中的传输过程:如各有一个数据O需要进行传输,那么它首先要进入应用层,然后不断向下封装,直至物理层变为比特流,然后通过网线或者无线传送到相应的另一个物理层,又不断的进行拆包,直至应用层,此时完成传输

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N6eTIzMzM=,size_16,color_FFFFFF,t_70

而TCP模型则是对OSI模型进行了进一步的简化,变为了四层,如下图是两者之间的关系对比图

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N6eTIzMzM=,size_16,color_FFFFFF,t_70

网络通讯要素

要进行网络通讯,则必须要知道其三要素:IP地址,端口号,传输协议

IP地址:是网络中设备的标识,一般为d.d.d.d的形式,如192.168.3.240,现在最新的IP地址可以达到八段,形式为X:X:X:X:X:X:X:X,本机的回环地址为:127.0.0.1,主机名为localhost

在网络编程中,有专门的一个类表示互联网协议ip,该类为:java.net.InetAddress;

一.获取本地方法---getLocalHost()    获取本机地址通过测验,你会发现得到的地址不仅仅是ip地址,在ip地址之前还会有一串英文,如abcde/192.168.10.240,那么为什么会出现这串英文呢?原来是因为ip地址太难记忆,所以给主机名起一个好记忆的别名,成为主机名,访问该名字就相当于访问该主机ip

那么问题来了,它是如何实现通过主机名访问主机呢?

过程:在网页中搜索一个名字,将该名字解析成为ip地址,然后通过ip地址进行访问。名字和ip地址会有一张对应的“表”,如果改名字在表中能找到对应的ip地址,那么便将改名字解析为ip地址,然后通过ip地址访问。

如何解析:搜索一个名字,首先会在本机的文件中找对应关系的文件,该文件位于C:\Windows\systems\drivers\etc\hosts中,如果找到,则使用找到名字对应的IP地址进行访问。如果没找到,则在互联网上查找,网上有一个专门解析对应主机名的ip地址,叫做“域名解析服务”(DNS),然后通过找到的ip地址进行访问,以访问新浪(www.sina.com.cn)为例,进行图解过程

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N6eTIzMzM=,size_16,color_FFFFFF,t_70

ps:了解到这个原理,我们可以改进一些东西,比如将永远不想再访问的网页配到本地的C:\Windows\systems\drivers\etc中的hosts文件中,这样该网页就被拉入我们的黑名单啦~

二.获取其他主机的地址

//演示ip对象
InetAddress ip = InetAddress.getLocalHost();

//获取其他主机信息
ip = InetAddress.getByName("Lucy-PC");  //根据其他主机名获取主机ip地址
System.out.println(ip); 

但是执行此段代码,会有异常信息,因为在本地解析文件中找不到主机名对应的主机ip,遇到这种问题,我们便需要在C:\Windows\systems\drivers\etc中的hosts文件中配置主机名以及对应的ip,这样就可以根据主机名得到其他的主机ip了

如果想得到百度的ip地址呢?

//演示ip对象
InetAddress ip = InetAddress.getLocalHost();

//获取其他主机信息
ip = InetAddress.getByName("www.baidu.com.cn");  //根据百度主机名获取主机ip地址
System.out.println(ip); 

这样,我们就可以得到百度的ip地址了。值得注意的是,按照这种理论,我们在连接互联网的情况下,可以根据主机名得到任意网页的ip地址,但是由于这些主机名是一个笼统的概括,而现在网页都对其主机进行了严格而又细致的划分,那么仅仅通过主机名是不能得到ip地址的,以新浪为例,通过主机名www.sina.com.cn是无法得到新浪的ip地址的,除非更具体到新浪的新闻网页或者体育网页才可以

端口号:用于标识进程的逻辑地址,不同的进程有不同标识

            有效端口在0~65535之间,其中0~1024为系统使用或者保留端口

图解端口在传输中的作用

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3N6eTIzMzM=,size_16,color_FFFFFF,t_70

其中端口又分为物理端口和逻辑端口

物理端口:网卡上面的端口

逻辑端口:对应应用程序中的逻辑标识

传输协议:UDP和TCP

UDP:将数据源和目的地封装在数据包中,不需要建立连接,每个数据包的大小限制在64k之内

          因为不需要进行连接,所以速度快,但因此也不安全,所以是不可靠协议

TCP:建立连接,形成传输数据的通道,在连接中能进行大数据量传输

          通过三次握手完成连接,是可靠协议,但由于必须要建立连接,因此效率会降低

关于UDP和TCP更详细的内容见下一篇博文:https://blog.csdn.net/szy2333/article/details/88688570

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值