- 1、本文档共20页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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连接建立和断开
您可能关注的文档
- Part V Prototype Documentation for the Performance Prediction Component Delivery Slip Name.pdf
- Partial diel vertical migrations in pelagic fish.pdf
- Particle Acceleration by Electromagnetic-Dominated Outflows.pdf
- Particle acceleration in rotating and shearing jets from AGN.pdf
- Particle acceleration in solar flares observations versus numerical simulations.pdf
- Particle Acceleration, Magnetic Field Generation, and Emission in Relativistic Shocks.pdf
- Particle and spin motion in polarized media.pdf
- Particle density in zero temperature symmetry restoring phase transitions in four-fermion i.pdf
- Particle identification with the AMS-02 RICH detector search for dark matter with antideute.pdf
- Particle In Cell Method_A brief description of the PIC Method.pdf
文档评论(0)