重庆生活网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 生活 重庆
查看: 1043|回复: 0
打印 上一主题 下一主题

【从0教學嵌入式Linux】第二十六集

[复制链接]
跳转到指定楼层
楼主
发表于 2020-3-13 16:37:56 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    要想明白Socket连接,先要明白TCP连接,设备能够使用联网功能是因为第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),第三次握手:客户端收到服务器的SYN+ACK包向服务器发送确认包ACK(握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始断开连接时服务器和客户端均可以主动发起断开TCP连接的请求,断开过程需要由于TCP连接是全双工的,因此每个方向都必须单独进行关闭。这个原则是当一




第26课:TCP网络Socket应用程序开發

   
(一)TCP连接
要想明白Socket连接,先要明白TCP連接,設备能够使用联網功能是因為设备底层实现了TCP/IP协议,可以使設备终端终端通过無線网絡建立TCP连接。TCP協議可以对上层网絡提供接口,使上层网络数据的传輸建立在“无差别”的网络之上。
建立起一個TCP连接需要經過“三次握手”:
第一次握手:客户端发送syn包(syn=j)到服务器,并進入SYN_SEND狀態,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一個SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包向服务器發送确認包ACK(ack=k+1),此包發送完毕,客户端和服务器進入ESTABLISHED状态,完成三次握手。
握手过程中傳送的包里不包含数據,三次握手完毕后,客戶端与服務器才正式开始传送數據。理想状态下,TCP连接一旦建立,在通信双方中的任何一方主动关闭连接之前,TCP连接都将被一直保持下去,如下图

   


断开連接时服务器和客户端均可以主动发起断开TCP连接的请求,断開过程需要经过“四次挥手”(過程就不细写了,就是服务器和客户端交互,最终确定断开,見下图)
由于TCP連接是全双工的,因此每个方向都必須单独進行关闭。这个原则是當一方完成他的數据发送任务后就能发送一个FIN来終止這个方向的連接。收到一个FIN只意味着这一方向上没有数據流动,一個TCP連接在收到一个FIN后仍能發送数据。首先進行关闭的一方将执行主动关闭,而另一方執行被动关闭。
(1)主动端A发送一个FIN,用来关闭客户A到被動端B的数據传递。
(2)被動端B收到这個FIN,他发回一个ACK,確認序号为收到的序号加1.和SYN一樣,一个FIN将占用一个序号。
(3)被动端B关闭与主动端A的连接,发送一个FIN给主動端A。
(4)主动端A发回ACK报文确認,并将确認序号设置为收到序號加1.

   


(二)TCP服务器端程序

   



   


(三)TCP客户端程序

   



   



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|联系我们|重庆生活网

GMT+8, 2024-5-6 20:45 , Processed in 0.109375 second(s), 17 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表