美文网首页
TCP和Socket基础

TCP和Socket基础

作者: ElliotG | 来源:发表于2020-05-27 20:31 被阅读0次

0. TCP和Socket的定义

什么是TCP?
Transmission Control Protocol - 传输控制协议,是一种面向连接的,可靠的,基于字节流的传输层通信协议。
这里需要记住的是:TCP是传输层的,它是一种通信协议。

TCP和UDP一样,同属于OSI七层网络模型的第四层,即传输层。

OSI网络模型:

应用层 - 【HTTP, FTP, NFS ...】
表示层 - 【Telnet,SNMP,Gopher】
会话层 - 【SMTP,DNS】
传输层 - 【TCP,UDP】
网络层 - 【IP,ICMP,ARP ...】
数据链路层 - 【Ethernet,ARPANET ...】
物理层 - 【IEEE 802.1 - 802.11】

什么是Socket?
Socket即套接字。
它是应用程序通过网络发送请求和接受应答的接口

 

1. TCP的通信过程

TCP的通信过程和打电话基本相同。
一方负责接听某个特定号码的电话;另一方则需要拨通这个号码,即与对方建立通信连接。

在这个过程中,

听筒即Socket输入流,它负责接收对方的信息。

话筒即Socket输出流,它负责向对方发送信息。

整个通信的过程中,信息的接收和发送是同时进行的,即双工通信。

TCP通信过程

 

2. 建立连接的3次握手

TCP建立连接需要3次握手。

它和如下的打电话场景类似:
A: 喂,你好,听得到吗?
B: 喂, 你好,听得到。你听得到我说话吗?
A: 嗯,听得到。

TCP的3次握手过程如下:

  • 客户端先向服务端发送SYN包,Socket状态从CLOSED变为SYN-SEND。
  • 服务端接收到SYN包后,Socket状态从LISTEN变为SYN_RECV,同时向客户端发送SYN/ACK包来确认收到了刚才的SYN包。
  • 客户端收到了SYN/ACK包后,将Socket状态从SYN-SEND变为ESTABLISHED,再向服务端发送ACK包。
  • 服务端手动ACK包以后,Socket状态从SYN-RECV改为ESTABLISHED,连接建立成功,双方可以开始收发数据。

 

3. 断开连接和优雅断开

有建立连接必然就有断开连接。
断开连接和建立连接一样非常重要,如果处理不当,不仅可能造成数据传输失败,还可能导致Socket不能关闭,资源无法释放等问题。

优雅断开是指,一方在传输完成后,通知对方,自己的传输已经完成,不会再发起新的传输,但仍然接收对方发来的数据,直到对方也通知自己,传输已完成,不会再发送新的传输,这时候连接主动断开。

 

4. 长连接与短连接

什么是短连接?
每次传输前建立连接,传输完成后关闭连接,这种方式被称为短连接。

注:HTTP 1.x协议就是基于TCP短连接的超文本传输协议。

什么是长连接?

在客户端和服务端之间建立一个长期的连接,在其上进行多次通信,直到双方不再需要通信,或其中一方退出时才断开连接,这种方式称为长连接。

注: FTP协议就是基于TCP长连接的文件传输协议。

在客户端需要频繁地与服务端通信的场景下,我们需要使用长连接。

 

5. 常见的实现长连接的机制

使用Netty可以实现长连接。
(注: 关于Netty请查看另外的单独专题)

Netty创建长连接的基本步骤如下:

1. 创建连接(Channel)

2. 发心跳包

3. 发消息,并通知其他用户

4. 一段时间没收到心跳包或者用户主动关闭之后关闭连接

相关文章

  • TCP和Socket基础

    0. TCP和Socket的定义 什么是TCP?Transmission Control Protocol - 传...

  • 网络与TCP

    目录 1.socket服务端 2.socket客户端 3.TCP基础版 4.TCP循环版 5.TCP异常处理 6....

  • socket编程

    一切皆socket!本文介绍socket基础,socket的基本操作,并对socket中的TCP过程说明,还有一个...

  • Socket

    Socket socket是什么 socket是什么?socket在哪?先了解TCP/IP协议 TCP/IP:传输...

  • TCP socket 编程

    TCP socket 编程 讲一下 socket 编程 步骤 使用 socket 模块 建立 TCP socket...

  • Kotlin网络编程(3)TCP Socket 低层次网络编程

    TCP Socket 通信概念TCP Socket 通信过程Socket 类ServerSocket 类案例:文件...

  • iOS之socket开发须知

    iOS的socket开发基础 首先让我们通过一张图知道socket在哪里? Socket是应用层与TCP/IP协议...

  • HTTP&HTTPS

    Socket开发基础Socket注意事项http基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查...

  • Socket详解

    前面两篇分析了TCP和UDP协议,本篇来分析一下Socket,有了前面的基础,对理解Socket有很大的帮助,同时...

  • SOCKET,TCP/UDP,HTTP,FTP

    转。。。。。。。。 SOCKET,TCP/UDP,HTTP,FTP (一)TCP/UDP,SOCKET,HTTP,...

网友评论

      本文标题:TCP和Socket基础

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