Tcp/ip链接详解(转)ITeye - AG环亚娱乐

Tcp/ip链接详解(转)ITeye

2019-01-10 14:00:00 | 作者: 翠巧 | 标签: 状况,衔接,效劳 | 浏览: 784

 

TCP是一个面向衔接的协议,所以在衔接两边发送数据之前,都需求首要树立一条衔接。这和前面讲到的协议彻底不同。前面讲的一切协议都只是发送数据罢了,大多数都不关怀发送的数据是不是送到,UDP特别显着,从编程的视点来说,UDP编程也要简略的多----UDP都不必考虑数据分片。

书顶用telnet登陆退出来解说TCP协议衔接的树立和间断的进程,能够看到,TCP衔接的树立能够简略的称为三次握手,而衔接的间断则能够叫做四次握手。
1.衔接的树立

在树立衔接的时分,客户端首要向效劳器恳求翻开某一个端口(用SYN段等于1的TCP报文),然后效劳器端发回一个ACK报文告诉客户端恳求报文收到,客户端收到承认报文今后再次宣布承认报文承认方才效劳器端宣布的承认报文(绕口么),至此,衔接的树立完结。这就叫做三次握手。假如计划让两边都做好预备的话,一定要发送三次报文,并且只需求三次报文就能够了。

能够想见,假如再加上TCP的超时重传机制,那么TCP就彻底能够确保一个数据包被送到目的地。
2.完毕衔接

TCP有一个特别的概念叫做half-close,这个概念是说,TCP的衔接是全双工(能够一起发送和接纳)衔接,因此在封闭衔接的时分,有必要封闭传和送两个方向上的衔接。客户机给效劳器一个FIN为1 的TCP报文,然后效劳器回来给客户端一个承认ACK报文,并且发送一个FIN报文,当客户机回复ACK报文后(四次握手),衔接就完毕了。
3.最大报文长度

在树立衔接的时分,通讯的两边要相互承认对方的最大报文长度(MSS),以便通讯。一般这个SYN长度是MTU减去固定IP首部和TCP首部长度。关于一个以太网,一般能够到达1460字节。当然假如关于非本地的IP,这个MSS或许就只有536字节,并且,假如中心的传输网络的MSS更佳的小的话,这个值还会变得更小。
4.TCP的状况搬迁图

书P182页给出了TCP的状况图,这是一个看起来比较复杂的状况搬迁图,因为它包含了两个部分---效劳器的状况搬迁和客户端的状况搬迁,假如从某一个视点动身来看这个图,就会明晰许多,这儿面的效劳器和客户端都不是肯定的,发送数据的就是客户端,承受数据的就是效劳器。
4.1.客户端应用程序的状况搬迁图

客户端的状况能够用如下的流程来表明:

CLOSED- SYN_SENT- ESTABLISHED- FIN_WAIT_1- FIN_WAIT_2- TIME_WAIT- CLOSED

以上流程是在程序正常的情况下应该有的流程,从书中的图中能够看到,在树立衔接时,当客户端收到SYN报文的ACK今后,客户端就翻开了数据交互地衔接。而完毕衔接则通常是客户端自动完毕的,客户端完毕应用程序今后,需求阅历FIN_WAIT_1,FIN_WAIT_2等状况,这些状况的搬迁就是前面说到的完毕衔接的四次握手。
4.2.效劳器的状况搬迁图

效劳器的状况能够用如下的流程来表明:

CLOSED- LISTEN- SYN收到- ESTABLISHED- CLOSE_WAIT- LAST_ACK- CLOSED

在树立衔接的时分,效劳器端是在第三次握手之后才进入数据交互状况,而封闭衔接则是在封闭衔接的第2次握手今后(留意不是第四次)。而封闭今后还要等候客户端给出最终的ACK包才干进入初始的状况。
4.3.其他状况搬迁

书中的图还有一些其他的状况搬迁,这些状况搬迁针对效劳器和客户端两方面的总结如下

1. LISTEN- SYN_SENT,关于这个解说就很简略了,效劳器有时分也要翻开衔接的嘛。
2. SYN_SENT- SYN收到,效劳器和客户端在SYN_SENT状况下假如收到SYN数据报,则都需求发送SYN的ACK数据报并把自己的状况调整到SYN收到状况,预备进入ESTABLISHED
3. SYN_SENT- CLOSED,在发送超时的情况下,会回来到CLOSED状况。
4. SYN_收到- LISTEN,假如遭到RST包,会回来到LISTEN状况。
5. SYN_收到- FIN_WAIT_1,这个搬迁是说,能够不必到ESTABLISHED状况,而能够直接跳转到FIN_WAIT_1状况并等候封闭。

4.4.2MSL等候状况

书中给的图里边,有一个TIME_WAIT等候状况,这个状况又叫做2MSL状况,说的是在TIME_WAIT2发送了最终一个ACK数据报今后,要进入 TIME_WAIT状况,这个状况是防止最终一次握手的数据报没有传送到对方那里而预备的(留意这不是四次握手,这是第四次握手的稳妥状况)。这个状况在很大程度上确保了两边都能够正常完毕,可是,问题也来了。

因为插口的2MSL状况(插口是IP和端口对的意思,socket),使得应用程序在2MSL时刻内是无法再次运用同一个插口的,关于客户程序还好一些,可是关于效劳程序,例如httpd,它总是要运用同一个端口来进行效劳,而在 2MSL时刻内,发动httpd就会呈现过错(插口被运用)。为了防止这个过错,效劳器给出了一个安静时刻的概念,这是说在2MSL时刻内,尽管能够重新发动效劳器,可是这个效劳器仍是要安静的等候2MSL时刻的曩昔才干进行下一次衔接。
4.5.FIN_WAIT_2状况

这就是闻名的半封闭的状况了,这是在封闭衔接时,客户端和效劳器两次握手之后的状况。在这个状况下,应用程序还有承受数据的才能,可是现已无法发送数据,可是也有一种或许是,客户端一向处于FIN_WAIT_2状况,而效劳器则一向处于WAIT_CLOSE状况,而直到应用层来决议封闭这个状况。
5.RST,一起翻开和一起封闭

RST是另一种封闭衔接的方法,应用程序应该能够判别RST包的真实性,即是否为反常间断。而一起翻开和一起封闭则是两种特别的TCP状况,发作的概率很小。
6.TCP效劳器规划

前面从前叙述过UDP的效劳器规划,能够发现UDP的效劳器彻底不需求所谓的并发机制,它只需树立一个数据输入行列就能够。可是TCP不同,TCP效劳器关于每一个衔接都需求树立一个独立的进程(或者是轻量级的,线程),来确保对话的独立性。所以TCP效劳器是并发的。并且TCP还需求装备一个呼入衔接恳求行列(UDP效劳器也相同不需求),来为每一个衔接恳求树立对话进程,这也就是为什么各种TCP效劳器都有一个最大衔接数的原因。而依据源主机的IP和端口号码,效劳器能够很轻松的区别出不同的会话,来进行数据的分发。

把握本章的状况搬迁图才是学习本章的要害。

 

原文见:

版权声明
本文来源于网络,版权归原作者所有,其内容与观点不代表AG环亚娱乐立场。转载文章仅为传播更有价值的信息,如采编人员采编有误或者版权原因,请与我们联系,我们核实后立即修改或删除。

猜您喜欢的文章