TCP和Socket基础

2020-05-27  本文已影响0人  ElliotG

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次握手过程如下:

 

3. 断开连接和优雅断开

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

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

 

4. 长连接与短连接

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

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

什么是长连接?

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

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

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

 

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

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

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

1. 创建连接(Channel)

2. 发心跳包

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

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

上一篇下一篇

猜你喜欢

热点阅读