Socket基础

TCP与Socket

       TCP:是一种面向连接的,可靠的,基于字节流的的传输层通信协议。

       Socket:也称为“套接字”,它是应用程序通过网络发送请求和接受应答的接口。

 

OSI七层模型和TCP/IP四层模型

OSI七层模型

TCP/IP四层模型

对应的网络协议或应用

应用层

应用层

HTTP,TFTP,FTP,NFS,WAIS

表示层

Telnet,SNMP,Gopher

会话层

SMTP,DNS

传输层

传输层

TCP,UDP

网络层

网际层

IP,ICMP,ARP,RARP,AKP,UUCP

数据链路层

网络接口层

FDDI,Ethernet,ARPANET,PDN,SLIP,PPP

物理层

IEEE 802.1~ IEEE 802.11

 

TCP通信过程

       1.TCP建立连接过程,俗称三次握手:

(1)     客户端先向服务端发送SYN包(Socket状态从CLOESD变为SYN-SEND)。

(2)     服务端收到此SYN包后 (Socket状态从LISTEN变为SYN-RECV),并且向客户端发送针对次SYN包的SYN/ACK包,以确认收到这个SYN包

(3)     客户端收到此SYN/ACK包后(Socket状态从SYN-SEND变为ESTABLISED),再向服务端发送针对此SYN/ACK包的ACK包

(4)     服务端收到ACK包后(Socket状态从SYN-RECV变为ESTABLISED),连接建立成功,双方可以开始手法数据。

 

2.TCP半连接:指TCP建立连接过程中,没有完全建立的连接被称为“半连接”;

 

3.全双工异步通信:

       (1) TCP和UDP都是全双工协议。全双工指建立连接后,数据的发送和接受能同时进行。

       (2) 全双工的不足:如果数据的发送和接受都由一个线程来完成,那么发送数据时则无法接收数据,接收数据时,无法发送数据

       (3) 优化全双工不足的方案:数据的的发送单独一个线程处理,数据的接收单独一个线程处理,这样数据的发送和接收就能互不影响。该模型也成为全双工异步通信模型。

       (4)全双工异步通信模型的关键:需要将请求和响应一一对应上,通常的做法是将请求和响应编号。比如请求线程编号为1.0.0,该请求的响应编号为1.0.1,那么接收线程在接受到1.0.1编号的响应,就能找到是求线程编号为1.0.0的响应。

 

4.断开连接

      

       TCP断开连接的过程,俗称四次挥手:

(1)     客户端向服务端发送FIN包,表示想断开连接。Socket状态从ESTABLISED状态变为FIN_WAIT_1。

(2)     服务端收到此FIN包后,向客户端发送ACK包,表示准备断开中(需要检查是否可以断开)。Socket状态从ESTABLISED状态变为CLOSED_WAIT。

(3)     客户端收到ACK包后,Socket状态从FIN_WAIT_1状态变为FIN_WAIT_2,等待服务端发送断开连接的数据包。

(4)     服务端在准备完毕后向客户端发送FIN包,确认可以断开连接,Socket状态从CLOSED_WAIT状态变为LAST_ACK,等待客户端确认。

(5)     客户端收到服务端的FIN包后,向服务端发送ACK包,确认可以断开连接。Socket状态从FIN_WAIT_2状态变为TIME_WAIT。

(6)     服务端收到客户端的ACK包后,断开连接,关闭套接字,Socket状态变为CLOSED。

(7)     客户端等到一段时间后,才真正关闭连接,Socket状态从TIME_WAIT状态变为CLOSED。

步骤(5)有可能因为网络问题,导致客户端发送的ACK包丢失,从而导致服务端将重发FIN包,如果客户端在发送ACK包后,马上关闭连接,导致将收不到服务端重发的包,所以客户端需要等待状态。

 

5.半开连接

TCP连接的一端异常奔溃,例如断电等,导致没有通知对方就关闭连接,该情况数据不能正常收发,但是另一端会一直处于ESTABLISED状态,Socket不能及时释放,浪费对端可用的文件描述符资源。

      

6.半连接

处于三次握手过程中,没有完全建立好的连接被称为半连接。

posted @ 2019-11-26 16:11  欧E  阅读(153)  评论(0编辑  收藏  举报