套接字基础知识有哪些

介绍

本篇文章给大家分享的是有关插座基础知识有哪些,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

如何一步步掌握插座相关的知识。

<强>什么是插座吗?

大家都用电脑上网,当我们访问运维社区https://www.unixhot.com的时候,我们的电脑和运维社区的服务器就会创建一条套接字,我们称之为网络套接字。那么既然是网络通信,肯定是成对的。至少有一个客户端和服务端,我们称之为套接字对。

一个套接字对(插座)是一个定义该网络连接的两个端点的五元组,包括:

<李>

<强>源IP <>强地址

<李>

<强>源端口

<李>

<强>目的IP <>强劲地址

<李>

<强>目的端口

<李>

<强>类型:TCP或UDP

那么针对于HTTP请求来说,我们知道底层是建立了一条TCP的套接字,那么TCP的套接字对就是一个四元组,因为协议已经确定了:

<强> 1。 <强>源IP <>强地址,2。 <强>源端口,3。 <强>目的IP <>强劲地址,4。 <强>目的端口。

<强>客户端的随机端口

为了更直观的认识这个TCP套接字,我们做一个小实验,我这里准备了两台服务器:

角色

IP地址

端口

客户端192.168.56.11

随机

服务端192.168.56.12

9999年,,当客户端192.168.56.11访问192.168.56.12的9999端口的时候,那么会选择一个随机端口来进行通信,那么这个随机端口,到底是从什么范围随机出来了呢,端口总有一个范围不可能无穷多的。

,,,那么对于TCP套接字来说客户端的一个IP地址,到底能有多少个端口呢?由于TCP协议头部使用16位来保存端口号,所以端口的个数最多为65536个,2 ^ 16=65536。

,,套接字基础知识有哪些“> <br/> </p> <p>没错,是65536个。但是为什么我们经常看到网上说可用端口最大65535个呢,也就是2 ^ 16:1个。因为端口号是从0开始算的,0 - 65535那就是65536个,而0端口是保留端口,无论是TCP还是UDP都是不用使用的,当然这个是标准,那到底能不能监听端口0呢,下面我用一个python脚本,监听本地的端口0来试试。</p> <p> [root@test ~] # catbind_port_zero.py </p> <p> # !/usr/bin/env python </p> <p> # - * -编码:utf - 8 - * - - - - - - </p> <p> & # 39; & # 39; & # 39;本脚本监听本地的127.0.0.1的端口0 </p> <p>探索端口0的奥秘& # 39;& # 39;& # 39;</p> <p>进口套接字</p> <p> def bind_port_zero (): </p> <p>,,,党卫军=socket.socket (socket.AF_INET socket.SOCK_STREAM) </p> <p>,,,ss.bind ((& # 39; 127.0.0.0& # 39;, 0)) </p> <p>,,,addr,端口=ss.getsockname () </p> <p>,,,ss.close () </p> <p>,,,打印(addr,端口)</p> <p> bind_port_zero () </p> <p>执行脚本,看看到底能不能正常监听:</p> <p> [root@test ~] # pythonbind_port_zero.py </p> <p> (& # 39; 127.0.0.0& # 39; 53692) </p> <p> [root@test ~] # pythonbind_port_zero.py </p> <p> (& # 39; 127.0.0.0& # 39; 59444) </p> <p>可以发现,可以正常监听,但是呢并没有监听到端口0。实验证明在Linux下如果在绑定的时候指定端口0,那么由系统随机选择一个可用端口来绑定。</p> <p>好的,我们现在知道了端口的范围0 - 65535,那么作为客户端访问其它服务端的时候,能用多少呢?并不是这个范围都可以用的。那么在Linux下我们可以这么获取本地的随机端口范围:</p> <p> [root@test ~] # cat/proc/sys/net/ipv4/ip_local_port_range </p> <p> 32768,,,,61000年</p> <p>,,,不要惊讶答案确实是32768年到61000年,现在你应该明白,别人说的发10万并发进行压力测试代表什么意思了吧。至少默认情况下是无法实现的,读完这句话,是否有启发呢?并不是不能实现哦。</p> <p> <强>瓶颈真的只有随机端口范围吗? </强> </p> <p>刚才我们也看了,我们访问其它服务器,作为客户端,我们要使用一个随机端口,32768 - 61000,貌似也不少,当然你还可以修改它,扩大随机端口范围,例如我们使用Nginx做反向代理负载均衡的时候,用户端和Nginx建立窝进行通信,Nginx还需要和后端真实服务器也建立窝进行通信,在高并发的场景下,这个随机端口肯定是一个瓶颈。但是真的只有随机端口范围是瓶颈吗?下面我们使用ab命令来对百度进行一次压力测试。</p> <p> ab是Apache的性能测试工具,可以模拟并发进行网络性能测试。在CenotOS下,你可以这样来安装:</p> <p> [root@test ~] # yuminstall - y httpd-devel <h2 class=套接字基础知识有哪些