端口的概念:1-1023是系统分配的端口,应用程序不可用。常见的端口有
TCP连接三次握手:
第一次握手:客户端TCP首先给服务器端TCP发送一个特殊的TCP数据
段。该数据段不包含应用层数据,并将头部中的SYN位设置为1,所以该数
据段被称为SYN数据段。另外,客户选择一个初始序列号SEQ,设SEQ=x
并将这个编号放到初始的TCP SYN数据段的序列号字段中。该数据段被封
装到一个IP数据报中,并发送给服务器。
第二次握手:一旦装有TCP SYN数据段的IP数据报到达了服务器主机,服
务器将从该数据报中提取出TCP SYN数据段,给该连接分配TCP缓冲区和
变量,并给客户TCP发送一个允许连接的数据段。这个允许连接的数据段
也不包含任何应用层数据。但是,它的头部中装载着3个重要信息。首先,
SYN被设置为1;其次,TCP数据段头部的确认字段被设置为x+1;最后,
服务器选择自己的初始顺序号,SEQ=y,并将该值放到TCP数据段头部的
序列号字段中。
第三次握手:在接收到允许连接数据段之后,客户也会给连接分配缓冲区
和变量。客户端主机还会给服务器发送另一个数据段,对服务器的允许连
接数据段给出确认。
整个过程如图所示:
概念:
未连接队列:在三次握手协议中,服务器维护一个未连接队列,该队列为每个客户端的SYN包(syn=j)开设一个条目,该条目表明服务器已收到SYN包,并向客户发出确认,正在等待客户的确认包。这些条目所标识的连接在服务器处于 Syn_RECV状态,当服务器收到客户的确认包时,删除该条目,服务器进入ESTABLISHED状态。
Backlog参数:表示未连接队列的最大容纳数目。SYN-ACK重传次数服务器发送完SYN-ACK包,如果未收到客户确认包,服务器进行首次重传,等待一段时间仍未收到客户确认包,进行第二次重传,如果重传次数超过系统规定的最大重传次数,系统将该连接信息从半连接队列中删除。注意,每次重传等待的时间不一定相同。
半连接存活时间:是指半连接队列的条目存活的最长时间,也即服务从收到SYN包到确认这个报文无效的最长时间,该时间值是所有重传请求包的最长等待时间总和。有时我们也称半连接存活时间为Timeout时间、SYN_RECV存活时间。
TCP释放连接:
第一次挥手:由进行数据通信的任意一方提出要求释放连接的请求报文段。
第二次挥手:接收端收到此请求后,会发送确认报文段,同时当接收端的所有数据也都已经发送完毕后,接收端会向发送端发送一个带有其自己序号的报文段。
第三次挥手:发送端收到接收端的要求释放连接的报文段后,发送反向确认。
TCP数据报文格式:
原文:http://www.cnblogs.com/siguoya/p/3512021.html