计网常见问题记录
本文最后更新于:2022年8月14日 中午
更全、更深
TCP
一台服务器最大可以支撑多少条TCP连接?
理论上,一条TCP连接由一个四元组组成,分别是源IP地址,目的IP地址,源端口号,目的端口号。任意一个元素发生了改变,就代表的是一条完全不同的连接了。
对于服务端:
拿服务端的Nginx举例,服务端的IP地址是固定的,端口号是固定的80,只有源IP地址、源端口号是可变的。IPv4地址是32位,有$2^32$个IP数,端口号是16位,有$2^16=65535$个port数。因此,理论上Nginx最多可以建立$2^32 * 2^16$个连接。
对于BS架构的浏览器端来说:
源IP地址和源端口号是不变的,目的端(服务器端)的端口号是80端口,是不变的,唯一可变的就是服务器端的IP地址是可变的。如果是IPv4网络下,IP地址是32位的,那么浏览器最多能够建立$2^32$个连接。
服务器能处理的并发数量和处理每个连接的数据处理工作量有关:
如果只建立连接不发送数据,不接收数据,服务器对cpu的需求就很少,只有处理连接握手的时候才需要一些资源。
但是,每维持一条TCP连接,就需要创建一个文件对象。(因为Linux是一切皆文件,socket也是文件)
重发超时如何确定?
重发超时指的是 在重发数据之前,等待确认应答到来的那个特定时间间隔。
如果超过这个时间仍然没有收到确认应答,发送端就认为数据丢失,会重发数据。
TCP在发送数据包时会计算 往返时间(Round Trip Time, RTT,指报文段的往返时间)和偏差(往返时间波动的值、方差,有时也叫抖动)。
重发超时的时间,是比 往返时间+偏差 稍大一点的值。
- 数据重发后,如果还是收不到确认应答,就再次发送数据。这时,重发时间会以2倍、4倍的指数函数变大。
- 数据不会被无线重发。达到一定重发次数后,还是收不到确认应答,就判断为网络或对方主机发生异常,强制关闭连接;并通知应用通信异常强行终止。
TCP的连接管理
TCP是面向连接的,面向连接是指在发生数据之前要先做好通信两端的准备工作,建立连接,然后再发送数据。
UDP是面向无连接的,不检查对端是否可以通信,直接将UDP包发送出去。
TCP在数据通信前,通过TCP首部发送一个SYN包,请求建立连接,并等待对方的确认应答。如果对方发来确认应答ACK和SYN,则针对对方的SYN发送确认应答ACK,确认建立连接。
一个TCP连接的建立和断开,正常过程至少需要来回发送7个包才能完成:建立连接需要发送3个包,三次握手;断开连接4个包,4次挥手。
TCP以段位单位发送数据
你知道哪些 HTTP 请求方法?
HTTP 1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。HTTP 1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法。
其中 GET 和 POST 的区别是 …; 其中 OPTIONS、PUT、PATCH、DELETE、TRACE 和 CONNECT 方法的作用是 …。
HTTP 1.0 和 HTTP 1.1 甚至和 HTTP/2 有什么区别?
HTTP 1.x ,HTTP/2 的对比区别
ipv4网络下,浏览器端理论上可以和服务端建立多少个连接呢?
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!