网络(一)网络的分层

一.网络的分层

有两套参考模型:

  • OSI参考模型(Open Systems Interconnection Reference Model,七层):模型过于理想化,未能在因特网上进行广泛推广。
  • TCP/IP参考模型(或TCP/IP协议,四层):事实上的国际标准。

图片描述

在不同层数据如何封装和拆分:
图片描述

90%的情况下Java代码都将在应用层工作,只需要与传输层对话。其它10%的时间会在传输层处理,与应用层或网际层对话。

网际层(internet layer)

在OSI模型中,网际层使用了一个更一般的名字,称为网络层(network layer)。网络层协议定义了数据位和字节如何组织为更大的分组,称为包,还定义了寻址机制,不同的计算机要按照这个寻址机制查找对方。网际协议(IP)是世界上使用最广发的网络层协议,也是Java唯一理解的网络层协议。实际上,这是两个协议:IPv4 和 IPv6。在 IPv4 和 IPv6 中,数据按包在网际层上传输,这些包称为数据报(datagram)。

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

传输层

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

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

应用层

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

二.IP和端口

IP 地址:InetAddress

  • 唯一的标识Internet 上的计算机
  • 本地回环地址(hostAddress):127.0.0.1 主机名(hostName): localhost
  • 不易记忆

端口号:标识正在计算机上运行的进程(程序)

  • 不同的进程有不同的端口号
  • 被规定为一个16 位的整数0~65535。其中,0~1023被预先定义的服务通信占用(如MySql占用端口3306,http占用端口80等)。 除非我们需要访问这些特定服务,否则,就应该使用1024~65535 这些端口中的某一个进行通信,以免发生端口冲突。

端口号与IP地址的组合得出一个网络套接字。例如QQ通信,通过IP地址和端口号才能准确地定位两个QQ客户端。

三.TCP、UDP和Socket

网络通信协议:计算机网络中实现通信必须有一些约定,即通信协议, 对速率、传输代码、代码结构、传输控制步骤、出错控制 等制定标准。
通信协议分层的思想:
由于结点之间联系很复杂,在制定协议时,把复杂成份分解成一些简单的成份,再将它们复合起来。最常用的复合方式是层次方式,即同层间可以通信、上一层可以调用 下一层,而与再下一层不发生关系。各层互不影响,利于系统的开发和扩展。

1.TCP/UDP 协议

传输层协议中有两个非常重要的协议:

  • 传输控制协议TCP(Transmission Control Protocol)
  • 用户数据报协议UDP(User Datagram Protocol)。

1.TCP协议:

  • 使用TCP协议前,须先建立TCP连接,形成传输数据通道
  • 传输前,采用“三次握手”方式,是可靠的
  • TCP协议进行通信的两个应用进程:客户端、服务端
  • 在连接中可进行大数据量的传输
  • 传输完毕,需释放已建立的连接,效率低

2.UDP协议:

  • 将数据、源、目的封装成数据包,不需要建立连接
  • 每个数据报的大小限制在64K内
  • 因无需连接,故是不可靠的
  • 发送数据结束时无需释放资源,速度快

2.Socket

  • 利用套接字(Socket)开发网络应用程序早已被广泛的采用, 以至于成为事实上的标准。
  • 通信的两端都要有Socket,是两台机器间通信的端点网络通信其实就是Socket间的通信。
  • Socket允许程序把网络连接当成一个流,数据在两个Socket 间通过IO传输。
  • 一般主动发起通信的应用程序属客户端,等待通信请求的为服务端。

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。
图片描述


技术文档整理
后端开发
282 声望
29 粉丝
0 条评论
推荐阅读
kafka(三)—Kafka的Java代码示例和配置说明
KafkaProducer(org.apache.kafka.clients.producer.KafkaProducer)是一个用于向kafka集群发送数据的客户端。producer是线程安全的,多个线程可以共享同一个 producer实例,而且这通常比在多个线程中每个线程创建...

liaosilzu20072阅读 7.9k

汽车行业场景化营销新方向:基于 WebGL 的网上虚拟车展
车展作为车市的风向标,代表着汽车发展的趋势,也是厂商展示自己、推广自己的舞台。WebGL 作为一种新兴的技术,为 Web 端提供了交互式三维动画新体验,汽车之家的网上车展就是两者结合之后的一种新的产品形态。

之家技术阅读 4.8k

封面图
SpringMVC-ResponseBodyAdvice
ResponseBodyAdvice接口可以在将handler方法的返回值写入response前对返回值进行处理,例如将返回值封装成一个与客户端约定好的对象以便于客户端处理响应数据。本篇文章将学习如果使用ResponseBodyAdvice以及其实...

半夏之沫2阅读 4.3k

前端脚手架开发入门
脚手架是一个通用开发工具,之前自己写一下原生web工程时总是需要重复搭建开发环境、重复写几乎相同的配置文件。为了避免每次的重复工作,统一开发环境、规范,于是想到自己写一个脚手架用用,顺便记录一下。

coderLeo1阅读 423

封面图
SpringMVC-RequestMappingHandlerMapping
使用SpringBoot进行web开发时,控制器类由@RestController注解修饰,通常@RestController注解与@RequestMapping配合使用,被修饰的类用于处理由DispatcherServlet分发下来的web请求。那么当一个web请求到达时,Di...

半夏之沫2阅读 1.8k

SpringMVC-RequestMappingHandlerAdapter
在SpringMVC-RequestMappingHandlerMapping中对web请求到来时如何获取处理该请求的handler进行了分析,那么获取到web请求对应的handler之后,SpringMVC框架还会根据handler获取其对应的HandlerAdapter,handler的...

半夏之沫1阅读 1.4k

web系统添加盲水印
为增加系统安全性,避免重要敏感信息通过截图方式泄露,对web页面增加盲水印标识,标注系统名称,登陆人,当前时间等信息,这里的盲水印指肉眼不可见的html水印

code2roc阅读 885

282 声望
29 粉丝
宣传栏