固然,咱们不是专业搞网络工程的,只要知道有哪些层,大概是拿来干吗的就能够了!html
OSI七层网络模型(从下往上):面试
物理层(Physical):设备之间的数据通讯提供传输媒体及互连设备,为数据传输提供可靠的 环境。能够理解为网络传输的物理媒体部分,好比网卡,网线,集线器,中继器,调制解调器等! 在这一层,数据尚未被组织,仅做为原始的位流或电气电压处理,这一层的单位是:bit比特数据库
数据链路层(Datalink):能够理解为数据通道,主要功能是如何在不可靠的物理线路上进行 数据的可靠传递,改层做用包括:物理地址寻址,数据的成帧,流量控制,数据检错以及重发等! 另外这个数据链路指的是:物理层要为终端设备间的数据通讯提供传输媒体及其链接。媒体是 长期的,链接是有生存期的。在链接生存期内,收发两端能够进行不等的一次或屡次数据通讯。 每次通讯都要通过创建通讯联络和拆除通讯联络两过程!这种创建起来的数据收发关系~ 该层的设备有:网卡,网桥,网路交换机,另外该层的单位为:帧编程
网络层(Network):主要功能是将网络地址翻译成对应的物理地址,并决定如何将数据从发 送方路由到接收方,所谓的路由与寻径:一台终端可能须要与多台终端通讯,这样就产生的了 把任意两台终端设备数据连接起来的问题!简单点说就是:创建网络链接和为上层提供服务! 该层的设备有:路由!该层的单位为:数据包,另外IP协议就在这一层!数组
传输层(Transport):向上面的应用层提供通讯服务,面向通讯部分的最高层,同时也是 用户功能中的最低层。接收会话层数据,在必要时将数据进行分割,并将这些数据交给网络 层,而且保证这些数据段有效的到达对端!因此这层的单位是:数据段;而这层有两个很重要 的协议就是:TCP传输控制协议与UDP用户数据报协议,这也是本章节核心讲解的部分!安全
会话层(Session):负责在网络中的两节点之间创建、维持和终止通讯。创建通讯连接, 保持会话过程通讯连接的畅通,同步两个节点之间的对话,决定通讯是否被中断以及通讯中断时 决定从何处从新发送,即不一样机器上的用户之间会话的创建及管理!网络
表示层(Presentation):对来自应用层的命令和数据进行解释,对各类语法赋予相应 的含义,并按照必定的格式传送给会话层。其主要功能是"处理用户信息的表示问题,如编码、 数据格式转换和加密解密,压缩解压缩"等ui
应用层(Application):OSI参考模型的最高层,为用户的应用程序提供网络服务。 它在其余6层工做的基础上,负责完成网络中应用程序与网络操做系统之间的联系,创建与结束使用者之间的联系,并完成网络用户提出的各类网络服务及应用所需的监督、管理和服务等各类协议。此外,该层还负责协调各个应用程序间的工做。应用层为用户提供的服务和协议有:文件服务、目录服务、文件传输服务(FTP)、远程登陆服务(Telnet)、电子邮件服务(E-mail)、打印服务、安全服务、网络管理服务、数据库服务等。编码
好的上面咱们浅述了OSI七层网络模型,下面总结下:加密
OSI是一个理想的模型,通常的网络系统只涉及其中的几层,在七层模型中,每一层都提供一个特殊 的网络功能,从网络功能角度观察:
下面4层(物理层、数据链路层、网络层和传输层)主要提供数据传输和交换功能, 即以节点到节点之间的通讯为主
第4层做为上下两部分的桥梁,是整个网络体系结构中最关键的部分;
上3层(会话层、表示层和应用层)则以提供用户与应用程序之间的信息和数据处理功能为主。
简言之,下4层主要完成通讯子网的功能,上3层主要完成资源子网的功能。
——以上内容参考自:OSI七层模型详解
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等)来传送数据。
好吧,前两点侃侃而谈,只是给你们普及下OSI七层模型和TCP/IP四层模型的概念,接下来要讲的是 和咱们Socket开发相关的一些概念名词了!
1. 用于区分不一样的应用程序
2. 端口号的范围为0-65535,其中0-1023未系统的保留端口,咱们的程序尽量别使用这些端口!
3. IP地址和端口号组成了咱们的Socket,Socket是网络运行程序间双向通讯链路的终结点, 是TCP和UDP的基础!
4. 经常使用协议使用的端口:HTTP:80,FTP:21,TELNET:23
TCP协议流程详解:
首先TCP/IP是一个协议簇,里面包括不少协议的。UDP只是其中的一个。之因此命名为TCP/IP协议, 由于TCP,IP协议是两个很重要的协议,就用他两命名了。
下面咱们来说解TCP协议和UDP协议的区别:
TCP(Transmission Control Protocol,传输控制协议)是面向链接的协议,即在收发数据钱 ,都须要与对面创建可靠的连接,这也是面试常常会问到的TCP的三次握手以及TCP的四次挥手! 三次握手: 创建一个TCP链接时,须要客户端和服务端总共发送3个包以确认链接的创建, 在Socket编程中,这一过程由客户端执行connect来触发,具体流程图以下:
第一次握手: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来触发,具体流程图以下:
第一次挥手: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状态,完成四次挥手。 另外也多是同事发起主动关闭的状况:
另外还可能有一个常见的问题就是:为何创建链接是三次握手,而关闭链接倒是四次挥手呢? 答:由于服务端在LISTEN状态下,收到创建链接请求的SYN报文后,把ACK和SYN放在一个报文里 发送给客户端。而关闭链接时,当收到对方的FIN报文时,仅仅表示对方再也不发送数据了可是还 能接收数据,己方也未必所有数据都发送给对方了,因此己方能够当即close,也能够发送一些 数据给对方后,再发送FIN报文给对方来表示赞成如今关闭链接,所以,己方ACK和FIN通常都会 分开发送。
UDP协议详解:
UDP(User Datagram Protocol)用户数据报协议,非链接的协议,传输数据以前源端和终端不 创建链接,当它想传送时就简单地去抓取来自应用程序的数据,并尽量快地把它扔到网络上。 在发送端,UDP传送数据的速度仅仅是受应用程序生成数据的速度、计算机的能力和传输带宽 的限制;在接收端,UDP把每一个消息段放在队列中,应用程序每次从队列中读一个消息段。 相比TCP就是无需创建连接,结构简单,没法保证正确性,容易丢包
——上述内容部分摘自:
针对不一样的网络通讯层次,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); }}
运行结果图:
~URL:这个就不用说了吧,忘了能够看会前面Http协议讲解那里~
本节全是概念,看起来可可以呛的是把,不过看不懂也不要紧,知道七层模型每层叫 什么,大概拿来干吗,还有TCP三次握手和四次挥手,就能够了!固然,这只是为了 应付面试~实际开发咱们哪会纠结这个...直接Socket是吧~嗯