RT-Thread LWIP协议栈之TCP学习.pptx

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
RT-Thread LWIP协议栈之TCP学习

RT-Thread LWIP协议栈 TCP协议 基本TCP服务器--客户端程序设计 socket() bind() listen(lis_fd) 阻塞等客户端连接 处理请求 recv() send(ccfd) 数据(请求) 数据(响应) ccfd=accept() socket() connect() recv(ccfd) TCP三次握手 send() close() close(ccfd) TCP网络编程主要的Socket API lwip_socket() lwip_bind() lwip_listen() lwip_accept() lwip_send() lwip_recv() lwip_close() socket 编程你需要了解的 socket 一个socket由一个五元组来表示(协议,server_ip, server_port, client_ip, client_port),只要任一值不同则代表不同的socket。 bind 指明本地IP地址和端口 accept 加入客户端二元组(ip,port) connect 指明远端IP地址和端口 closesocket 调用方断开连接,不再发送数据 connect的那些事儿 UDP协议 在UDP程序创建套接字后,它便可以与多个服务器通信;当然也可以使用connect指定对方的IP地址、端口。 UDP程序无三次握手,可多次调用connect。 TCP协议 TCP程序只能调用一次connect。 TCP三次握手 TCP提供可靠的连接服务,并采用三次握手建立一个连接。 TCP首部中有6bit标志位,分别为6种标示: SYN (synchronous同步,开始建立连接) ACK (acknowledgement 确认) PSH (push报文尽快传送) FIN (finish结束) RST (reset重置连接) URG (urgent紧急) 第一次握手:主机A(客户端)发送SYN=1,序列号为随机值的一个数据包给主机B(服务器) 第二次握手:主机B收到A发来的SYN数据包,回发一个ACK=1,SYN=1的数据包 第三次握手:主机A收到数据包,并回发ACK=1的数据包 三次握手图解 主机A 客户端 主机B 服务器 SYN=1 SYN=1 ACK=1 ACK=1 TCP建立的连接 TCP经过三次握手后建立起连接,该连接的数据流是双工的。 我们称此为TCP连接对。 写 读 写 读 主机A 主机B 关闭连接 当客户端调用close主动关闭连接时,此时只是关闭TCP连接对中的客户端的写通道,此时的状态称之为半关闭。依然能接收来自服务器的数据。 客户端 服务器端 FIN ACK FIN ACK 半关闭 全关闭 TCP连接断开 TCP数据在LwIP中数据流向 lwip_send() netconn_write_partly() 回调do_write() do_writemore() etharp_output() netif-output() ethernetif_linkoutput() netif-linkoutput() 回调 回调 tcp_write() tcp_output() tcp_output_segment() ip_route() ip_output() ip_output_if() etharp_send_ip() 或 etharp_query() TCP状态机 TCP滑动窗 TCP拥塞控制算法 lwIP中和TCP相关的选项 MSS(Maxsimum Segment Size) #define TCP_MSS 536 Send Buffer #define TCP_SND_BUF (2 * MSS) TCP Window #define TCP_WND (4 * MSS) TCP链路应用 :: 发送超时 TCP链路应用 :: 接收超时 TCP链路应用 :: 保活 TCP::发送序号 网络包在网络中允许乱序传输,序号用于确保发送、接收的序列; 第1步:客户端向服务器发送一个同步数据包请求建立连接,该数据包中,初始序列号(ISN)是客户端随机产生的一个值,确认号是0; 第2步:服务器收到这个同步请求数据包后,会对客户端进行一个同步确认。这个数据包中,序列号(ISN)是服务器随机产生的一个值,确认号是客户端的初始序列号+1; 第3步:客户端收到这个同步确认数据包后,再对服务器进行一个确认。该数据包中,序列号是上一个同步请求数据包中的确认号值,确认号是服务器的初始序列号+1。 TCP::发送序号 参考文献 TCP连接建立和断开

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档