1.OSI七层网络模型浅析

当然,咱们不是专业搞网络工程的,只需知道有哪些层,大概是拿来干嘛的就能够了!

OSI七层网络模型(从下往上)

  • 物理层(Physical) :设备之间的数据通讯供给传输媒体及互连设备,为数据传输供给可靠的环境。能够理解为网络传输的物理媒体部分,比如网卡,网线,集线器,中继器,调制解调器等!在这一层,数据还没有被安排,仅作为原始的位流或电气电压处理,这一层的单位是:bit比特
  • 数据链路层(Datalink) :能够理解为数据通道,主要功用是怎么在不可靠的物理线路进步行数据的可靠传递,改层效果包含:物理地址寻址,数据的成帧,流量操控,数据检错以及重发等!别的这个数据链路指的是:物理层要为终端设备间的数据通讯供给传输媒体及其衔接。媒体是长期的,衔接是有生计期的。在衔接生计期内,收发两端能够进行不等的一次或屡次数据通讯。每次通讯都要通过树立通讯联络和撤除通讯联络两进程!这种树立起来的数据收发关系~该层的设备有:网卡,网桥,网路交换机,别的该层的单位为:
  • 网络层(Network) :主要功用是将网络地址翻译成对应的物理地址,并决议怎么将数据从发送方路由到接纳方,所谓的路由与寻径:一台终端可能需求与多台终端通讯,这样就发生的了把恣意两台终端设备数据链接起来的问题!简略点说便是:树立网络衔接和为上层供给服务!该层的设备有:路由!该层的单位为:数据包,别的IP协议就在这一层!
  • 传输层(Transport) :向上面的运用层供给通讯服务,面向通讯部分的最高层,同时也是用户功用中的最低层。接纳会话层数据,在必要时将数据进行分割,并将这些数据交给网络层,并且确保这些数据段有用的抵达对端!所以这层的单位是:数据段;而这层有两个很重要的协议便是:TCP传输操控协议UDP用户数据报协议,这也是本章节中心解说的部分!
  • 会话层(Session) :担任在网络中的两节点之间树立、维持和停止通讯。树立通讯链接,坚持会话进程通讯链接的疏通,同步两个节点之间的对话,决议通讯是否被中止以及通讯中止时决议从何处从头发送,即不同机器上的用户之间会话的树立及办理!
  • 表明层(Presentation) :对来自运用层的命令和数据进行解释,对各种语法赋予相应的含义,并依照必定的格局传送给会话层。其主要功用是”处理用户信息的表明问题,如编码、数据格局转化和加密解密,紧缩解紧缩”等
  • 运用层(Application) :OSI参阅模型的最高层,为用户的运用程序供给网络服务。它在其他6层作业的根底上,担任完结网络中运用程序与网络操作体系之间的联络,树立与结束运用者之间的联络,并完结网络用户提出的各种网络服务及运用所需的监督、办理和服务等各种协议。此外,该层还担任和谐各个运用程序间的作业。运用层为用户供给的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、长途登录服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络办理服务、数据库服务等。

好的上面咱们浅述了OSI七层网络模型,下面总结下:

OSI是一个理想的模型,一般的网络体系只触及其间的几层,在七层模型中,每一层都供给一个特殊的网络功用,从网络功用视点调查:

  • 下面4层(物理层、数据链路层、网络层和传输层)主要供给数据传输和交换功用,即以节点到节点之间的通讯为主
  • 第4层作为上下两部分的桥梁,是整个网络体系结构中最要害的部分;
  • 上3层(会话层、表明层和运用层)则以供给用户与运用程序之间的信息和数据处理功用为主。

简言之,下4层主要完结通讯子网的功用,上3层主要完结资源子网的功用。

Socket学习网络基础

TCP/IP是一组协议的代名词,它还包含许多协议,组成了TCP/IP协议簇。TCP/IP协议簇分为四层,IP坐落协议簇的第二层(对应OSI的第三层),TCP坐落协议簇的第三层(对应OSI的第四层)。TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所供给的网络来完结自己的需求。这4层分别为:

  • 运用层:运用程序间交流的层,如简略电子邮件传输(SMTP)、文件传输协议(FTP)、网络长途拜访协议(Telnet)等。
  • 传输层:在此层中,它供给了节点间的数据传送服务,如传输操控协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包参加传输数据并把它传输到下一层中,这一层担任传送数据,并且确定数据已被送达并接纳。
  • 网络互连层:担任供给根本的数据封包传送功用,让每一块数据包都能够抵达目的主机(但不查看是否被正确接纳),如网际协议(IP)。
  • 主机到网络层:对实践的网络媒体的办理,界说怎么运用实践网络(如Ethernet、Serial Line等)来传送数据。

3.TCP/UDP差异解说

好吧,前两点侃侃而谈,只是给咱们普及下OSI七层模型和TCP/IP四层模型的概念,接下来要讲的是和咱们Socket开发相关的一些概念名词了!

1)IP地址

Socket学习网络基础

2)端口

1. 用于区分不同的运用程序

2. 端口号的范围为0-65535,其间0-1023未体系的保留端口,咱们的程序尽可能别运用这些端口!

3. IP地址和端口号组成了咱们的Socket,Socket是网络运转程序间双向通讯链路的终结点,是TCP和UDP的根底!

4. 常用协议运用的端口:HTTP:80,FTP:21,TELNET:23

Socket学习网络基础

3)TCP协议与UDP协议的比较:

TCP协议流程详解:

首先TCP/IP是一个协议簇,里面包含许多协议的。UDP只是其间的一个。之所以命名为TCP/IP协议,因为TCP,IP协议是两个很重要的协议,就用他两命名了。

下面咱们来解说TCP协议和UDP协议的差异:

TCP(Transmission Control Protocol,传输操控协议)是面向衔接的协议,即在收发数据钱,都需求与对面树立可靠的链接,这也是面试经常会问到的TCP的三次握手以及TCP的四次挥手三次握手:树立一个TCP衔接时,需求客户端和服务端总共发送3个包以承认衔接的树立,在Socket编程中,这一进程由客户端履行connect来触发,详细流程图如下:

Socket学习网络基础

  • 第一次握手:Client将标志位SYN置为1,随机发生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状况,等待Server承认。
  • 第二次握手:Server收到数据包后由标志位SYN=1知道Client恳求树立衔接,Server将标志位SYN和ACK都置为1,ack=J+1,随机发生一个值seq=K,并将该数据包发送给Client以承认衔接恳求,Server进入SYN_RCVD状况。
  • 第三次握手:Client收到承认后,查看ack是否为J+1,ACK是否为1,假如正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server查看ack是否为K+1,ACK是否为1,假如正确则衔接树立成功,Client和Server进入ESTABLISHED状况,完结三次握手,随后Client与Server之间能够开始传输数据了。

四次挥手:停止TCP衔接,便是指断开一个TCP衔接时,需求客户端和服务端总共发送4个包以承认衔接的断开。在Socket编程中,这一进程由客户端或服务端任一方履行close来触发,详细流程图如下:

Socket学习网络基础

  • 第一次挥手:Client发送一个FIN,用来封闭Client到Server的数据传送,Client进入FIN_WAIT_1状况
  • 第二次挥手:Server收到FIN后,发送一个ACK给Client,承认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状况。
  • 第三次挥手:Server发送一个FIN,用来封闭Server到Client的数据传送,Server进入LAST_ACK状况。
  • 第四次挥手:Client收到FIN后,Client进入TIME_WAIT状况,接着发送一个ACK给Server,承认序号为收到序号+1,Server进入CLOSED状况,完结四次挥手。别的也可能是同时发起自动封闭的状况:

Socket学习网络基础

别的还可能有一个常见的问题便是:为什么树立衔接是三次握手,而封闭衔接却是四次挥手呢?答:因为服务端在LISTEN状况下,收到树立衔接恳求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。而封闭衔接时,当收到对方的FIN报文时,只是表明对方不再发送数据了但是还能接纳数据,己方也未必悉数数据都发送给对方了,所以己方能够立即close,也能够发送一些数据给对方后,再发送FIN报文给对方来表明同意现在封闭衔接,因而,己方ACK和FIN一般都会分开发送。

UDP协议详解

UDP(User Datagram Protocol)用户数据报协议,非衔接的协议,传输数据之前源端和终端不树立衔接,当它想传送时就简略地去抓取来自运用程序的数据,并尽可能快地把它扔到网络上。在发送端,UDP传送数据的速度只是是受运用程序生成数据的速度、计算机的才能和传输带宽的约束;在接纳端,UDP把每个消息段放在行列中,运用程序每次从行列中读一个消息段。相比TCP便是无需树立链接,结构简略,无法确保正确性,简单丢包。

4.Java中关于网络供给的几个要害类

针对不同的网络通讯层次,Java给咱们供给的网络功用有四大类:

  • InetAddress:用于标识网络上的硬件资源
  • URL:统一资源定位符,通过URL能够直接读取或者写入网络上的数据
  • Socket和ServerSocket:运用TCP协议实现网络通讯的Socket相关的类
  • Datagram:运用UDP协议,将数据保存在数据报中,通过网络进行通讯

本节咱们只介绍前两个类,Socket与Datagram到TCP和UDP的章节再解说!

~InetAddress的运用比如

示例代码

public class InetAddressTest {
    public static void main(String[] args) throws Exception{
        //获取本机InetAddress的实例:
        InetAddress address = InetAddress.getLocalHost();
        System.out.println("本机名:" + address.getHostName());
        System.out.println("IP地址:" + address.getHostAddress());
        byte[] bytes = address.getAddress();
        System.out.println("字节数组形式的IP地址:" + Arrays.toString(bytes));
        System.out.println("直接输出InetAddress目标:" + address);
    }
}

运转结果图

Socket学习网络基础