使用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 的目的在于指出此时接收端期望接收的下一个数据包中第一个字节的序列号。

客户端发送协议包给服务器,TCP协议的客户端与服务器的通信过程相关推荐

  1. Wireshark数据包分析之TCP协议包解读

    *此篇博客仅作为个人笔记和学习参考 三次握手建立连接(SYN标志) 客户端发送链接请求,此时处于等待确认状态;服务端收到请求,回应确认请求;最后客户端确认;建立完毕,开始传输数据! 四次握手断开连接( ...

  2. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  3. tcp协议通过什么来区分不同服务器,tcp协议通过什么来区分不同的连接

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. tcp协议通过IP地址+端口号来区分不同的连接,TCP/IP是一个协议集,为应用提供一些"低级"功能,这些包括 ...

  4. 深入浅出TCP协议,为什么需要TCP协议?

    前面我们介绍了网络层的IP协议.ICMP协议.ARP协议,后续给大家介绍下传输层的TCP和UDP协议.今天先讲讲TCP协议. 本篇文章概要: 正文 我们知道TCP是传输层协议,用于为应用层提供服务,通 ...

  5. QQ使用了什么通讯协议?为什么要这样做?为什么采用 UDP 协议,而不采用 TCP 协议实现?

    登陆采用TCP协议和HTTP协议,你和好友之间发送消息,主要采用UDP协议,内网传文件采用了P2P技术. QQ对于普通用户是采用UDP协议,对于会员用TCP协议 总来的说: 1.登陆过程,客户端cli ...

  6. python tcp协议_python 网络编程 -- Tcp协议

    Socket是网络编程的一个抽象概念.通常我们用一个Socket表示"打开了一个网络链接",而打开一个Socket需要知道目标计算机的IP地址和端口号,再指定协议类型即可. 客户端 ...

  7. 服务器怎么向指定客户端发送信息,WebSocket 如何实现服务端向客户端发送消息?...

    我们都知道, Websocket 是一个双向的通讯方式,一般情况下,我们都是根据 Client 的情况返回信息,但是在一个更加健壮的系统,我们可能需要主动的向客户端发送消息.我试图在中文网络去搜索,查 ...

  8. socket bufferedinputstream通信读取不到服务器返回的响应_TCP角度看socket通信过程,socket怎么表示三次握手,四次挥手...

    什么是套接字? socket 的中文翻译过来就是"套接字".套接字是什么,它的英文含义:插座. Socket 就像一个电话插座,负责连通两端的电话,进行点对点通信,让电话可以进行通 ...

  9. 易语言tcp多线程服务端客户端_太详细了,TCP协议面试灵魂10问,建议收藏!

    推荐阅读: 阿里P9架构师120分钟带你掌握线程池,不在为线程而烦恼​www.bilibili.com 不懂算法怎么去字节等大厂面试?左程云大神联合马士兵大佬120分钟带你掌握算法底层​www.bil ...

最新文章

  1. 科技部部长:基础研究是科技创新“总开关”
  2. Shell合并两个文件成一个文件的两列paste,awk
  3. 关于windows service不能访问网络共享盘(NetWork Drive)的解决方案
  4. Ptyhon学习之元组
  5. perl基本语法--转载
  6. JESD204B的AXI4-Lite时序分析(对比SRIO的AXI4-Lite时序分析)
  7. 【直播预告】创享未来 2016微软开发者峰会
  8. 面试 | 你说你熟悉MySql,那你就来谈谈InnoDB如何解决幻读的?
  9. illustrator插件开发指南pdf_Jenkins之pipeline开发工具
  10. python安装(不影响系统自带python)
  11. commons-pool.jar 和commons-dbcp.jar 下载地址
  12. 骑士cms(74cms)个人版 整合UC
  13. 目前国内的跨境收款通道有哪些还不错的?
  14. Linux下根据关键字搜索最后一条日志
  15. 【华人学者风采】徐泽水 四川大学
  16. 【直播教程】直播间没人看?5大技巧教你提升!
  17. 海报与Banner的区别
  18. 什么是固定资产管理系统?固定资产管理小程序有哪些功能?
  19. 【Babylon小技巧04】进阶双开门事件绑定同时触发
  20. Java 在PPT中添加文本水印的简易方法(单一/平铺水印)

热门文章

  1. 人体红外感应-热释电传感器HC-SR501
  2. 集团大公司企业邮箱、企业邮箱有哪些功能最好?服务哪家好?
  3. 寻找动物影子:测试你的潜藏“兽性”是怎样的(图)
  4. 5种做法实现table表格中的斜线表头效果
  5. electron与koa应用
  6. 好用到爆的Python自动化办公教程,Python × Excel × Word × PPT 一次解决
  7. load、initialize
  8. vue仿移动端音乐播放器
  9. 平台资金提现解决方案之实现支付宝单笔转账到银行卡功能
  10. 程序员过中秋的方式是怎样的(附~教你用22种语言写中秋祝福语~ )