码迷,mamicode.com
首页 > 其他好文 > 详细

基本网络概念之网络分层的各层介绍

时间:2014-10-04 16:34:47      阅读:144      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   io   os   使用   java   strong   文件   

主机网络层

在基于IP的Internet(Java唯一真正理解的网络)的标准参考模型中,网络中隐藏的部分属于主机网络层(host-to-work layer,也称为链路层、数据链路层或网络接口层)。主机网络层定义了一个特定的网络接口(如以太网卡或WiFi天线)如何通过物理连接向本地网络或世界其他地方发送IP数据报。主机网络层中,由连接不同计算机的硬件(线缆、光纤电缆、无线电波或烟信号)组成的部分有时称为网络的物理层。

网际层

在OSI模型中,网际层使用了一个更一般的名字,称为网络层(network layer)。网络层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同计算机要按这个寻址机制查找对方。网际协议(IP)是世界上使用最广泛的网络层协议,也是Java唯一理解的网络层协议。实际上,这是两个协议:IPv4和IPv6,IPv4使用32位地址,IPv6使用128位地址,另外还增加了一些技术特性来帮助完成路由。在IPv4和IPv6中,数据按包在网际层上传输,这些包称为数据报(datagram)。每个IPv4数据报包含一个长度为20至60字节的首部,以及一个包含多达65515字节数据的有效载荷。实际上,大多数IPv4数据报都小得多,从几十字节到稍大于8K字节不等。IPv6数据报包含一个更大的首部,数据可以多达4G字节。

下图展示各个部分在IPv4数据报中是如何排列的。所有位和字节都采用big-endian方式,由左至右为最高位到最低位:

bubuko.com,布布扣

除了路由和寻址,网际层的第二个作用是支持不同类型的主机网络层相互对话。Internet路由器会完成WiFi和Ethernet、Ethernet和DSL、DSL和光纤往返等协议之间的转换。如果没有网际层类似的分层,则每个计算机只能与同一类网络上的其他计算机对话。网际层负责使用同构协议将异构网络相互连接。

传输层

原始数据报有一些缺点。最显著的缺点是不能保证可靠传送,即使能传送也可能在传输中遭到破坏。首部校验和只能检测首部中的破坏情况,而不能检测数据报中的数据部分。最后,即使数据报能到达目的地而未被破坏,也不一定会以发送时的顺序到达。各个数据报可能会经过不同路由从源到达目的地。如果数据报A在数据报B之前发送,这并不意味着数据报A会在数据报B之前到达。

传输层(transport layer)负责确保各包以发送的顺序接收,并保证没有数据丢失或破坏。如果丢包,传输层会请求发送方重传这个包。为实现这个目标,IP网络会给每个数据报添加一个附加首部,其中包含有更多信息。这一层上主要有两个协议。第一个是传输控制协议(Transmission Control Protocol,TCP),这是一个开销很高的协议,支持对丢失或破坏的数据进行重传,并按照发送时的顺序进行传送。第二个协议是用户数据报协议(User Datagram Protocol,UDP),它允许接收方检测被破坏的包,但不保证这些包以正确的顺序传送(或者包有可能根本未传送)。但是,UDP通常比TCP快。TCP称为可靠的协议;UDP是不可靠的协议。

应用层

向用户传送数据的层称为应用层(application layer)。它下面的三层共同定义了数据如何从一台计算机传输到另一台计算机。应用层确定了数据传输后的操作。例如,应用层协议如HTTP(用于国际互联网)可以确保web浏览器将图像显示为图片,而不是一长串数字。你的程序中有关网络的部分大多都是在应用层花费时间。除了用于web的HTTP,还有用于电子邮件的SMTP、POP和IMAP;用于文件传输的FTP、FSP和TFTP;用于文件访问的NFS;用于文件共享的Gnutella和BitTorrent;用于语音通信的会话启动协议(Session Initiation Protocol,SIP)和Skype等。此外,你的程序可以在必要时定义自己的应用层协议。

基本网络概念之网络分层的各层介绍

标签:style   http   color   io   os   使用   java   strong   文件   

原文地址:http://my.oschina.net/fhd/blog/324177

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!