计算机网络
TCP连接中,服务端网线拔掉会怎么样
当客户端与服务器建立起正常的TCP连接后,如果客户主机网线断开、电源掉电、或系统崩溃,服务器进程将永远不会知道(通过我们常用的select,epoll监测不到断开或错误事件),如果不主动处理或重启系统的话对于服务端来说会一直维持着这个连接,任凭服务端进程如何望穿秋水,也永远再等不到客户端的任何回应。这种情况就是半开连接,浪费了服务器端可用的文件描述符。
TCP拥塞控制
在某段时间,若对网络中某一资源的需求超过了该资源所能提供的可用部分,网络性能就要变坏,这种情况就叫做网络拥塞。
TCP的四种拥塞控制算法
1.慢开始
首先发送一个字节的报文,试探,收到ACK后进行指数增长。
2.拥塞避免算法
若拥塞窗口大于慢开始门限,那么使用避免算法。
先线性增长,若发生网络拥塞,那么就将慢开始门限变为原来的一半,并让拥塞窗口变为1。
3.快重传
有时丢失个别包会被误认为是网络拥塞,故采用快重传,收到三个连续的ACK确认,就认为是发生了丢失。
4.快恢复
慢开始门限和拥塞窗口调整为当前窗口的一半,开始执行拥塞避免。
URL的组成
HTTP报文格式
报文格式:
请求行:方法(get/post)+URL+版本(HTTP1.0)
首部行:
1.服务器域名
2.服务器发送完可释放连接
3.……
TCP流量控制
接收端在接收到数据后,对其进行处理。如果发送端的发送速度太快,导致接收端的结束缓冲区很快的填充满了。此时如果发送端仍旧发送数据,那么接下来发送的数据都会丢包,继而导致丢包的一系列连锁反应,超时重传呀什么的。而TCP根据接收端对数据的处理能力,决定发送端的发送速度,这个机制就是流量控制。
在TCP协议的报头信息当中,有一个16位字段的窗口大小。在介绍这个窗口大小时我们知道,窗口大小的内容实际上是接收端接收数据缓冲区的剩余大小。这个数字越大,证明接收端接收缓冲区的剩余空间越大,网络的吞吐量越大。接收端会在确认应答发送ACK报文时,将自己的即时窗口大小填入,并跟随ACK报文一起发送过去。**而发送方根据ACK报文里的窗口大小的值的改变进而改变自己的发送速度。如果接收到窗口大小的值为0,那么发送方将停止发送数据。并定期的向接收端发送窗口探测数据段,让接收端把窗口大小告诉发送端。