物理层:2进制bit流的物理传输(网线 光纤)
数据链路层:封装成帧 透明传输 差错检验 转发表(MAC表 源mac:目标mac)
网络层:主机(ip)到主机(ip)之间的通信 ARP表(ip:mac) 路由表(ip:ip)
传输层:进程(ip:port)到进程(ip:port)之间的通信
会话层:负责建立和维护会话;
表示层:处理数据格式,加解密等等;
应用层,提供应用程序之间的通信;
服务端:
首先是关于 TCP 连接并发。不少同学认为,由于端口最大范围是 65535,所以 Nginx 的最大并发连接数就是 65535。实际上,Nginx 的并发连接可以达到百万或者千万级,原因是 TCP 连接是个四元组,它包括(源 IP、源端口、目的 IP、目的端口)。
我们以 32 位的 IPv4 地址为例,如果不考虑资源限制,理论上它的最大并发连接数是 2^(32+16+32+16)个(因为 IP 为 32 位,端口号为 16 位),远远大于 65535。
在unix/linux下限制服务端连接数的主要因素是内存和允许的文件描述符个数(每个tcp连接都要占用一定内存,每个socket就是一个文件描述符),在默认2.6内核配置下,每个socket占用内存在15~20k之间。
客户端:
client每次发起tcp连接请求时,除非绑定端口,通常会让系统选取一个空闲的本地端口(local port),该端口是独占的,不能和其他tcp连接共享。tcp端口的数据类型是unsigned short(2字节),因此本地端口个数最大只有65536,端口0有特殊含义,不能使用,这样可用端口最多只有65535,所以在全部作为client端的情况下,最大tcp连接数为65535,这些连接可以连到不同的server ip。
以上是单张网卡的情况 如果多网卡(源 IP、源端口、目的 IP、目的端口) 多网卡相当于源ip翻倍 则链接总数理论可以翻倍