在TCP/IP中,TCP协议通过三次握手来建立连接,从而提供可靠的连接服务。
第一次握手:建立连接后,客户端向服务器发送syn包(syn=j),进入SYN_SEND状态,等待服务器确认;
第二次握手:当服务器收到syn包时,必须确认客户端的syn(ack=j+1)并发送一个syn包(syn=k),即syn+ack包。此时,服务器进入SYN_RECV状态。
第三次握手:SYN+ACK包,客户端收到服务器端发来的确认包ACK(ACK=k+1),来发送这个包来发送,客户端和服务器端进入建立状态,完成三路握手。
扩展资料:
重要概念:
无关的队列:三重握手协议、服务器维护一个独立队列,为每个客户的SYN包创建一个条目(SYN=j)表明服务器已经收到了SYN包和确认发送到客户,等待客户的确认包。
这些条目标识的连接处于服务器的Syn_RECV状态,当服务器接收到客户机的确认包时,它将删除该条目,服务器将进入已建立的状态。
Backlog参数:表示要保持的未连接队列的最大数量。
当服务器发送synack包时,如果没有收到客户端确认包,服务器将进行第一次重传,等待一段时间仍然没有收到客户端确认包,然后进行第二次重传。
如果重传号超过系统指定的最大重传号,系统将从半连接队列中删除连接信息。注意每个重传的等待时间可能不相同。
半连接生存时间:指半连接队列中条目的最长生存时间,即从接收SYN包到确认无效消息的最长服务时间。这个时间值是所有重传请求包的最长等待时间的总和。有时我们也称半连接生存时间为超时时间,SYN_RECV生存时间。
TCP协议建立连接的过程:\x0d\x0a在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。\x0d\x0a\x0d\x0a第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;\x0d\x0a\x0d\x0a第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;\x0d\x0a\x0d\x0a第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。\x0d\x0a\x0d\x0a完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:\x0d\x0a\x0d\x0a未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。\x0d\x0aBacklog参数:表示未连接队列的最大容纳数目。\x0d\x0a\x0d\x0aSYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。\x0d\x0a\x0d\x0a半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和,有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。1、作好编程准备,包括后面要用的头文件,以及一些变量的定义。
2、在终端界面上显示提示信息,告诉TCP运行后的结果,如传送完成、传送了多少字节、速度是多少等。
3、提示客户端用法,如何从键盘输入数据,用什么格式输入,打开套接字,为传送的字节分配内存。
4、用connect函数,指定字节数,时间和遵从的协议。传送完毕,关闭套接字。
5、打开侦听函数,并且等待接收来自客户端的TCP数据。
6、接收完毕,关闭套接字,并且在屏幕显示传输结果。
注意事项:
TCP旨在适应支持多网络应用的分层协议层次结构。 连接到不同但互连的计算机通信网络的主计算机中的成对进程之间依靠TCP提供可靠的通信服务。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)