TCP连接建立过程
在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协议建立连接的过程:
在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),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
完成三次握手,客户端与服务器开始传送数据,在上述过程中,还有一些重要的概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。
SYN-ACK 重传次数 服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和,有时也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
与正常的TCP连接一样,分3组,连接服务器、发送数据、接收数据,这里采用UTF-8格式进行数据通信
使用put_data方法可以正常发送数据,其它方法只能用于Godot的服务器与客户端之间通信,因为其它方法Godot会向数据前后添加几个字节的标识,使得数据发生改变
采用了while循环,可能会导致帧率降低,先判断收到>0的字节数,再将其转化为utf8字符
-采用socketserver包,可以方便的建立服务端
我觉得火星人的回答跟楼主的问题有点出入,首先:楼主提到TCP/IP分层的时候用的是网络接口层,那么楼主的TCP/IP分层概念应该是:应用层、传输层、网络层、网络接口层(包含了七层模型中的数据链路层和物理层)。
我尝试回答一下楼主的问题,希望大家继续拍砖,如果访问www163COM这个网站,那么他的主要过程应该是:
一、主机向DNS服务器发起域名解析请求,以得到相对应的IP地址
二、应用层应用HTTP协议发送数据
三、数据到达传输层封装成数据段,主机使用1024以后的随机源端口号,目标端口号为80
四、数据段到达网络层封装成数据包,加入主机源IP地址和目标IP地址
五、数据包到达网络接口层首先封装成数据帧,加入源MAC地址和目标MAC地址(注:此目标MAC地址为本地网关的MAC地址,源和目的MAC地址在数据转发的过程中,会由路由器不断的改变)。封装后将数据转换为物理层的数据流,通过互联网发送至目标服务器。
另外,楼上提到TCP/IP的三次握手也是很主要的,TCP是可靠的握手协议(传输层)
在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),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
0条评论