RT-ThreadLWIP协议栈之TCP学习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ethernetif_linkoutput()
netif->l回in调koutput()
etharp_send_ip() 或
etharp_query()
etharp_output( )
回调
netif->output()
TCP状态机
TCP滑动窗
TCP拥塞控制算法
lwIP中和TCP相关的选项
● MSS(Maxsimum Segment Size)
关闭连接
■ 当客户端调用close主动关闭连接时,此时只 是关闭TCP连接对中的客户端的写通道,此 时的状态称之为半关闭。依然能接收来自服 务器的数据。
客户端
服务器端
半关闭
全关闭 TCP连接 断开
TCP数据在LwIP中数据流向
lwip_send() netconn_write_partly() 回调do_write() do_writemore() tcp_write() tcp_output() tcp_output_segment() ip_route() ip_output() ip_output_if()
➢ 第一次握手:主机A(客户端)发送SYN=1,序列号为随 机值的一个数据包给主机B(服务器)
➢ 第二次握手:主机B收到A发来的SYN数据包,回发一个
三次握手图解
主机A 客户端
主机B 服务器
TCP建立的连接
TCP经过三次握手后建立起连接,该连接的数据 流是双工的。
主机A 写
主机B 读
读
写
我们称此为TCP连接对。
❏ TCP协议 TCP程序只能调用一次connect。
TCP三次握手
➔ TCP提供可靠的连接服务,并采用三次握手建立一个连 接。
➔ TCP首部中有6bit标志位,分别为6种标示: ○ SYN (synchronous同步,开始建立连接) ○ ACK (acknowledgement 确认) ○ PSH (push报文尽快传送) ○ FIN (finish结束) ○ RST (reset重置连接) ○ URG (urgent紧急)
• 第3步:客户端收到这个同步确认数据包后,再对服务器
进行一个确认。该数据包中,序列号是上一个同步请求 数据包中的确认号值,确认号是服务器的初始序列号+1 。
Hale Waihona Puke Baidu
TCP::发送序号
参考文献
❖ TCP连接建立和断开
RT-Thread LWIP协议栈
TCP协议
基本TCP服务器--客户端程序设计
socket() connect()
send()
socket() bind() listen(lis_fd) ccfd=accept()
阻塞等客 户端连接
recv()
recv(ccfd) 处理请求
close()
send(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),只要任一值不同则
#define TCP_MSS
536
● Send Buffer #define TCP_SND_BUF (2 * MSS)
● TCP Window #define TCP_WND
(4 * MSS)
TCP链路应用 :: 发送超时
TCP链路应用 :: 接收超时
TCP链路应用 :: 保活
TCP::发送序号
代表不同的socket。
● bind ● accept ● connect ● closesocket
指明本地IP地址和端口 加入客户端二元组(ip,port) 指明远端IP地址和端口
调用方断开连接,不再发送数据
connect的那些事儿
❏ UDP协议 在UDP程序创建套接字后,它便可以与多个服务
器通信;当然也可以使用connect指定对方的 IP地址、端口。 UDP程序无三次握手,可多次调用connect。
• 网络包在网络中允许乱序传输,序号用于确
保发送、接收的序列;
• 第1步:客户端向服务器发送一个同步数据包请求建立连
接,该数据包中,初始序列号(ISN)是客户端随机产生 的一个值,确认号是0;
• 第2步:服务器收到这个同步请求数据包后,会对客户端
进行一个同步确认。这个数据包中,序列号(ISN)是服 务器随机产生的一个值,确认号是客户端的初始序列号 +1;