网络编程:基于TCP/UDP实现客户端和服务端通信(C语言实现简单易懂)

wx:嵌入式工程师成长日记

https://mp.weixin.qq.com/s/_eqFaiID2kzFuk3zejFptg?token=382885458&lang=zh_CNicon-default.png?t=O83Ahttps://mp.weixin.qq.com/s/_eqFaiID2kzFuk3zejFptg?token=382885458&lang=zh_CN

ddd39e6b19e14e33897aa6213919c759.png

TCP是一个面向连接的,安全的,流式传输协议,这个协议是一个传输层协议。

①面向连接:是一个双向连接,通过三次握手完成,断开连接需要通过四次挥手完成。

②安全:TCP通信过程中,会对发送的每一数据包都会进行校验, 如果发现数据丢失, 会自动重传。

③流式传输:发送端和接收端处理数据的速度,数据的量都可以不一致。

(一)TCP三次握手&四次挥手

三次握手具体过程如下:

图片

   第一次握手:客户端给服务端发一个 SYN 报文,并指明客户端的初始化序列号 ISN。此时客户端处于SYN_SENT 状态。首部的同步位SYN=1,初始序号seq=x,SYN=1的报文段不能携带数据,但要消耗掉一个序号。

    第二次握手:服务器收到客户端的 SYN 报文之后,会以自己的 SYN 报文作为应答,并且也是指定了自己的初始化序列号ISN(s)。同时会把客户端的 ISN + 1 作为ACK 的值,表示自己已经收到了客户端的 SYN,此时服务器处于 SYN_RCVD 的状态。在确认报文段中SYN=1,ACK=1,确认号ack=x+1,初始序号seq=y。

   第三次握手:客户端收到 SYN 报文之后,会发送一个 ACK 报文,当然,也是一样把服务器的 ISN + 1 作为 ACK 的值,表示已经收到了服务端的 SYN 报文,此时客户端处于 ESTABLISHED 状态。服务器收到 ACK 报文之后,也处于 ESTABLISHED 状态,此时,双方已建立起了连接。确认报文段ACK=1,确认号ack=y+1,序号seq=x+1(初始为seq=x,第二个报文段所以要+1),ACK报文段可以携带数据,不携带数据则不消耗序号。

四次挥手具体过程如下:

图片

    第一次挥手:客户端发送一个 FIN 报文,报文中会指定一个序列号。此时客户端处于FIN_WAIT1状态。即发出连接释放报文段(FIN=1,序号seq=u&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值