Java学习里程-----Java基础_27 Socket(上)

一、认识Socket

我们先来认识一下Socket这个东西,直接上百度百科,权威的解释 《百度百科 - Socket》

Java学习里程-----Java基础_27 Socket(上)_第1张图片

我推荐大家好好读一读,有一些专业的名词的含义我就不多说了,是因为解释不明白,大家万一有了误解就不好了。

通过读这个百度百科,我们可以知道,这个Socket就是两个对象进行通讯时候所用到的东西,他们呢通过网络的IP地址和端口进行组合,这样就能指定通讯。当然,其中还有协议。

二、OSI

我们看完这个Socket之后,我们再来认识一下OSI,百度百科地址:《百度百科 - OSI》

Java学习里程-----Java基础_27 Socket(上)_第2张图片

OSI被称为开放式系统互联,我们平时上网啊,聊QQ啥的,都是通过网络进行传输的,而这个OSI就是对我们这个网络通讯的工作进行细分,大致分为七层。

Java学习里程-----Java基础_27 Socket(上)_第3张图片

这里呢,我就不去一个一个介绍了,而且也介绍不明白,大家直接看百度百科就OK了,这个是属于基本知识,大家必须要知道网络传输的这七个层次。

我们呢,主要是看的第四层,传输层。

我们平时都会浏览一些网页啊,登录一下QQ、微信啥的和别人聊聊天。就拿聊天来说,好比说我现在给我爸妈发送一条信息“我爱你们,你们辛苦了”,这句话。然后呢,这句话会被封装成数据包传输到我爸妈手机上去,他们的APP拿到数据,进行解析,然后显示出来,他们就能看到这句话了。

在这个过程中,就有一个数据包的概念,我们来研究一下数据包这个东西,看看里面放了啥。

三、数据包

同样,我们百度百科,来看一下数据包的定义,连接:《百度百科 - 数据包》

Java学习里程-----Java基础_27 Socket(上)_第4张图片

这里同样,也需要大家好好去读读,一定要读!!!

我们再来看上面的这个例子,当你点击发送的时候,我们的手机拿到这些个数据,将数据弄成数据包,然后发送到对方手机所在的地址,然后我们来看一下这个数据包是放了啥,如下图

Java学习里程-----Java基础_27 Socket(上)_第5张图片

大概就这么个样,大家将就的看一下吧。

上面的框子就好比是一个数据包,这个数据包中有包头,有包尾,当然,里面放了啥我就不说了,有兴趣可以自己去查看。然后我们来看中间的这个数据,也就是下面的内个红框子,数据中里面也放了很多东西,其中就有一个协议,还有一个就是具体的数据,就是我们要发的内句话。

然后我们来说一下这个协议

四、协议

这个协议有很多种,其中就有大名鼎鼎的TCP协议,和UDP协议,我们呢来说一下这两个协议。

TCP:

老样子,先百度百科一下,地址:《百度百科 - TCP》

Java学习里程-----Java基础_27 Socket(上)_第6张图片

我们可以从百度百科的介绍中获取到一些信息,这是一个面向连接的、可靠的,基于字节流的传输层的通信协议。

这也就是说,我们发啥,对方就能收到啥。

UDP:

同样,百度百科,地址:《百度百科 - UDP》

Java学习里程-----Java基础_27 Socket(上)_第7张图片

我们主要看这个特点,无连接,不可靠,快速传输。

这也就是说,和上面的TCP协议进行比较,这个UDP不咋地啊。其实并不是,我们再往下翻一翻,找到这个UDP的主要应用

Java学习里程-----Java基础_27 Socket(上)_第8张图片

这个协议,一般都是来传输视频,音频这些东西,即使丢上一两个包也不会对结果集产生啥影响,比如说我们的QQ,就是用的UDP协议。

总结,我们看TCP的百度百科最底下的地方

Java学习里程-----Java基础_27 Socket(上)_第9张图片

这俩各有各的优点、缺点,我们平时要是传输一些文字啊,图片啥的,都要去使用TCP协议,这样的话能够保证这个准确性,不能说我们传输“我爱你”这三个字给女神,到时候传过去就剩下了个我了,这样就不对了。

知道了这两种协议之后,我们就可以继续往下研究了,我们主要说的是TCP协议。

五、TCP的三次握手

说到TCP连接,这里还得说一个事情,就是TCP连接的时候,会有请求,它得知道这个要请求的主机在不在线。我们就来说一下这个怎么连接。

还用我们的这个发送信息例子说,我们现在点击了发送之后,我们来看一下这个信息是怎么传递的

1. 建立连接的时候,我们会发送一个包到这个对方的主机,然后我们开始等待对方主机进行确认。

2. 对方服务器主机接收到这个包,它知道了是有个人想要和他建立连接,然后它会回复一个包给我们,告诉我们可以连接了。

3. 服务器发包之后,我们就会收到它发的包,我们一看,诶,可以连接,然后我们再弄一个包回复给主机,这个包发送完成之后,我们呢就和这个服务器连接成功了

然后,这个操作就被称为三次握手。

扩展:

除去这个三次握手以外啊,还有四次挥手。我们再来看看这四次挥手是怎么挥的。

我们三次挥手完成之后,开始了数据传输,好比现在传输完成了,那我们就得进行关闭这个链接了,不能说一直开着占资源。我们来说一下怎么进行关闭的
1. 首先是我们来进行发送的,我们发送一个信息给主机服务器。信息内容就是我这里传送完成了, 可以进行关闭连接释放资源了。(第一次挥手)

2. 主机服务器拿到这个信息之后,开始进行处理,一看,诶,发现这个对方给我传输数据传完了,可以进行关闭连接了。然后主机服务器就会弄一个信息发送给我们(第二次挥手),让我们来确认是否要关闭连接。而主机服务器会进入一个半关闭状态。

3. 我们拿到这个确认之后,就会进入一个等待状态。这时候服务器主机还在半关闭状态。(服务器主机在这个半关闭状态还有可能在接收,或者传授数据的哦),等待所有的数据真的没有什么要传输的了,然后服务器主机会继续向我们发送一个包(第三次挥手),内容类似上面的内个包,就是要关闭连接了,让我们来确认。

4. 客户端再一次收到请求之后,会回复一个包给这个主机服务器(第四次挥手),告诉它,可以关闭了。服务器拿到包之后,就关闭TCP连接,紧接着我们也关闭连接(这时候我们就不需要服务器在给我们回复了,原因是,在服务器主机给我们发送的第二个包的里面,还有一个时间,我们需要等到这个时间之后才会关闭,而服务器主机是拿到客户端给他的确认请求之后,直接关闭。)

 

以上就是我们本节的内容,可能有点多,但是大家要都耐心的去看。

 

Java学习里程-----Java基础_27 Socket(上)_第10张图片

ps:上方二维码是我个人的公众号,最近刚开不久,我每个月都会更新一些活动,希望大家可以积极参加,活动详情可以关注公众号之后,回复“活动”二字进行查看,参加。

你可能感兴趣的:(Java_基础,Socket,三次握手,四次挥手,TCP与UDP协议)