网络(一)网络的分层

Author Avatar
lucky 2020年10月29日
  • 在其它设备中阅读本文章

原文地址:https://segmentfault.com/a/1190000014767181


一. 网络的分层

有两套参考模型:

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

1373652217-5af06b5b1ced0_articlex.png

在不同层数据如何封装和拆分:
956708380-5af06b6b6dca2_articlex.png

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 去组织数据,以符合指定的协议。

556271046-56fbef668af8a_articlex.jpg

socket 和 http 区别

  - HTTP 协议:简单对象访问协 zhi 议,对应于应用层 ,HTTP 协议是基于 TCP 连接 dao 的
  - tcp 协议: 对应于传输层
  - ip 协议: 对应于网络层
  1. TCP/IP 是传输层协议,主要解决数据如何在网络中传输;而 HTTP 是应用层协议,主要解决如何包装数据。
  2. Socket 是对 TCP/IP 协议的封装,Socket 本身并不是协议,而是一个调用接口(API),通过 Socket,才能使用 TCP/IP 协议。
  3. http 连接:http 连接就是所谓的短连接,即客户端向服务器端发送一次请求,服务器端响应后连接即会断掉;

  socket 连接:socket 连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机 down 了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源。

评论已关闭