java 基础 --了解TCP/IP 协议
前言:
互联网采用TCP/IP协议。
TCP/IP是一种网际互联通信协议,它包括两个核心协议TCP和IP。
TCP称为传输控制协议。
IP称为互联网络协议。
一定要明白TCP/IP是架构,网络之间,一台机器访问另一台需要传输是通过ip来拆分数据包,发送给另外一台ip地址的机器,通过路由来从一台机器到另外一台机器,你可以理解为中转站。
TCP也好upd也好,都是规范发送和协议安全的保障,你可以理解为IP为飞鸽传送,路由是驿站,而飞鸽的安全,丢失等管理员做的保障为tcp,比如tcp会有延时机制,和重发机制,定时器任务。来保证执行。
概念
TCP/IP模型有四层(应用层、传输层、网际层、网络接口层),
每层分别具有不同的协议和功能,TCP/IP协议族是一组在不同层上的多个协议的组合。各层在实现自身的功能时,使用它的直接下层提供的服务,同时也为它的直接上层提供服务。下面说明这些协议进行协调工作的基本原理。
TCP/IP协议族中各协议之间的关系
TCP/IP协议族中有很多协议,这些协议处于不同的层,它们之间的关系如下图所示。
每个应用层协议都是为了解决某一类应用问题而定义的。
各种应用进程就是通过不同的应用层协议来使用网络所提供的服务。
应用进程代表实现不同应用层协议功能的进程。例如,实现文件传输协议的FTP应用进程可以为用户提供计算机之间的文件传输服务,实现超文本传输协议的HTTP应用进程可以为用户提供浏览Web网页的功能等。
TCP和UDP区别
TCP和UDP是两个传输层协议。一般地,应用进程可以选择使用TCP或者UDP协议。如果应用层协议要求传输层提供可靠的服务,则应该选择TCP协议;否则,如果应用层协议要求较高的数据传输速率,但是可以容忍一定的数据丢失,则可以选择UDP协议。TCP协议的数据单元称为TCP报文段或简称TCP段(TCPsegment),UDP协议的数据单元称为UDP数据报(UDPdatagram)。
TCP是面向连接的,是字节流,UDP是不面向连接的,是数据流。
在选择TCP还是UDP之间需要根据业务场景,如果是单对单的话,建议使用TCP毕竟保证稳定安全,瑕疵就是有定时任务,和延迟加载机制,同事需要三次握手,确定序列码传输。
但是如果是直播,或者是一对多的情况下,可以考虑udp封装,udp是广播模式,不存在建立连接,所以可能会有丢包的存在。但是速度贼快
IP协议
IP协议是网际层上的一个主要协议。TCP和UDP协议都可以直接使用IP协议所提供的服务。IP协议的数据传送单位称为IP数据报或IP分组。TCP报文段或UDP数据报都可以封装在IP数据报中,以便在互联网上传输。除IP协议外,网际层还有其他协议,例如ICMP协议用于报告差错和其他重要信息;IGMP是多播组管理协议,是一个与多播有关的协议;ARP(地址解析协议)和RARP(逆向地址解析协议)用于提供ⅡP地址与物理地址的映射功能。
IP数据报可以在不同的物理网络上进行传送。通过以太网传送的数据单元称为以太网帧,或简称为帧(frame)。
封装和拆封
在发送方(也称为源主机),当应用程序使用TCP或UDP传送用户数据时,将用户数据送人TCP/IP协议栈,然后自上而下地逐个通过每一层,直到被当做一串比特流送入网络。其中每一层对收到的数据都需要增加一些首部信息,有时还需要增加尾部信息。这些操作过程称为封装,如图所示。
TCP、UDP、ICMP和IGMP等协议都要使用IP数据报传送数据,所以必须在IP数据报的首部加入某种标识,以说明是哪个协议的数据封装到了IP数据报中。IP数据报首部定义的一个8位的“协议”宇段就是为此目的而设置的。协议宇段的值为1表示ICMP,为2表示IGMP,为6表示TCP,为17表示UDP。
类似地,许多应用进程使用TCP或UDP传送数据,则需要在TCP段或UDP数据报首部定义一个应用程序标识符。TCP和UDP都使用一个16位的端口号来标识不同的应用程序,TCP和UDP把“源端口号”和“目的端口号”分别存人TCP段首部和UDP数据报首部。网络接口分别发送和接收IP、ARP、RARP的数据,同理,也必须在以太网(假定物理网络是一个以太网)的首部加入一个字段,用来说明是哪个协议的数据。为此,以太网帧首部定义了一个16位的“类型”字段。当接收方(也称目的主机)收到一个以太网帧时,数据就开始在协议栈中自下而上传送。各层协议利用报文首部所携带的协议控制信息做相应的处理,然后去掉各层协议数据单元的首部,将封装的数据交给上层协议。每层协议都要检查协议首部中的协议标识,以确定让哪一个协议接收数据,这个过程称为拆封。下图说明了以太网数据帧的拆封过程。
发送数据时需要自上而下,层层封装。接收数据时需要自下而上,层层拆封。
TCP/IP通信
两个端系统的通信会涉及不同层的协议。如下图所示,主机A和主机B在同一个局域网(以太网)上,两台主机都运行实现FTP协议的应用进程,它们的通信过程所涉及到的主要协议都标识在下图中。
主机A主机B大多数网络应用程序都设计成客户—服务器方式,客户是服务请求方,服务器是服务提供方,服务器为客户提供某种服务。例如,FTP服务器允许客户访问FTP服务器所在主机上的文件,WWW服务器允许客户(浏览器)访问WWW服务器所在主机上的网页
在两个端系统的同一层上,双方都有对应的一个或多个协议进行通信。例如传输层利用TCP或UDP等进行通信,网际层利用IP进行通信。
上图局域网上运行FTP的两台主机从前面的讲述可知,应用进程的数据要经过主机A(源主机)自上而下的封装,然后在网络中传输,最后在主机B(目的主机)经过自下而上的拆封这样复杂的处理过程,才能到达目的主机的应用进程。但是,对用户来说,这些复杂的处理过程都屏蔽掉了,好像是主机A的应用进程直接把数据交给了主机B的应用进程。同理,我们可以认为,任何两个对等层(peerlayer),例如传输层、网际层、网络接口层之间的通信,如同上图中标识的一样,好像是将数据通过水平虚线直接传递给对方,这就是所谓的对等层之间的通信。实际上,协议就是在两个对等层之间传递数据时的各种规定。由此可以这样认为:实际通信是按垂直方向进行的,层与层之间经过封装和拆封这样的操作实现物理通信。但是逻辑上,却是在水平方向上利用协议进行的对等层通信。在协议的控制下,对等层的通信使得本层能够向上层提供服务。为了实现本层协议,还需要使用下面一层所提供的服务。如果两个端系统不在同一个网络上,例如它们分别是在路由器连接起来的两个不同的网络上,主机A在以太网上,主机B在令牌环网上,通过一个路由器使这两个网络连接起来。以太网上的任何主机都可以与令牌环网上的任何主机进行通信,如下图所示。
关于TCP/IP三次握手
最后说一说Tcp/IP三次握手。
TCP/IP为无状态协议,可能会出现丢包,补发,乱序等情况。所谓的三次握手。
两台主机建立连接,通过TCP/IP,协议要求发送一条数据,数据被拆分为多个小单元包。并通过路由发送到B,
第一次握手,A-B发送单元包, B确认收到信息,表示A连接B正常。
第二次握手,B发送反馈,发送反馈。
第三次握手,A收到反馈,但是B不知道自己是否连接正常,A再反馈一份文件,表示A收到文件,B连接A正常;
由于是无状态协议,通过路由转发。存在的丢包等情况,会在限制时间内,等待,超过时间,便进行补发;