您好,欢迎来到微智科技网。
搜索
您的当前位置:首页TCP协议的客户端与服务器的通信过程

TCP协议的客户端与服务器的通信过程

来源:微智科技网
TCP协议的客户端与服务器的通信过程

使⽤TCP时,客户端与服务器端的通信流程

服务器初始化

1)调⽤socket,创建⽂件描述符fd

2) 调⽤bind将fd与服务器的IP与PORT绑定

3)调⽤listen将套接字设为监听模式,准备接收客户端连接请求

4)调⽤accept等待并接收客户端的连接请求,建⽴好TCP连接后,该函数会返回⼀个新的已连接套接字newfd建⽴连接

1)客户端调⽤socket创建⽂件描述符2)调⽤connect,向服务器发送连接请求

3)connect会发送⼀个请求SYN段并阻塞等待服务器应答(第⼀次握⼿)

4)服务器收到SYN,会给客户端发送⼀个确认应答ACK,同时发送⼀个请求(SYN)建⽴连接(第⼆次握⼿)5)客户端收到服务器发的SYN+ACK段,表明客户端连接已建⽴成功,进⼊已连接状态。客户端再向服务器发送⼀个ACK段,服务器收到后则服务器连接成功。

数据传输

1)连接建⽴成功后,在同⼀连接、同⼀时刻,通信双⽅可同时写数据(全双⼯) 2)服务器端从accept()返回后调⽤read()开始读数据,若没有数据则阻塞等待

3)客户端调⽤write()向服务器发送数据请求,客户端收到之后调⽤read()处理请求,此过程服务器调⽤read()阻塞等待 4)服务器调⽤write()将处理好的请求发送给客户端,再次调⽤read()等待下⼀个请求 5)客户端收到后从read()返回,发送下⼀条请求,如此循环下去

断开连接

1)没有数据处理了,则客户端调⽤close()关闭连接,给服务器发送⼀个断开连接请求FIN段(第⼀次握⼿)2)服务器收到客户端的FIN段,给客户端发送⼀个确认应答ACK段,表明同⼀断开连接。客户端收到ACK段并调⽤read()返回0,表明客户端连接已经断开(第⼆次握⼿)

3)read()返回0后,服务器知道客户端已经断开连接,它也调⽤close()关闭连接,给客户端发送⼀个断开连接请求FIN段(第三次握⼿)

4) 客户端收到服务器发送的FIN段,就给服务器⼀个确认应答ACK段,表明同意断开连接。客户端进⼊TIME_WAIT状态,服务器收到客户端的ACK段后也断开连接。参考:

TCP协议如何保证可靠性

校验和序列号确认应答超时重传连接管理流量控制拥塞控制 详见:

原理主要有:数据超时重传和数据应答机制。TCP会对每个传输的字节进⾏编号,即序列号。

数据超时重传是发送端在某个数据包发送出去,在⼀段固定时间后如果没有收到对该数据包的确认应答,则(假定该数据包在传输过程中丢失)重新发送该数据包。

数据确认应答是指接收端在成功接收到⼀个有效数据包后,发送⼀个确认应答数据包给发送端主机,该确认应答数据包中所包含的应答序列号即指已接收到的数据中最后⼀个字节的序列号加1,加1 的⽬的在于指出此时接收端期望接收的下⼀个数据包中第⼀个字节的序列号。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 7swz.com 版权所有 赣ICP备2024042798号-8

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务