美文网首页
TCP及Socket

TCP及Socket

作者: 小河里水 | 来源:发表于2020-02-22 19:14 被阅读0次

    计算机网络相关的问题,如果想去了解,前提就是深刻理解网络4/7层模型。

    记住并理解,上面每一层。切记,切记,切记。知道一些就可以开始主题,分两个部分TCP和Socket。

    TCP简介

    TCP是(Tranfer Control Protocol)的简称,在OSI参考模型第四层,也就是端口,到端口的的通信,它是一个可靠的双向连接,一旦建立连接就可以双向数据传输,双方都可以进行发送或接收操作。

    TCP-建立连接

    最常听说的就是三次握手。是的它说的就是TCP建立连接的过程。具体的步骤如下:

    第一步:Server监听端口,状态为:Listen 

    第二部:Client发送SNY包,请求连接,并将状态改为:SYN_SEND

    第三部:Server发送ACK包,和SNY包,同意,并请求连接,状态改为:SYN_RCVD

    第四部:Client发送ACK包,Server收到包后,连接建立。双方状态改为:ESTABLISHED

    TCP-四次挥手断连

    第一步:Client发起FIN包。状态变为:FNI_WAIT_1

    第二步:Server发送ACK包。状态变为:CLOSE_WAIT,Client收包后状态变为:FNI_WAIT_2

    第三步:Server发送FIN包,状态变为:LAST_ACK。Client收包后状态变为:TIME_WAIT

    第四步:Client发送ACK包。双方状态变为:CLOSED 

    需要注意的是,Client是在收到Server FIN包后两个最大报文时间(2MSL)后变为CLOSED状态的。双方都可以发起断开请求,上面是已先发起请求的是Client。

    wireshark抓包分析

    如何验证上面讲的这些呢?那就是抓包分析,其实日常的开发中也可以通过抓包来发现问题。在这里我简单贴个图看一下TCP的包,这个工具非常强大感兴趣的朋友可以去深入了解一下。

    wireshark截图

    1.可以在这个过滤,通过协议,通过IP,通过端口都可以。

    2.这个就是每个包,例子中的这个是个[SYN,ACK]包,就是建立TCP连接的第二次握手

    3.被抓取的包对应的网络层,从上到下分别是:物理层、数据链路层、网络层、传输层。

    Java-Socket

    Socket其实就是TCP协议的实现。也就是说它就是TCP的API,当然其实Socket也支持别的协议如:UDP。既然是API那,上面说的其实就是它的原理。下面说一下它的使用。大概说一下。

    1.ServerSocket:是服务端来监听的类。监听方法accept()。

    2.客户端:创建Socket对象,设定IP和Port

    3.当有新的客户端连接时可以通过ServerSocket类获取Socket。而Socket就是我们的通讯渠道。

    4.发送和读取数据分别使用OutputStream和InputStream而这两个类是从Socket获取的。

    服务端 客户端

    其实Socket的基本使用就是这么简单,但是在其实项目中这样是无法满足需求的。实际上大多数场景都是需要一对多的提供服务。

    使用多线程实现多客户端的通信

    实现服务器与多个客户端进行通信, 可以接受多个客户端的请求并进行回复

    应用多线程来实现服务器与多客户端之间的通信

    1、服务器端创建ServerSocket,循环调用accept()等待客户端连接

    2、客户端创建一个Socket并请求和服务器端连接

    3、服务器端接受客户端请求,创建socket与该客户建立专线连接

    4、建立连接的两个socket在一个单独的线程上对话

    5、服务器端继续等待新的连接

    使用多线程 实现

    相关文章

      网友评论

          本文标题:TCP及Socket

          本文链接:https://www.haomeiwen.com/subject/mpvlqhtx.html